@datagrok/hit-triage 1.9.2 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"package-test.js","mappings":"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","sources":["webpack://hittriage/./node_modules/fast-sha256/sha256.js","webpack://hittriage/webpack/bootstrap","webpack://hittriage/webpack/runtime/define property getters","webpack://hittriage/webpack/runtime/hasOwnProperty shorthand","webpack://hittriage/webpack/runtime/make namespace object","webpack://hittriage/external var \"DG\"","webpack://hittriage/./node_modules/@datagrok-libraries/test/src/dataframe-utils.js","webpack://hittriage/./node_modules/@datagrok-libraries/test/src/test.js","webpack://hittriage/./src/package-test.ts"],"sourcesContent":["(function (root, factory) {\n // Hack to make all exports of this module sha256 function object properties.\n var exports = {};\n factory(exports);\n var sha256 = exports[\"default\"];\n for (var k in exports) {\n sha256[k] = exports[k];\n }\n \n if (typeof module === 'object' && typeof module.exports === 'object') {\n module.exports = sha256;\n } else if (typeof define === 'function' && define.amd) {\n define(function() { return sha256; }); \n } else {\n root.sha256 = sha256;\n }\n})(this, function(exports) {\n\"use strict\";\nexports.__esModule = true;\n// SHA-256 (+ HMAC and PBKDF2) for JavaScript.\n//\n// Written in 2014-2016 by Dmitry Chestnykh.\n// Public domain, no warranty.\n//\n// Functions (accept and return Uint8Arrays):\n//\n// sha256(message) -> hash\n// sha256.hmac(key, message) -> mac\n// sha256.pbkdf2(password, salt, rounds, dkLen) -> dk\n//\n// Classes:\n//\n// new sha256.Hash()\n// new sha256.HMAC(key)\n//\nexports.digestLength = 32;\nexports.blockSize = 64;\n// SHA-256 constants\nvar K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,\n 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,\n 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,\n 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,\n 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,\n 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,\n 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,\n 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\nfunction hashBlocks(w, v, p, pos, len) {\n var a, b, c, d, e, f, g, h, u, i, j, t1, t2;\n while (len >= 64) {\n a = v[0];\n b = v[1];\n c = v[2];\n d = v[3];\n e = v[4];\n f = v[5];\n g = v[6];\n h = v[7];\n for (i = 0; i < 16; i++) {\n j = pos + i * 4;\n w[i] = (((p[j] & 0xff) << 24) | ((p[j + 1] & 0xff) << 16) |\n ((p[j + 2] & 0xff) << 8) | (p[j + 3] & 0xff));\n }\n for (i = 16; i < 64; i++) {\n u = w[i - 2];\n t1 = (u >>> 17 | u << (32 - 17)) ^ (u >>> 19 | u << (32 - 19)) ^ (u >>> 10);\n u = w[i - 15];\n t2 = (u >>> 7 | u << (32 - 7)) ^ (u >>> 18 | u << (32 - 18)) ^ (u >>> 3);\n w[i] = (t1 + w[i - 7] | 0) + (t2 + w[i - 16] | 0);\n }\n for (i = 0; i < 64; i++) {\n t1 = (((((e >>> 6 | e << (32 - 6)) ^ (e >>> 11 | e << (32 - 11)) ^\n (e >>> 25 | e << (32 - 25))) + ((e & f) ^ (~e & g))) | 0) +\n ((h + ((K[i] + w[i]) | 0)) | 0)) | 0;\n t2 = (((a >>> 2 | a << (32 - 2)) ^ (a >>> 13 | a << (32 - 13)) ^\n (a >>> 22 | a << (32 - 22))) + ((a & b) ^ (a & c) ^ (b & c))) | 0;\n h = g;\n g = f;\n f = e;\n e = (d + t1) | 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) | 0;\n }\n v[0] += a;\n v[1] += b;\n v[2] += c;\n v[3] += d;\n v[4] += e;\n v[5] += f;\n v[6] += g;\n v[7] += h;\n pos += 64;\n len -= 64;\n }\n return pos;\n}\n// Hash implements SHA256 hash algorithm.\nvar Hash = /** @class */ (function () {\n function Hash() {\n this.digestLength = exports.digestLength;\n this.blockSize = exports.blockSize;\n // Note: Int32Array is used instead of Uint32Array for performance reasons.\n this.state = new Int32Array(8); // hash state\n this.temp = new Int32Array(64); // temporary state\n this.buffer = new Uint8Array(128); // buffer for data to hash\n this.bufferLength = 0; // number of bytes in buffer\n this.bytesHashed = 0; // number of total bytes hashed\n this.finished = false; // indicates whether the hash was finalized\n this.reset();\n }\n // Resets hash state making it possible\n // to re-use this instance to hash other data.\n Hash.prototype.reset = function () {\n this.state[0] = 0x6a09e667;\n this.state[1] = 0xbb67ae85;\n this.state[2] = 0x3c6ef372;\n this.state[3] = 0xa54ff53a;\n this.state[4] = 0x510e527f;\n this.state[5] = 0x9b05688c;\n this.state[6] = 0x1f83d9ab;\n this.state[7] = 0x5be0cd19;\n this.bufferLength = 0;\n this.bytesHashed = 0;\n this.finished = false;\n return this;\n };\n // Cleans internal buffers and re-initializes hash state.\n Hash.prototype.clean = function () {\n for (var i = 0; i < this.buffer.length; i++) {\n this.buffer[i] = 0;\n }\n for (var i = 0; i < this.temp.length; i++) {\n this.temp[i] = 0;\n }\n this.reset();\n };\n // Updates hash state with the given data.\n //\n // Optionally, length of the data can be specified to hash\n // fewer bytes than data.length.\n //\n // Throws error when trying to update already finalized hash:\n // instance must be reset to use it again.\n Hash.prototype.update = function (data, dataLength) {\n if (dataLength === void 0) { dataLength = data.length; }\n if (this.finished) {\n throw new Error(\"SHA256: can't update because hash was finished.\");\n }\n var dataPos = 0;\n this.bytesHashed += dataLength;\n if (this.bufferLength > 0) {\n while (this.bufferLength < 64 && dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n if (this.bufferLength === 64) {\n hashBlocks(this.temp, this.state, this.buffer, 0, 64);\n this.bufferLength = 0;\n }\n }\n if (dataLength >= 64) {\n dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength);\n dataLength %= 64;\n }\n while (dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n return this;\n };\n // Finalizes hash state and puts hash into out.\n //\n // If hash was already finalized, puts the same value.\n Hash.prototype.finish = function (out) {\n if (!this.finished) {\n var bytesHashed = this.bytesHashed;\n var left = this.bufferLength;\n var bitLenHi = (bytesHashed / 0x20000000) | 0;\n var bitLenLo = bytesHashed << 3;\n var padLength = (bytesHashed % 64 < 56) ? 64 : 128;\n this.buffer[left] = 0x80;\n for (var i = left + 1; i < padLength - 8; i++) {\n this.buffer[i] = 0;\n }\n this.buffer[padLength - 8] = (bitLenHi >>> 24) & 0xff;\n this.buffer[padLength - 7] = (bitLenHi >>> 16) & 0xff;\n this.buffer[padLength - 6] = (bitLenHi >>> 8) & 0xff;\n this.buffer[padLength - 5] = (bitLenHi >>> 0) & 0xff;\n this.buffer[padLength - 4] = (bitLenLo >>> 24) & 0xff;\n this.buffer[padLength - 3] = (bitLenLo >>> 16) & 0xff;\n this.buffer[padLength - 2] = (bitLenLo >>> 8) & 0xff;\n this.buffer[padLength - 1] = (bitLenLo >>> 0) & 0xff;\n hashBlocks(this.temp, this.state, this.buffer, 0, padLength);\n this.finished = true;\n }\n for (var i = 0; i < 8; i++) {\n out[i * 4 + 0] = (this.state[i] >>> 24) & 0xff;\n out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n }\n return this;\n };\n // Returns the final hash digest.\n Hash.prototype.digest = function () {\n var out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._saveState = function (out) {\n for (var i = 0; i < this.state.length; i++) {\n out[i] = this.state[i];\n }\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._restoreState = function (from, bytesHashed) {\n for (var i = 0; i < this.state.length; i++) {\n this.state[i] = from[i];\n }\n this.bytesHashed = bytesHashed;\n this.finished = false;\n this.bufferLength = 0;\n };\n return Hash;\n}());\nexports.Hash = Hash;\n// HMAC implements HMAC-SHA256 message authentication algorithm.\nvar HMAC = /** @class */ (function () {\n function HMAC(key) {\n this.inner = new Hash();\n this.outer = new Hash();\n this.blockSize = this.inner.blockSize;\n this.digestLength = this.inner.digestLength;\n var pad = new Uint8Array(this.blockSize);\n if (key.length > this.blockSize) {\n (new Hash()).update(key).finish(pad).clean();\n }\n else {\n for (var i = 0; i < key.length; i++) {\n pad[i] = key[i];\n }\n }\n for (var i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36;\n }\n this.inner.update(pad);\n for (var i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36 ^ 0x5c;\n }\n this.outer.update(pad);\n this.istate = new Uint32Array(8);\n this.ostate = new Uint32Array(8);\n this.inner._saveState(this.istate);\n this.outer._saveState(this.ostate);\n for (var i = 0; i < pad.length; i++) {\n pad[i] = 0;\n }\n }\n // Returns HMAC state to the state initialized with key\n // to make it possible to run HMAC over the other data with the same\n // key without creating a new instance.\n HMAC.prototype.reset = function () {\n this.inner._restoreState(this.istate, this.inner.blockSize);\n this.outer._restoreState(this.ostate, this.outer.blockSize);\n return this;\n };\n // Cleans HMAC state.\n HMAC.prototype.clean = function () {\n for (var i = 0; i < this.istate.length; i++) {\n this.ostate[i] = this.istate[i] = 0;\n }\n this.inner.clean();\n this.outer.clean();\n };\n // Updates state with provided data.\n HMAC.prototype.update = function (data) {\n this.inner.update(data);\n return this;\n };\n // Finalizes HMAC and puts the result in out.\n HMAC.prototype.finish = function (out) {\n if (this.outer.finished) {\n this.outer.finish(out);\n }\n else {\n this.inner.finish(out);\n this.outer.update(out, this.digestLength).finish(out);\n }\n return this;\n };\n // Returns message authentication code.\n HMAC.prototype.digest = function () {\n var out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n return HMAC;\n}());\nexports.HMAC = HMAC;\n// Returns SHA256 hash of data.\nfunction hash(data) {\n var h = (new Hash()).update(data);\n var digest = h.digest();\n h.clean();\n return digest;\n}\nexports.hash = hash;\n// Function hash is both available as module.hash and as default export.\nexports[\"default\"] = hash;\n// Returns HMAC-SHA256 of data under the key.\nfunction hmac(key, data) {\n var h = (new HMAC(key)).update(data);\n var digest = h.digest();\n h.clean();\n return digest;\n}\nexports.hmac = hmac;\n// Fills hkdf buffer like this:\n// T(1) = HMAC-Hash(PRK, T(0) | info | 0x01)\nfunction fillBuffer(buffer, hmac, info, counter) {\n // Counter is a byte value: check if it overflowed.\n var num = counter[0];\n if (num === 0) {\n throw new Error(\"hkdf: cannot expand more\");\n }\n // Prepare HMAC instance for new data with old key.\n hmac.reset();\n // Hash in previous output if it was generated\n // (i.e. counter is greater than 1).\n if (num > 1) {\n hmac.update(buffer);\n }\n // Hash in info if it exists.\n if (info) {\n hmac.update(info);\n }\n // Hash in the counter.\n hmac.update(counter);\n // Output result to buffer and clean HMAC instance.\n hmac.finish(buffer);\n // Increment counter inside typed array, this works properly.\n counter[0]++;\n}\nvar hkdfSalt = new Uint8Array(exports.digestLength); // Filled with zeroes.\nfunction hkdf(key, salt, info, length) {\n if (salt === void 0) { salt = hkdfSalt; }\n if (length === void 0) { length = 32; }\n var counter = new Uint8Array([1]);\n // HKDF-Extract uses salt as HMAC key, and key as data.\n var okm = hmac(salt, key);\n // Initialize HMAC for expanding with extracted key.\n // Ensure no collisions with `hmac` function.\n var hmac_ = new HMAC(okm);\n // Allocate buffer.\n var buffer = new Uint8Array(hmac_.digestLength);\n var bufpos = buffer.length;\n var out = new Uint8Array(length);\n for (var i = 0; i < length; i++) {\n if (bufpos === buffer.length) {\n fillBuffer(buffer, hmac_, info, counter);\n bufpos = 0;\n }\n out[i] = buffer[bufpos++];\n }\n hmac_.clean();\n buffer.fill(0);\n counter.fill(0);\n return out;\n}\nexports.hkdf = hkdf;\n// Derives a key from password and salt using PBKDF2-HMAC-SHA256\n// with the given number of iterations.\n//\n// The number of bytes returned is equal to dkLen.\n//\n// (For better security, avoid dkLen greater than hash length - 32 bytes).\nfunction pbkdf2(password, salt, iterations, dkLen) {\n var prf = new HMAC(password);\n var len = prf.digestLength;\n var ctr = new Uint8Array(4);\n var t = new Uint8Array(len);\n var u = new Uint8Array(len);\n var dk = new Uint8Array(dkLen);\n for (var i = 0; i * len < dkLen; i++) {\n var c = i + 1;\n ctr[0] = (c >>> 24) & 0xff;\n ctr[1] = (c >>> 16) & 0xff;\n ctr[2] = (c >>> 8) & 0xff;\n ctr[3] = (c >>> 0) & 0xff;\n prf.reset();\n prf.update(salt);\n prf.update(ctr);\n prf.finish(u);\n for (var j = 0; j < len; j++) {\n t[j] = u[j];\n }\n for (var j = 2; j <= iterations; j++) {\n prf.reset();\n prf.update(u).finish(u);\n for (var k = 0; k < len; k++) {\n t[k] ^= u[k];\n }\n }\n for (var j = 0; j < len && i * len + j < dkLen; j++) {\n dk[i * len + j] = t[j];\n }\n }\n for (var i = 0; i < len; i++) {\n t[i] = u[i] = 0;\n }\n for (var i = 0; i < 4; i++) {\n ctr[i] = 0;\n }\n prf.clean();\n return dk;\n}\nexports.pbkdf2 = pbkdf2;\n});\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = DG;","import * as sha256 from 'fast-sha256';\n/**\n * For columns of string type. Checks whether column contains empty values and removes corresponding rows in case user selects to remove.\n *\n */\nexport function removeEmptyStringRows(table, col) {\n const cats = col.categories;\n const emptyRawInd = cats.map((val, ind) => !val ? ind : null).filter((it) => it !== null);\n const rawData = [...col.getRawData()];\n const emptyRawsIndexes = [];\n let removedRowsCounter = 0;\n for (let i = 0; i < table.rowCount; i++) {\n if (emptyRawInd.includes(rawData[i])) {\n table.rows.removeAt(i - removedRowsCounter);\n emptyRawsIndexes.push(i);\n removedRowsCounter += 1;\n }\n }\n return emptyRawsIndexes;\n}\nexport function hashDataFrame(table, names) {\n names !== null && names !== void 0 ? names : (names = table.columns.names());\n const hasher = new sha256.Hash();\n const order = table.getSortedOrder(names);\n const encoder = new TextEncoder();\n for (const name of names) {\n const column = table.columns.byName(name);\n const dataArray = column.getRawData();\n const isString = column.type == DG.TYPE.STRING;\n const cats = column.categories;\n for (let i = 0; i < dataArray.length; i++) {\n if (isString) {\n const data = cats[dataArray[order[i]]];\n hasher.update(encoder.encode(data));\n }\n else {\n const data = dataArray[order[i]];\n hasher.update(Uint8Array.from([data]));\n }\n }\n }\n return hasher.digest();\n}\nexport const testData = DG.DataFrame.fromCsv(`countries,fasta,smiles,molregno,LON,Zip Code,Street Address Line 1,ImageUrl,user_id,error_message,xray,flag,magnitude,CS-id,pdb_id,accel_a,time_offset,chart,fit,Questions,empty_number,empty_string\nBelgium,MSNFHNEHVMQFYRNNLKTKGVFGRQ,CC(C(=O)OCCCc1cccnc1)c2cccc(c2)C(=O)c3ccccc3,1480014,36.276729583740234,995042300,14016 ROUTE 31W,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,\"COMPND \nATOM \nEND\",flag,1,1,1QBS,1,1.23,<chart></chart>,\"{\"\"series\"\":[{\"\"name\"\":\"\"Run:2023-08-08\"\",\"\"fitFunction\"\":\"\"sigmoid\"\",\"\"fitLineColor\"\":\"\"#1f77b4\"\",\"\"pointColor\"\":\"\"#1f77b4\"\",\"\"showPoints\"\":\"\"points\"\",\"\"parameters\"\":[2.497360340644872, 1.7058694986686864, 5.278052678195135, 0.16000320889028383],\"\"points\"\":[{\"\"x\"\":0.10000000149011612,\"\"y\"\":2.374499797821045},{\"\"x\"\":0.6000000238418579,\"\"y\"\":2.6242473125457764},{\"\"x\"\":1.100000023841858,\"\"y\"\":2.367267608642578},{\"\"x\"\":1.600000023841858,\"\"y\"\":2.6723148822784424},{\"\"x\"\":2.0999999046325684,\"\"y\"\":2.6537344455718994},{\"\"x\"\":2.5999999046325684,\"\"y\"\":2.3651671409606934},{\"\"x\"\":3.0999999046325684,\"\"y\"\":2.5654284954071045},{\"\"x\"\":3.5999999046325684,\"\"y\"\":2.4160959720611572},{\"\"x\"\":4.099999904632568,\"\"y\"\":2.286726713180542},{\"\"x\"\":4.599999904632568,\"\"y\"\":2.5100042819976807},{\"\"x\"\":5.099999904632568,\"\"y\"\":1.6676985025405884},{\"\"x\"\":5.599999904632568,\"\"y\"\":0.680136501789093},{\"\"x\"\":6.099999904632568,\"\"y\"\":0.3391543924808502},{\"\"x\"\":6.599999904632568,\"\"y\"\":0.09038983285427094},{\"\"x\"\":7.099999904632568,\"\"y\"\":0.19802775979042053}]},{\"\"name\"\":\"\"Run:2023-08-08\"\",\"\"fitLineColor\"\":\"\"#ffbb78\"\",\"\"pointColor\"\":\"\"#ffbb78\"\",\"\"showPoints\"\":\"\"points\"\",\"\"parameters\"\":[7.525235855508179, 1.3186911876809984, 5.335672608564294, 0.7860743343958098],\"\"points\"\":[{\"\"x\"\":0.10000000149011612,\"\"y\"\":7.988070487976074},{\"\"x\"\":0.6000000238418579,\"\"y\"\":7.018453121185303},{\"\"x\"\":1.100000023841858,\"\"y\"\":8.115279197692871},{\"\"x\"\":1.600000023841858,\"\"y\"\":7.486658096313477},{\"\"x\"\":2.0999999046325684,\"\"y\"\":7.396438121795654},{\"\"x\"\":2.5999999046325684,\"\"y\"\":7.477052211761475},{\"\"x\"\":3.0999999046325684,\"\"y\"\":6.913095474243164},{\"\"x\"\":3.5999999046325684,\"\"y\"\":8.01385498046875},{\"\"x\"\":4.099999904632568,\"\"y\"\":6.985900402069092},{\"\"x\"\":4.599999904632568,\"\"y\"\":6.970335960388184},{\"\"x\"\":5.099999904632568,\"\"y\"\":5.448817253112793},{\"\"x\"\":5.599999904632568,\"\"y\"\":2.5534818172454834},{\"\"x\"\":6.099999904632568,\"\"y\"\":1.893947958946228},{\"\"x\"\":6.599999904632568,\"\"y\"\":0.6340042352676392},{\"\"x\"\":7.099999904632568,\"\"y\"\":0.8403874039649963}]}],\"\"chartOptions\"\":{\"\"xAxisName\"\":\"\"Conc.\"\",\"\"yAxisName\"\":\"\"Activity\"\",\"\"title\"\":\"\"Dose-Response curves\"\"}}\",text,100,abc\nBurundi,MDYKETLLMPKTDFPMRGGLPNKEPQIQEKW,COc1ccc2cc(ccc2c1)C(C)C(=O)Oc3ccc(C)cc3OC,1480015,36.276729583740234,995073444,80 STATE HIGHWAY 310,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,\"COMPND \nATOM \nEND\",flag,2,2,1ZP8,2,1.23,<chart></chart>,\"{\"\"series\"\":[{\"\"name\"\":\"\"Run:2023-08-08\"\",\"\"fitFunction\"\":\"\"sigmoid\"\",\"\"fitLineColor\"\":\"\"#1f77b4\"\",\"\"pointColor\"\":\"\"#1f77b4\"\",\"\"showPoints\"\":\"\"points\"\",\"\"parameters\"\":[4.431460753103398, 2.1691498799246745, 5.266445597102774, 0.7825762827017926],\"\"points\"\":[{\"\"x\"\":0.10000000149011612,\"\"y\"\":4.751083850860596},{\"\"x\"\":0.6000000238418579,\"\"y\"\":4.203000068664551},{\"\"x\"\":1.100000023841858,\"\"y\"\":4.415858745574951},{\"\"x\"\":1.600000023841858,\"\"y\"\":4.68414306640625},{\"\"x\"\":2.0999999046325684,\"\"y\"\":4.198400974273682},{\"\"x\"\":2.5999999046325684,\"\"y\"\":4.179222106933594},{\"\"x\"\":3.0999999046325684,\"\"y\"\":4.638473987579346},{\"\"x\"\":3.5999999046325684,\"\"y\"\":4.708553314208984},{\"\"x\"\":4.099999904632568,\"\"y\"\":4.291589260101318},{\"\"x\"\":4.599999904632568,\"\"y\"\":4.038082599639893},{\"\"x\"\":5.099999904632568,\"\"y\"\":3.4349939823150635},{\"\"x\"\":5.599999904632568,\"\"y\"\":1.2194708585739136},{\"\"x\"\":6.099999904632568,\"\"y\"\":1.1920831203460693},{\"\"x\"\":6.599999904632568,\"\"y\"\":0.5352635979652405},{\"\"x\"\":7.099999904632568,\"\"y\"\":0.3346920311450958}]},{\"\"name\"\":\"\"Run:2023-08-08\"\",\"\"fitLineColor\"\":\"\"#ffbb78\"\",\"\"pointColor\"\":\"\"#ffbb78\"\",\"\"showPoints\"\":\"\"points\"\",\"\"parameters\"\":[2.339458017970126, -1.0734184310171178, 4.746332950550934, 0.2482416857595658],\"\"points\"\":[{\"\"x\"\":0.10000000149011612,\"\"y\"\":0.2139337658882141},{\"\"x\"\":0.6000000238418579,\"\"y\"\":0.4269562065601349},{\"\"x\"\":1.100000023841858,\"\"y\"\":0.2441573292016983},{\"\"x\"\":1.600000023841858,\"\"y\"\":0.146635964512825},{\"\"x\"\":2.0999999046325684,\"\"y\"\":0.08818462491035461},{\"\"x\"\":2.5999999046325684,\"\"y\"\":0.2560656666755676},{\"\"x\"\":3.0999999046325684,\"\"y\"\":0.42434045672416687},{\"\"x\"\":3.5999999046325684,\"\"y\"\":0.37111231684684753},{\"\"x\"\":4.099999904632568,\"\"y\"\":0.5581737160682678},{\"\"x\"\":4.599999904632568,\"\"y\"\":1.183590054512024},{\"\"x\"\":5.099999904632568,\"\"y\"\":1.5629843473434448},{\"\"x\"\":5.599999904632568,\"\"y\"\":2.3211288452148438},{\"\"x\"\":6.099999904632568,\"\"y\"\":2.229961633682251},{\"\"x\"\":6.599999904632568,\"\"y\"\":2.2560226917266846},{\"\"x\"\":7.099999904632568,\"\"y\"\":2.2142398357391357}]}],\"\"chartOptions\"\":{\"\"xAxisName\"\":\"\"Conc.\"\",\"\"yAxisName\"\":\"\"Activity\"\",\"\"title\"\":\"\"Dose-Response curves\"\"}}\",text,,\nCameroon,MIEVFLFGIVLGLIPITLAGLFVTAYLQYRRGDQLDL,COc1ccc2cc(ccc2c1)C(C)C(=O)OCCCc3cccnc3,1480016,36.26095962524414,995153596,30-56 WHITESTONE EXPY,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,\"COMPND \nATOM \nEND\",flag,3,3,2BDJ,3,1.23,<chart></chart>,\"{\"\"series\"\":[{\"\"name\"\":\"\"Run:2023-08-08\"\",\"\"fitFunction\"\":\"\"sigmoid\"\",\"\"fitLineColor\"\":\"\"#1f77b4\"\",\"\"pointColor\"\":\"\"#1f77b4\"\",\"\"showPoints\"\":\"\"points\"\",\"\"parameters\"\":[4.6760652578642325, 0.9046956320756703, 5.651408971856738, 0.07738846012184185],\"\"points\"\":[{\"\"x\"\":0.10000000149011612,\"\"y\"\":4.32425594329834},{\"\"x\"\":0.6000000238418579,\"\"y\"\":4.668442249298096},{\"\"x\"\":1.100000023841858,\"\"y\"\":4.379785060882568},{\"\"x\"\":1.600000023841858,\"\"y\"\":5.0345139503479},{\"\"x\"\":2.0999999046325684,\"\"y\"\":4.878653526306152},{\"\"x\"\":2.5999999046325684,\"\"y\"\":4.3451313972473145},{\"\"x\"\":3.0999999046325684,\"\"y\"\":4.336992263793945},{\"\"x\"\":3.5999999046325684,\"\"y\"\":5.037430286407471},{\"\"x\"\":4.099999904632568,\"\"y\"\":5.0092692375183105},{\"\"x\"\":4.599999904632568,\"\"y\"\":4.151902675628662},{\"\"x\"\":5.099999904632568,\"\"y\"\":3.4066951274871826},{\"\"x\"\":5.599999904632568,\"\"y\"\":2.3732759952545166},{\"\"x\"\":6.099999904632568,\"\"y\"\":1.673728108406067},{\"\"x\"\":6.599999904632568,\"\"y\"\":0.48574790358543396},{\"\"x\"\":7.099999904632568,\"\"y\"\":0.2783052325248718}]},{\"\"name\"\":\"\"Run:2023-08-08\"\",\"\"fitLineColor\"\":\"\"#ffbb78\"\",\"\"pointColor\"\":\"\"#ffbb78\"\",\"\"showPoints\"\":\"\"points\"\",\"\"parameters\"\":[2.938395863010111, -1.4658480661392117, 5.462702751996584, 0.3473139023615039],\"\"points\"\":[{\"\"x\"\":0.10000000149011612,\"\"y\"\":0.4941710829734802},{\"\"x\"\":0.6000000238418579,\"\"y\"\":0.15323974192142487},{\"\"x\"\":1.100000023841858,\"\"y\"\":0.46373432874679565},{\"\"x\"\":1.600000023841858,\"\"y\"\":0.3370431363582611},{\"\"x\"\":2.0999999046325684,\"\"y\"\":0.5179030299186707},{\"\"x\"\":2.5999999046325684,\"\"y\"\":0.27899765968322754},{\"\"x\"\":3.0999999046325684,\"\"y\"\":0.22075064480304718},{\"\"x\"\":3.5999999046325684,\"\"y\"\":0.5789918899536133},{\"\"x\"\":4.099999904632568,\"\"y\"\":0.21169911324977875},{\"\"x\"\":4.599999904632568,\"\"y\"\":0.27857646346092224},{\"\"x\"\":5.099999904632568,\"\"y\"\":1.0906332731246948},{\"\"x\"\":5.599999904632568,\"\"y\"\":1.8520300388336182},{\"\"x\"\":6.099999904632568,\"\"y\"\":2.7177059650421143},{\"\"x\"\":6.599999904632568,\"\"y\"\":2.8680918216705322},{\"\"x\"\":7.099999904632568,\"\"y\"\":3.2413077354431152}]}],\"\"chartOptions\"\":{\"\"xAxisName\"\":\"\"Conc.\"\",\"\"yAxisName\"\":\"\"Activity\"\",\"\"title\"\":\"\"Dose-Response curves\"\"}}\",text,,\nCanada,MMELVLKTIIGPIVVGVVLRIVDKWLNKDK,CC(C(=O)NCCS)c1cccc(c1)C(=O)c2ccccc2,1480017,36.26095962524414,99515,30-56 WHITESTONE EXPY,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,\"COMPND \nATOM \nEND\",flag,4,4,1IAN,4,1.23,<chart></chart>,\"{\"\"series\"\":[{\"\"name\"\":\"\"Run:2023-08-08\"\",\"\"fitFunction\"\":\"\"sigmoid\"\",\"\"fitLineColor\"\":\"\"#1f77b4\"\",\"\"pointColor\"\":\"\"#1f77b4\"\",\"\"showPoints\"\":\"\"points\"\",\"\"parameters\"\":[0.8597390975430008, 1.0957625732481946, 5.260537067987958, 0.07974187998177736],\"\"points\"\":[{\"\"x\"\":0.10000000149011612,\"\"y\"\":0.8190152645111084},{\"\"x\"\":0.6000000238418579,\"\"y\"\":0.8421689867973328},{\"\"x\"\":1.100000023841858,\"\"y\"\":0.8740922212600708},{\"\"x\"\":1.600000023841858,\"\"y\"\":0.8924275040626526},{\"\"x\"\":2.0999999046325684,\"\"y\"\":0.8249067664146423},{\"\"x\"\":2.5999999046325684,\"\"y\"\":0.9327669143676758},{\"\"x\"\":3.0999999046325684,\"\"y\"\":0.8522974252700806},{\"\"x\"\":3.5999999046325684,\"\"y\"\":0.8174492716789246},{\"\"x\"\":4.099999904632568,\"\"y\"\":0.8394647240638733},{\"\"x\"\":4.599999904632568,\"\"y\"\":0.7139387726783752},{\"\"x\"\":5.099999904632568,\"\"y\"\":0.5561167597770691},{\"\"x\"\":5.599999904632568,\"\"y\"\":0.3276226818561554},{\"\"x\"\":6.099999904632568,\"\"y\"\":0.12479474395513535},{\"\"x\"\":6.599999904632568,\"\"y\"\":0.13006797432899475},{\"\"x\"\":7.099999904632568,\"\"y\"\":0.059702079743146896}]},{\"\"name\"\":\"\"Run:2023-08-08\"\",\"\"fitLineColor\"\":\"\"#ffbb78\"\",\"\"pointColor\"\":\"\"#ffbb78\"\",\"\"showPoints\"\":\"\"points\"\",\"\"parameters\"\":[5.760930219582546, 1.6591793293833013, 4.667155929720851, 0.7858109544121652],\"\"points\"\":[{\"\"x\"\":0.10000000149011612,\"\"y\"\":6.156993389129639},{\"\"x\"\":0.6000000238418579,\"\"y\"\":5.236701965332031},{\"\"x\"\":1.100000023841858,\"\"y\"\":6.010560512542725},{\"\"x\"\":1.600000023841858,\"\"y\"\":5.495512962341309},{\"\"x\"\":2.0999999046325684,\"\"y\"\":6.087770462036133},{\"\"x\"\":2.5999999046325684,\"\"y\"\":5.79986572265625},{\"\"x\"\":3.0999999046325684,\"\"y\"\":5.597546577453613},{\"\"x\"\":3.5999999046325684,\"\"y\"\":5.520902156829834},{\"\"x\"\":4.099999904632568,\"\"y\"\":5.360654354095459},{\"\"x\"\":4.599999904632568,\"\"y\"\":3.5539746284484863},{\"\"x\"\":5.099999904632568,\"\"y\"\":1.577236294746399},{\"\"x\"\":5.599999904632568,\"\"y\"\":1.0001264810562134},{\"\"x\"\":6.099999904632568,\"\"y\"\":0.9305797815322876},{\"\"x\"\":6.599999904632568,\"\"y\"\":0.6033638715744019},{\"\"x\"\":7.099999904632568,\"\"y\"\":0.4203685522079468}]}],\"\"chartOptions\"\":{\"\"xAxisName\"\":\"\"Conc.\"\",\"\"yAxisName\"\":\"\"Activity\"\",\"\"title\"\":\"\"Dose-Response curves\"\"}}\",text,,\nColombia,MDRTDEVSNHTHDKPTLTWFEEIFEEYHSPFHN,FC(F)(F)c1ccc(OC2CCNCC2)cc1,1480029,36.3309440612793,995152050,1 COURT HOUSE SQUARE,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,\"COMPND \nATOM \nEND\",flag,5,5,4UJ1,5,1.23,<chart></chart>,\"{\"\"series\"\":[{\"\"name\"\":\"\"Run:2023-08-08\"\",\"\"fitFunction\"\":\"\"sigmoid\"\",\"\"fitLineColor\"\":\"\"#1f77b4\"\",\"\"pointColor\"\":\"\"#1f77b4\"\",\"\"showPoints\"\":\"\"points\"\",\"\"parameters\"\":[6.4995088314153655, 2.4270351004539914, 5.178659535348579, 0.625653346241577],\"\"points\"\":[{\"\"x\"\":0.10000000149011612,\"\"y\"\":6.496231555938721},{\"\"x\"\":0.6000000238418579,\"\"y\"\":6.42543363571167},{\"\"x\"\":1.100000023841858,\"\"y\"\":7.040063858032227},{\"\"x\"\":1.600000023841858,\"\"y\"\":6.1115403175354},{\"\"x\"\":2.0999999046325684,\"\"y\"\":6.680728435516357},{\"\"x\"\":2.5999999046325684,\"\"y\"\":6.406774520874023},{\"\"x\"\":3.0999999046325684,\"\"y\"\":6.611269474029541},{\"\"x\"\":3.5999999046325684,\"\"y\"\":5.889094352722168},{\"\"x\"\":4.099999904632568,\"\"y\"\":6.75344705581665},{\"\"x\"\":4.599999904632568,\"\"y\"\":6.361435890197754},{\"\"x\"\":5.099999904632568,\"\"y\"\":4.1666975021362305},{\"\"x\"\":5.599999904632568,\"\"y\"\":1.172118902206421},{\"\"x\"\":6.099999904632568,\"\"y\"\":0.801048994064331},{\"\"x\"\":6.599999904632568,\"\"y\"\":0.4640021026134491},{\"\"x\"\":7.099999904632568,\"\"y\"\":0.0010357667924836278}]},{\"\"name\"\":\"\"Run:2023-08-08\"\",\"\"fitLineColor\"\":\"\"#ffbb78\"\",\"\"pointColor\"\":\"\"#ffbb78\"\",\"\"showPoints\"\":\"\"points\"\",\"\"parameters\"\":[1.4734381347446401, 1.1649805188074196, 4.82958608866421, 0.09500545496710007],\"\"points\"\":[{\"\"x\"\":0.10000000149011612,\"\"y\"\":1.5279096364974976},{\"\"x\"\":0.6000000238418579,\"\"y\"\":1.3559974431991577},{\"\"x\"\":1.100000023841858,\"\"y\"\":1.5246378183364868},{\"\"x\"\":1.600000023841858,\"\"y\"\":1.5567657947540283},{\"\"x\"\":2.0999999046325684,\"\"y\"\":1.4114240407943726},{\"\"x\"\":2.5999999046325684,\"\"y\"\":1.4045010805130005},{\"\"x\"\":3.0999999046325684,\"\"y\"\":1.4769829511642456},{\"\"x\"\":3.5999999046325684,\"\"y\"\":1.4875500202178955},{\"\"x\"\":4.099999904632568,\"\"y\"\":1.2991987466812134},{\"\"x\"\":4.599999904632568,\"\"y\"\":0.922961413860321},{\"\"x\"\":5.099999904632568,\"\"y\"\":0.6520044803619385},{\"\"x\"\":5.599999904632568,\"\"y\"\":0.15350978076457977},{\"\"x\"\":6.099999904632568,\"\"y\"\":0.1078903079032898},{\"\"x\"\":6.599999904632568,\"\"y\"\":0.17276449501514435},{\"\"x\"\":7.099999904632568,\"\"y\"\":0.14066608250141144}]}],\"\"chartOptions\"\":{\"\"xAxisName\"\":\"\"Conc.\"\",\"\"yAxisName\"\":\"\"Activity\"\",\"\"title\"\":\"\"Dose-Response curves\"\"}}\",text,,\nCosta Rica,MKSTKEEIQTIKTLLKDSRTAKYHKRLQIVL,CC(C)Cc1ccc(cc1)C(C)C(=O)N2CCCC2C(=O)OCCCc3ccccc3,1480018,36.3309440612793,995084218,4041 SOUTHWESTERN BLVD,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,\"COMPND \nATOM \nEND\",flag,6,6,2BPW,6,1.23,<chart></chart>,\"{\"\"series\"\":[{\"\"name\"\":\"\"Run:2023-08-08\"\",\"\"fitFunction\"\":\"\"sigmoid\"\",\"\"fitLineColor\"\":\"\"#1f77b4\"\",\"\"pointColor\"\":\"\"#1f77b4\"\",\"\"showPoints\"\":\"\"points\"\",\"\"parameters\"\":[2.4833641843311227, -1.8945978742090062, 4.671127708092568, 0.24159861311815153],\"\"points\"\":[{\"\"x\"\":0.10000000149011612,\"\"y\"\":0.0969524160027504},{\"\"x\"\":0.6000000238418579,\"\"y\"\":0.028483040630817413},{\"\"x\"\":1.100000023841858,\"\"y\"\":0.22087176144123077},{\"\"x\"\":1.600000023841858,\"\"y\"\":0.0068915546871721745},{\"\"x\"\":2.0999999046325684,\"\"y\"\":0.4305879771709442},{\"\"x\"\":2.5999999046325684,\"\"y\"\":0.44774115085601807},{\"\"x\"\":3.0999999046325684,\"\"y\"\":0.45346319675445557},{\"\"x\"\":3.5999999046325684,\"\"y\"\":0.2370593100786209},{\"\"x\"\":4.099999904632568,\"\"y\"\":0.4657953977584839},{\"\"x\"\":4.599999904632568,\"\"y\"\":1.155200719833374},{\"\"x\"\":5.099999904632568,\"\"y\"\":2.2294070720672607},{\"\"x\"\":5.599999904632568,\"\"y\"\":2.4311530590057373},{\"\"x\"\":6.099999904632568,\"\"y\"\":2.33846116065979},{\"\"x\"\":6.599999904632568,\"\"y\"\":2.608201026916504},{\"\"x\"\":7.099999904632568,\"\"y\"\":2.8136143684387207}]},{\"\"name\"\":\"\"Run:2023-08-08\"\",\"\"fitLineColor\"\":\"\"#ffbb78\"\",\"\"pointColor\"\":\"\"#ffbb78\"\",\"\"showPoints\"\":\"\"points\"\",\"\"parameters\"\":[5.224573521642033, 1.4454033924198528, 5.6014197746076535, 0.2823216054197577],\"\"points\"\":[{\"\"x\"\":0.10000000149011612,\"\"y\"\":4.95027494430542},{\"\"x\"\":0.6000000238418579,\"\"y\"\":5.1754679679870605},{\"\"x\"\":1.100000023841858,\"\"y\"\":5.276752948760986},{\"\"x\"\":1.600000023841858,\"\"y\"\":5.589294910430908},{\"\"x\"\":2.0999999046325684,\"\"y\"\":5.616994857788086},{\"\"x\"\":2.5999999046325684,\"\"y\"\":5.120813846588135},{\"\"x\"\":3.0999999046325684,\"\"y\"\":5.340766906738281},{\"\"x\"\":3.5999999046325684,\"\"y\"\":4.876471042633057},{\"\"x\"\":4.099999904632568,\"\"y\"\":4.94999361038208},{\"\"x\"\":4.599999904632568,\"\"y\"\":5.162564754486084},{\"\"x\"\":5.099999904632568,\"\"y\"\":4.399557590484619},{\"\"x\"\":5.599999904632568,\"\"y\"\":2.7977969646453857},{\"\"x\"\":6.099999904632568,\"\"y\"\":1.0229872465133667},{\"\"x\"\":6.599999904632568,\"\"y\"\":0.48275601863861084},{\"\"x\"\":7.099999904632568,\"\"y\"\":0.10408931970596313}]}],\"\"chartOptions\"\":{\"\"xAxisName\"\":\"\"Conc.\"\",\"\"yAxisName\"\":\"\"Activity\"\",\"\"title\"\":\"\"Dose-Response curves\"\"}}\",text,,\nCuba,MHAILRYFIRRLFYHIFYKIYSLISKKHQSLPSDVRQF,COc1ccc2c(c1)c(CC(=O)N3CCCC3C(=O)Oc4ccc(C)cc4OC)c(C)n2C(=O)c5ccc(Cl)cc5,1480019,36.33115768432617,995081928,1227 US HIGHWAY 11,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,\"COMPND \nATOM \nEND\",flag,7,7,1QBS,7,1.23,<chart></chart>,\"{\"\"series\"\":[{\"\"name\"\":\"\"Run:2023-08-08\"\",\"\"fitFunction\"\":\"\"sigmoid\"\",\"\"fitLineColor\"\":\"\"#1f77b4\"\",\"\"pointColor\"\":\"\"#1f77b4\"\",\"\"showPoints\"\":\"\"points\"\",\"\"parameters\"\":[3.320838679713925, -1.2421619987316728, 4.831325425225256, 0.3236011098403072],\"\"points\"\":[{\"\"x\"\":0.10000000149011612,\"\"y\"\":0.3727470338344574},{\"\"x\"\":0.6000000238418579,\"\"y\"\":0.12365014106035233},{\"\"x\"\":1.100000023841858,\"\"y\"\":0.48422467708587646},{\"\"x\"\":1.600000023841858,\"\"y\"\":0.2264465093612671},{\"\"x\"\":2.0999999046325684,\"\"y\"\":0.16821794211864471},{\"\"x\"\":2.5999999046325684,\"\"y\"\":0.3879014551639557},{\"\"x\"\":3.0999999046325684,\"\"y\"\":0.5470244884490967},{\"\"x\"\":3.5999999046325684,\"\"y\"\":0.3419053554534912},{\"\"x\"\":4.099999904632568,\"\"y\"\":0.7655120491981506},{\"\"x\"\":4.599999904632568,\"\"y\"\":1.2346516847610474},{\"\"x\"\":5.099999904632568,\"\"y\"\":2.453336715698242},{\"\"x\"\":5.599999904632568,\"\"y\"\":2.9565491676330566},{\"\"x\"\":6.099999904632568,\"\"y\"\":3.335299491882324},{\"\"x\"\":6.599999904632568,\"\"y\"\":3.240290880203247},{\"\"x\"\":7.099999904632568,\"\"y\"\":3.1107218265533447}]},{\"\"name\"\":\"\"Run:2023-08-08\"\",\"\"fitLineColor\"\":\"\"#ffbb78\"\",\"\"pointColor\"\":\"\"#ffbb78\"\",\"\"showPoints\"\":\"\"points\"\",\"\"parameters\"\":[3.6401853521511094, 1.26211588875013, 5.399028074402744, 0.5089580830068091],\"\"points\"\":[{\"\"x\"\":0.10000000149011612,\"\"y\"\":3.8585598468780518},{\"\"x\"\":0.6000000238418579,\"\"y\"\":3.6077206134796143},{\"\"x\"\":1.100000023841858,\"\"y\"\":3.855252265930176},{\"\"x\"\":1.600000023841858,\"\"y\"\":3.619039297103882},{\"\"x\"\":2.0999999046325684,\"\"y\"\":3.839388370513916},{\"\"x\"\":2.5999999046325684,\"\"y\"\":3.335283041000366},{\"\"x\"\":3.0999999046325684,\"\"y\"\":3.571141481399536},{\"\"x\"\":3.5999999046325684,\"\"y\"\":3.4155046939849854},{\"\"x\"\":4.099999904632568,\"\"y\"\":3.7316646575927734},{\"\"x\"\":4.599999904632568,\"\"y\"\":3.0680155754089355},{\"\"x\"\":5.099999904632568,\"\"y\"\":2.891066551208496},{\"\"x\"\":5.599999904632568,\"\"y\"\":1.6022753715515137},{\"\"x\"\":6.099999904632568,\"\"y\"\":0.7652576565742493},{\"\"x\"\":6.599999904632568,\"\"y\"\":0.6875326037406921},{\"\"x\"\":7.099999904632568,\"\"y\"\":0.5828871726989746}]}],\"\"chartOptions\"\":{\"\"xAxisName\"\":\"\"Conc.\"\",\"\"yAxisName\"\":\"\"Activity\"\",\"\"title\"\":\"\"Dose-Response curves\"\"}}\",text,,\nItaly,MSNFHNEHVMQFYRNNLKTKGVFGRQ,CC(C)Cc1ccc(cc1)C(C)C(=O)N2CCCC2C(=O)OCCO[N+](=O)[O-],1480020,36.33115768432617,99502,\"168-46 91ST AVE., 2ND FLR\",https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,\"COMPND \nATOM \nEND\",flag,8,8,1ZP8,8,1.23,<chart></chart>,\"{\"\"series\"\":[{\"\"name\"\":\"\"Run:2023-08-08\"\",\"\"fitFunction\"\":\"\"sigmoid\"\",\"\"fitLineColor\"\":\"\"#1f77b4\"\",\"\"pointColor\"\":\"\"#1f77b4\"\",\"\"showPoints\"\":\"\"points\"\",\"\"parameters\"\":[2.293592105923809, 1.3781586549141835, 5.1025898038676605, 0.03493851245291291],\"\"points\"\":[{\"\"x\"\":0.10000000149011612,\"\"y\"\":2.1287283897399902},{\"\"x\"\":0.6000000238418579,\"\"y\"\":2.267972230911255},{\"\"x\"\":1.100000023841858,\"\"y\"\":2.398442506790161},{\"\"x\"\":1.600000023841858,\"\"y\"\":2.5130622386932373},{\"\"x\"\":2.0999999046325684,\"\"y\"\":2.3255116939544678},{\"\"x\"\":2.5999999046325684,\"\"y\"\":2.127340793609619},{\"\"x\"\":3.0999999046325684,\"\"y\"\":2.47259783744812},{\"\"x\"\":3.5999999046325684,\"\"y\"\":2.131181478500366},{\"\"x\"\":4.099999904632568,\"\"y\"\":2.090421438217163},{\"\"x\"\":4.599999904632568,\"\"y\"\":2.02299165725708},{\"\"x\"\":5.099999904632568,\"\"y\"\":1.1105059385299683},{\"\"x\"\":5.599999904632568,\"\"y\"\":0.4494485855102539},{\"\"x\"\":6.099999904632568,\"\"y\"\":0.1375635862350464},{\"\"x\"\":6.599999904632568,\"\"y\"\":0.036351121962070465},{\"\"x\"\":7.099999904632568,\"\"y\"\":0.1619771122932434}]},{\"\"name\"\":\"\"Run:2023-08-08\"\",\"\"fitLineColor\"\":\"\"#ffbb78\"\",\"\"pointColor\"\":\"\"#ffbb78\"\",\"\"showPoints\"\":\"\"points\"\",\"\"parameters\"\":[5.953125499439879, 1.2528620255306528, 5.187637440149802, 0.3110348753260886],\"\"points\"\":[{\"\"x\"\":0.10000000149011612,\"\"y\"\":5.6585283279418945},{\"\"x\"\":0.6000000238418579,\"\"y\"\":5.911152362823486},{\"\"x\"\":1.100000023841858,\"\"y\"\":5.924920082092285},{\"\"x\"\":1.600000023841858,\"\"y\"\":5.8469438552856445},{\"\"x\"\":2.0999999046325684,\"\"y\"\":5.929472923278809},{\"\"x\"\":2.5999999046325684,\"\"y\"\":6.190037727355957},{\"\"x\"\":3.0999999046325684,\"\"y\"\":6.236179828643799},{\"\"x\"\":3.5999999046325684,\"\"y\"\":6.141019344329834},{\"\"x\"\":4.099999904632568,\"\"y\"\":5.295210838317871},{\"\"x\"\":4.599999904632568,\"\"y\"\":5.265801906585693},{\"\"x\"\":5.099999904632568,\"\"y\"\":3.3722851276397705},{\"\"x\"\":5.599999904632568,\"\"y\"\":1.8299226760864258},{\"\"x\"\":6.099999904632568,\"\"y\"\":0.32690900564193726},{\"\"x\"\":6.599999904632568,\"\"y\"\":0.6274543404579163},{\"\"x\"\":7.099999904632568,\"\"y\"\":0.8441857099533081}]}],\"\"chartOptions\"\":{\"\"xAxisName\"\":\"\"Conc.\"\",\"\"yAxisName\"\":\"\"Activity\"\",\"\"title\"\":\"\"Dose-Response curves\"\"}}\",text,,\nRwanda,MPNSEPASLLELFNSIATQGELVRSLKAGNASK,CC(C)Cc1ccc(cc1)C(C)C(=O)N2CCCC2C(=O)OCCO,1480021,36.33137130737305,995037247,\"168-46 91ST AVE., 2ND FLR\",https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,\"COMPND \nATOM \nEND\",flag,9,9,2BDJ,9,1.23,<chart></chart>,\"{\"\"series\"\":[{\"\"name\"\":\"\"Run:2023-08-08\"\",\"\"fitFunction\"\":\"\"sigmoid\"\",\"\"fitLineColor\"\":\"\"#1f77b4\"\",\"\"pointColor\"\":\"\"#1f77b4\"\",\"\"showPoints\"\":\"\"points\"\",\"\"parameters\"\":[3.8209972202654474, 1.3779216716448506, 5.299882228439686, 0.06040645519069608],\"\"points\"\":[{\"\"x\"\":0.10000000149011612,\"\"y\"\":3.7821109294891357},{\"\"x\"\":0.6000000238418579,\"\"y\"\":3.542433023452759},{\"\"x\"\":1.100000023841858,\"\"y\"\":3.7008674144744873},{\"\"x\"\":1.600000023841858,\"\"y\"\":3.717301607131958},{\"\"x\"\":2.0999999046325684,\"\"y\"\":4.024452209472656},{\"\"x\"\":2.5999999046325684,\"\"y\"\":4.013899326324463},{\"\"x\"\":3.0999999046325684,\"\"y\"\":3.945094347000122},{\"\"x\"\":3.5999999046325684,\"\"y\"\":3.866621971130371},{\"\"x\"\":4.099999904632568,\"\"y\"\":3.7461626529693604},{\"\"x\"\":4.599999904632568,\"\"y\"\":3.3454740047454834},{\"\"x\"\":5.099999904632568,\"\"y\"\":2.61944317817688},{\"\"x\"\":5.599999904632568,\"\"y\"\":0.999405026435852},{\"\"x\"\":6.099999904632568,\"\"y\"\":0.46259793639183044},{\"\"x\"\":6.599999904632568,\"\"y\"\":0.054134611040353775},{\"\"x\"\":7.099999904632568,\"\"y\"\":0.05711187422275543}]},{\"\"name\"\":\"\"Run:2023-08-08\"\",\"\"fitLineColor\"\":\"\"#ffbb78\"\",\"\"pointColor\"\":\"\"#ffbb78\"\",\"\"showPoints\"\":\"\"points\"\",\"\"parameters\"\":[5.6318079657726035, 1.8495493770000595, 5.391793312471116, 0.17060707587348442],\"\"points\"\":[{\"\"x\"\":0.10000000149011612,\"\"y\"\":5.458079814910889},{\"\"x\"\":0.6000000238418579,\"\"y\"\":5.554427146911621},{\"\"x\"\":1.100000023841858,\"\"y\"\":5.799983024597168},{\"\"x\"\":1.600000023841858,\"\"y\"\":5.364140033721924},{\"\"x\"\":2.0999999046325684,\"\"y\"\":5.864485740661621},{\"\"x\"\":2.5999999046325684,\"\"y\"\":5.4509806632995605},{\"\"x\"\":3.0999999046325684,\"\"y\"\":5.702574729919434},{\"\"x\"\":3.5999999046325684,\"\"y\"\":5.7314534187316895},{\"\"x\"\":4.099999904632568,\"\"y\"\":5.5123443603515625},{\"\"x\"\":4.599999904632568,\"\"y\"\":5.724395751953125},{\"\"x\"\":5.099999904632568,\"\"y\"\":4.354506969451904},{\"\"x\"\":5.599999904632568,\"\"y\"\":1.7307666540145874},{\"\"x\"\":6.099999904632568,\"\"y\"\":0.6305936574935913},{\"\"x\"\":6.599999904632568,\"\"y\"\":0.035183437168598175},{\"\"x\"\":7.099999904632568,\"\"y\"\":0.7575169205665588}]}],\"\"chartOptions\"\":{\"\"xAxisName\"\":\"\"Conc.\"\",\"\"yAxisName\"\":\"\"Activity\"\",\"\"title\"\":\"\"Dose-Response curves\"\"}}\",text,,\nSwitzerland,IRVVGRYLIEVWKAAGMDMDKVLFLWSSDEI,CN1CCC(CC1)Oc2ccc(cc2)C(F)(F)F,1480028,36.33137130737305,99504,92-11 179TH PLACE,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,\"COMPND \nATOM \nEND\",flag,9,10,1IAN,10,1.23,<chart></chart>,\"{\"\"series\"\":[{\"\"name\"\":\"\"Run:2023-08-08\"\",\"\"fitFunction\"\":\"\"sigmoid\"\",\"\"fitLineColor\"\":\"\"#1f77b4\"\",\"\"pointColor\"\":\"\"#1f77b4\"\",\"\"showPoints\"\":\"\"points\"\",\"\"parameters\"\":[1.1190255865097471, 2.3163895161544437, 5.4968866182279195, 0.2035204047289052],\"\"points\"\":[{\"\"x\"\":0.10000000149011612,\"\"y\"\":1.1057683229446411},{\"\"x\"\":0.6000000238418579,\"\"y\"\":1.1019697189331055},{\"\"x\"\":1.100000023841858,\"\"y\"\":1.0818607807159424},{\"\"x\"\":1.600000023841858,\"\"y\"\":1.062997817993164},{\"\"x\"\":2.0999999046325684,\"\"y\"\":1.046447515487671},{\"\"x\"\":2.5999999046325684,\"\"y\"\":1.1217249631881714},{\"\"x\"\":3.0999999046325684,\"\"y\"\":1.2166996002197266},{\"\"x\"\":3.5999999046325684,\"\"y\"\":1.215477705001831},{\"\"x\"\":4.099999904632568,\"\"y\"\":1.0581893920898438},{\"\"x\"\":4.599999904632568,\"\"y\"\":1.1747995615005493},{\"\"x\"\":5.099999904632568,\"\"y\"\":1.0181127786636353},{\"\"x\"\":5.599999904632568,\"\"y\"\":0.5344523191452026},{\"\"x\"\":6.099999904632568,\"\"y\"\":0.2569526433944702},{\"\"x\"\":6.599999904632568,\"\"y\"\":0.1912207305431366},{\"\"x\"\":7.099999904632568,\"\"y\"\":0.15060538053512573}]},{\"\"name\"\":\"\"Run:2023-08-08\"\",\"\"fitLineColor\"\":\"\"#ffbb78\"\",\"\"pointColor\"\":\"\"#ffbb78\"\",\"\"showPoints\"\":\"\"points\"\",\"\"parameters\"\":[3.1038581025805785, 2.0032224204185245, 5.087602825989163, 0.13277988512492753],\"\"points\"\":[{\"\"x\"\":0.10000000149011612,\"\"y\"\":3.0498509407043457},{\"\"x\"\":0.6000000238418579,\"\"y\"\":2.805217742919922},{\"\"x\"\":1.100000023841858,\"\"y\"\":3.3415253162384033},{\"\"x\"\":1.600000023841858,\"\"y\"\":3.0549843311309814},{\"\"x\"\":2.0999999046325684,\"\"y\"\":3.250074863433838},{\"\"x\"\":2.5999999046325684,\"\"y\"\":3.0432586669921875},{\"\"x\"\":3.0999999046325684,\"\"y\"\":3.265852451324463},{\"\"x\"\":3.5999999046325684,\"\"y\"\":2.9475724697113037},{\"\"x\"\":4.099999904632568,\"\"y\"\":3.1929898262023926},{\"\"x\"\":4.599999904632568,\"\"y\"\":2.7460060119628906},{\"\"x\"\":5.099999904632568,\"\"y\"\":1.6175861358642578},{\"\"x\"\":5.599999904632568,\"\"y\"\":0.3006608486175537},{\"\"x\"\":6.099999904632568,\"\"y\"\":0.3444803059101105},{\"\"x\"\":6.599999904632568,\"\"y\"\":0.015537971630692482},{\"\"x\"\":7.099999904632568,\"\"y\"\":0.5527358055114746}]}],\"\"chartOptions\"\":{\"\"xAxisName\"\":\"\"Conc.\"\",\"\"yAxisName\"\":\"\"Activity\"\",\"\"title\"\":\"\"Dose-Response curves\"\"}}\",text,,\n,,,,,,,,,,,,,,,,,,,,,`);\ntestData.columns.add(DG.Column.fromList(DG.TYPE.BYTE_ARRAY, 'BinaryImage', Array.from(new Uint8Array(11))));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWZyYW1lLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGF0YWZyYW1lLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sS0FBSyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ3RDOzs7R0FHRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxLQUFvQixFQUFFLEdBQWU7SUFDekUsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQztJQUM1QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDMUYsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0lBQzVCLElBQUksa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3ZDLElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNwQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsQ0FBQztZQUM1QyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekIsa0JBQWtCLElBQUksQ0FBQyxDQUFDO1NBQ3pCO0tBQ0Y7SUFDRCxPQUFPLGdCQUFnQixDQUFDO0FBQzFCLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLEtBQW9CLEVBQUUsS0FBZ0I7SUFDbEUsS0FBSyxhQUFMLEtBQUssY0FBTCxLQUFLLElBQUwsS0FBSyxHQUFLLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUM7SUFDaEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDakMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBQ2xDLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFO1FBQ3hCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN0QyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQy9DLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFDL0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDekMsSUFBSSxRQUFRLEVBQUU7Z0JBQ1osTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2QyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUNyQztpQkFBTTtnQkFDTCxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pDLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN4QztTQUNGO0tBQ0Y7SUFDRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN6QixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3NCQStCdkIsQ0FBQyxDQUFDO0FBQ3hCLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLGFBQWEsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuaW1wb3J0IHR5cGUgKiBhcyBfREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmRlY2xhcmUgbGV0IERHOiB0eXBlb2YgX0RHO1xuaW1wb3J0ICogYXMgc2hhMjU2IGZyb20gJ2Zhc3Qtc2hhMjU2Jztcbi8qKlxuICogRm9yIGNvbHVtbnMgb2Ygc3RyaW5nIHR5cGUuIENoZWNrcyB3aGV0aGVyIGNvbHVtbiBjb250YWlucyBlbXB0eSB2YWx1ZXMgYW5kIHJlbW92ZXMgY29ycmVzcG9uZGluZyByb3dzIGluIGNhc2UgdXNlciBzZWxlY3RzIHRvIHJlbW92ZS5cbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVFbXB0eVN0cmluZ1Jvd3ModGFibGU6IF9ERy5EYXRhRnJhbWUsIGNvbDogX0RHLkNvbHVtbik6IG51bWJlcltdIHtcbiAgY29uc3QgY2F0cyA9IGNvbC5jYXRlZ29yaWVzO1xuICBjb25zdCBlbXB0eVJhd0luZCA9IGNhdHMubWFwKCh2YWwsIGluZCkgPT4gIXZhbCA/IGluZCA6IG51bGwpLmZpbHRlcigoaXQpID0+IGl0ICE9PSBudWxsKTtcbiAgY29uc3QgcmF3RGF0YSA9IFsuLi5jb2wuZ2V0UmF3RGF0YSgpXTtcbiAgY29uc3QgZW1wdHlSYXdzSW5kZXhlcyA9IFtdO1xuICBsZXQgcmVtb3ZlZFJvd3NDb3VudGVyID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWJsZS5yb3dDb3VudDsgaSsrKSB7XG4gICAgaWYgKGVtcHR5UmF3SW5kLmluY2x1ZGVzKHJhd0RhdGFbaV0pKSB7XG4gICAgICB0YWJsZS5yb3dzLnJlbW92ZUF0KGkgLSByZW1vdmVkUm93c0NvdW50ZXIpO1xuICAgICAgZW1wdHlSYXdzSW5kZXhlcy5wdXNoKGkpO1xuICAgICAgcmVtb3ZlZFJvd3NDb3VudGVyICs9IDE7XG4gICAgfVxuICB9XG4gIHJldHVybiBlbXB0eVJhd3NJbmRleGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzaERhdGFGcmFtZSh0YWJsZTogX0RHLkRhdGFGcmFtZSwgbmFtZXM/OiBzdHJpbmdbXSk6IFVpbnQ4QXJyYXkge1xuICBuYW1lcyA/Pz0gdGFibGUuY29sdW1ucy5uYW1lcygpO1xuICBjb25zdCBoYXNoZXIgPSBuZXcgc2hhMjU2Lkhhc2goKTtcbiAgY29uc3Qgb3JkZXIgPSB0YWJsZS5nZXRTb3J0ZWRPcmRlcihuYW1lcyk7XG4gIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgZm9yIChjb25zdCBuYW1lIG9mIG5hbWVzKSB7XG4gICAgY29uc3QgY29sdW1uID0gdGFibGUuY29sdW1ucy5ieU5hbWUobmFtZSk7XG4gICAgY29uc3QgZGF0YUFycmF5ID0gY29sdW1uLmdldFJhd0RhdGEoKTtcbiAgICBjb25zdCBpc1N0cmluZyA9IGNvbHVtbi50eXBlID09IERHLlRZUEUuU1RSSU5HO1xuICAgIGNvbnN0IGNhdHMgPSBjb2x1bW4uY2F0ZWdvcmllcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGFBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGlzU3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBjYXRzW2RhdGFBcnJheVtvcmRlcltpXV1dO1xuICAgICAgICBoYXNoZXIudXBkYXRlKGVuY29kZXIuZW5jb2RlKGRhdGEpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBkYXRhQXJyYXlbb3JkZXJbaV1dO1xuICAgICAgICBoYXNoZXIudXBkYXRlKFVpbnQ4QXJyYXkuZnJvbShbZGF0YV0pKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGhhc2hlci5kaWdlc3QoKTtcbn1cblxuZXhwb3J0IGNvbnN0IHRlc3REYXRhID0gREcuRGF0YUZyYW1lLmZyb21Dc3YoYGNvdW50cmllcyxmYXN0YSxzbWlsZXMsbW9scmVnbm8sTE9OLFppcCBDb2RlLFN0cmVldCBBZGRyZXNzIExpbmUgMSxJbWFnZVVybCx1c2VyX2lkLGVycm9yX21lc3NhZ2UseHJheSxmbGFnLG1hZ25pdHVkZSxDUy1pZCxwZGJfaWQsYWNjZWxfYSx0aW1lX29mZnNldCxjaGFydCxmaXQsUXVlc3Rpb25zLGVtcHR5X251bWJlcixlbXB0eV9zdHJpbmdcbkJlbGdpdW0sTVNORkhORUhWTVFGWVJOTkxLVEtHVkZHUlEsQ0MoQyg9TylPQ0NDYzFjY2NuYzEpYzJjY2NjKGMyKUMoPU8pYzNjY2NjYzMsMTQ4MDAxNCwzNi4yNzY3Mjk1ODM3NDAyMzQsOTk1MDQyMzAwLDE0MDE2IFJPVVRFIDMxVyxodHRwczovL2RhdGFncm9rLmFpL2ltZy9zbGlkZXMvYWNjZXNzLWRiLWNvbm5lY3QucG5nLGlkLEVycm9yTWVzc2FnZSxcIkNPTVBORCBcbkFUT00gXG5FTkRcIixmbGFnLDEsMSwxUUJTLDEsMS4yMyw8Y2hhcnQ+PC9jaGFydD4sXCJ7XCJcInNlcmllc1wiXCI6W3tcIlwibmFtZVwiXCI6XCJcIlJ1bjoyMDIzLTA4LTA4XCJcIixcIlwiZml0RnVuY3Rpb25cIlwiOlwiXCJzaWdtb2lkXCJcIixcIlwiZml0TGluZUNvbG9yXCJcIjpcIlwiIzFmNzdiNFwiXCIsXCJcInBvaW50Q29sb3JcIlwiOlwiXCIjMWY3N2I0XCJcIixcIlwic2hvd1BvaW50c1wiXCI6XCJcInBvaW50c1wiXCIsXCJcInBhcmFtZXRlcnNcIlwiOlsyLjQ5NzM2MDM0MDY0NDg3MiwgMS43MDU4Njk0OTg2Njg2ODY0LCA1LjI3ODA1MjY3ODE5NTEzNSwgMC4xNjAwMDMyMDg4OTAyODM4M10sXCJcInBvaW50c1wiXCI6W3tcIlwieFwiXCI6MC4xMDAwMDAwMDE0OTAxMTYxMixcIlwieVwiXCI6Mi4zNzQ0OTk3OTc4MjEwNDV9LHtcIlwieFwiXCI6MC42MDAwMDAwMjM4NDE4NTc5LFwiXCJ5XCJcIjoyLjYyNDI0NzMxMjU0NTc3NjR9LHtcIlwieFwiXCI6MS4xMDAwMDAwMjM4NDE4NTgsXCJcInlcIlwiOjIuMzY3MjY3NjA4NjQyNTc4fSx7XCJcInhcIlwiOjEuNjAwMDAwMDIzODQxODU4LFwiXCJ5XCJcIjoyLjY3MjMxNDg4MjI3ODQ0MjR9LHtcIlwieFwiXCI6Mi4wOTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjoyLjY1MzczNDQ0NTU3MTg5OTR9LHtcIlwieFwiXCI6Mi41OTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjoyLjM2NTE2NzE0MDk2MDY5MzR9LHtcIlwieFwiXCI6My4wOTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjoyLjU2NTQyODQ5NTQwNzEwNDV9LHtcIlwieFwiXCI6My41OTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjoyLjQxNjA5NTk3MjA2MTE1NzJ9LHtcIlwieFwiXCI6NC4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjIuMjg2NzI2NzEzMTgwNTQyfSx7XCJcInhcIlwiOjQuNTk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjoyLjUxMDAwNDI4MTk5NzY4MDd9LHtcIlwieFwiXCI6NS4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjEuNjY3Njk4NTAyNTQwNTg4NH0se1wiXCJ4XCJcIjo1LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC42ODAxMzY1MDE3ODkwOTN9LHtcIlwieFwiXCI6Ni4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuMzM5MTU0MzkyNDgwODUwMn0se1wiXCJ4XCJcIjo2LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC4wOTAzODk4MzI4NTQyNzA5NH0se1wiXCJ4XCJcIjo3LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC4xOTgwMjc3NTk3OTA0MjA1M31dfSx7XCJcIm5hbWVcIlwiOlwiXCJSdW46MjAyMy0wOC0wOFwiXCIsXCJcImZpdExpbmVDb2xvclwiXCI6XCJcIiNmZmJiNzhcIlwiLFwiXCJwb2ludENvbG9yXCJcIjpcIlwiI2ZmYmI3OFwiXCIsXCJcInNob3dQb2ludHNcIlwiOlwiXCJwb2ludHNcIlwiLFwiXCJwYXJhbWV0ZXJzXCJcIjpbNy41MjUyMzU4NTU1MDgxNzksIDEuMzE4NjkxMTg3NjgwOTk4NCwgNS4zMzU2NzI2MDg1NjQyOTQsIDAuNzg2MDc0MzM0Mzk1ODA5OF0sXCJcInBvaW50c1wiXCI6W3tcIlwieFwiXCI6MC4xMDAwMDAwMDE0OTAxMTYxMixcIlwieVwiXCI6Ny45ODgwNzA0ODc5NzYwNzR9LHtcIlwieFwiXCI6MC42MDAwMDAwMjM4NDE4NTc5LFwiXCJ5XCJcIjo3LjAxODQ1MzEyMTE4NTMwM30se1wiXCJ4XCJcIjoxLjEwMDAwMDAyMzg0MTg1OCxcIlwieVwiXCI6OC4xMTUyNzkxOTc2OTI4NzF9LHtcIlwieFwiXCI6MS42MDAwMDAwMjM4NDE4NTgsXCJcInlcIlwiOjcuNDg2NjU4MDk2MzEzNDc3fSx7XCJcInhcIlwiOjIuMDk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6Ny4zOTY0MzgxMjE3OTU2NTR9LHtcIlwieFwiXCI6Mi41OTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjo3LjQ3NzA1MjIxMTc2MTQ3NX0se1wiXCJ4XCJcIjozLjA5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjYuOTEzMDk1NDc0MjQzMTY0fSx7XCJcInhcIlwiOjMuNTk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6OC4wMTM4NTQ5ODA0Njg3NX0se1wiXCJ4XCJcIjo0LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6Ni45ODU5MDA0MDIwNjkwOTJ9LHtcIlwieFwiXCI6NC41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjYuOTcwMzM1OTYwMzg4MTg0fSx7XCJcInhcIlwiOjUuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjo1LjQ0ODgxNzI1MzExMjc5M30se1wiXCJ4XCJcIjo1LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6Mi41NTM0ODE4MTcyNDU0ODM0fSx7XCJcInhcIlwiOjYuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjoxLjg5Mzk0Nzk1ODk0NjIyOH0se1wiXCJ4XCJcIjo2LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC42MzQwMDQyMzUyNjc2MzkyfSx7XCJcInhcIlwiOjcuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjowLjg0MDM4NzQwMzk2NDk5NjN9XX1dLFwiXCJjaGFydE9wdGlvbnNcIlwiOntcIlwieEF4aXNOYW1lXCJcIjpcIlwiQ29uYy5cIlwiLFwiXCJ5QXhpc05hbWVcIlwiOlwiXCJBY3Rpdml0eVwiXCIsXCJcInRpdGxlXCJcIjpcIlwiRG9zZS1SZXNwb25zZSBjdXJ2ZXNcIlwifX1cIix0ZXh0LDEwMCxhYmNcbkJ1cnVuZGksTURZS0VUTExNUEtUREZQTVJHR0xQTktFUFFJUUVLVyxDT2MxY2NjMmNjKGNjYzJjMSlDKEMpQyg9TylPYzNjY2MoQyljYzNPQywxNDgwMDE1LDM2LjI3NjcyOTU4Mzc0MDIzNCw5OTUwNzM0NDQsODAgU1RBVEUgSElHSFdBWSAzMTAsaHR0cHM6Ly9kYXRhZ3Jvay5haS9pbWcvc2xpZGVzL2FjY2Vzcy1kYi1jb25uZWN0LnBuZyxpZCxFcnJvck1lc3NhZ2UsXCJDT01QTkQgXG5BVE9NIFxuRU5EXCIsZmxhZywyLDIsMVpQOCwyLDEuMjMsPGNoYXJ0PjwvY2hhcnQ+LFwie1wiXCJzZXJpZXNcIlwiOlt7XCJcIm5hbWVcIlwiOlwiXCJSdW46MjAyMy0wOC0wOFwiXCIsXCJcImZpdEZ1bmN0aW9uXCJcIjpcIlwic2lnbW9pZFwiXCIsXCJcImZpdExpbmVDb2xvclwiXCI6XCJcIiMxZjc3YjRcIlwiLFwiXCJwb2ludENvbG9yXCJcIjpcIlwiIzFmNzdiNFwiXCIsXCJcInNob3dQb2ludHNcIlwiOlwiXCJwb2ludHNcIlwiLFwiXCJwYXJhbWV0ZXJzXCJcIjpbNC40MzE0NjA3NTMxMDMzOTgsIDIuMTY5MTQ5ODc5OTI0Njc0NSwgNS4yNjY0NDU1OTcxMDI3NzQsIDAuNzgyNTc2MjgyNzAxNzkyNl0sXCJcInBvaW50c1wiXCI6W3tcIlwieFwiXCI6MC4xMDAwMDAwMDE0OTAxMTYxMixcIlwieVwiXCI6NC43NTEwODM4NTA4NjA1OTZ9LHtcIlwieFwiXCI6MC42MDAwMDAwMjM4NDE4NTc5LFwiXCJ5XCJcIjo0LjIwMzAwMDA2ODY2NDU1MX0se1wiXCJ4XCJcIjoxLjEwMDAwMDAyMzg0MTg1OCxcIlwieVwiXCI6NC40MTU4NTg3NDU1NzQ5NTF9LHtcIlwieFwiXCI6MS42MDAwMDAwMjM4NDE4NTgsXCJcInlcIlwiOjQuNjg0MTQzMDY2NDA2MjV9LHtcIlwieFwiXCI6Mi4wOTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjo0LjE5ODQwMDk3NDI3MzY4Mn0se1wiXCJ4XCJcIjoyLjU5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjQuMTc5MjIyMTA2OTMzNTk0fSx7XCJcInhcIlwiOjMuMDk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6NC42Mzg0NzM5ODc1NzkzNDZ9LHtcIlwieFwiXCI6My41OTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjo0LjcwODU1MzMxNDIwODk4NH0se1wiXCJ4XCJcIjo0LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6NC4yOTE1ODkyNjAxMDEzMTh9LHtcIlwieFwiXCI6NC41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjQuMDM4MDgyNTk5NjM5ODkzfSx7XCJcInhcIlwiOjUuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjozLjQzNDk5Mzk4MjMxNTA2MzV9LHtcIlwieFwiXCI6NS41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjEuMjE5NDcwODU4NTczOTEzNn0se1wiXCJ4XCJcIjo2LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MS4xOTIwODMxMjAzNDYwNjkzfSx7XCJcInhcIlwiOjYuNTk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjowLjUzNTI2MzU5Nzk2NTI0MDV9LHtcIlwieFwiXCI6Ny4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuMzM0NjkyMDMxMTQ1MDk1OH1dfSx7XCJcIm5hbWVcIlwiOlwiXCJSdW46MjAyMy0wOC0wOFwiXCIsXCJcImZpdExpbmVDb2xvclwiXCI6XCJcIiNmZmJiNzhcIlwiLFwiXCJwb2ludENvbG9yXCJcIjpcIlwiI2ZmYmI3OFwiXCIsXCJcInNob3dQb2ludHNcIlwiOlwiXCJwb2ludHNcIlwiLFwiXCJwYXJhbWV0ZXJzXCJcIjpbMi4zMzk0NTgwMTc5NzAxMjYsIC0xLjA3MzQxODQzMTAxNzExNzgsIDQuNzQ2MzMyOTUwNTUwOTM0LCAwLjI0ODI0MTY4NTc1OTU2NThdLFwiXCJwb2ludHNcIlwiOlt7XCJcInhcIlwiOjAuMTAwMDAwMDAxNDkwMTE2MTIsXCJcInlcIlwiOjAuMjEzOTMzNzY1ODg4MjE0MX0se1wiXCJ4XCJcIjowLjYwMDAwMDAyMzg0MTg1NzksXCJcInlcIlwiOjAuNDI2OTU2MjA2NTYwMTM0OX0se1wiXCJ4XCJcIjoxLjEwMDAwMDAyMzg0MTg1OCxcIlwieVwiXCI6MC4yNDQxNTczMjkyMDE2OTgzfSx7XCJcInhcIlwiOjEuNjAwMDAwMDIzODQxODU4LFwiXCJ5XCJcIjowLjE0NjYzNTk2NDUxMjgyNX0se1wiXCJ4XCJcIjoyLjA5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjAuMDg4MTg0NjI0OTEwMzU0NjF9LHtcIlwieFwiXCI6Mi41OTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjowLjI1NjA2NTY2NjY3NTU2NzZ9LHtcIlwieFwiXCI6My4wOTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjowLjQyNDM0MDQ1NjcyNDE2Njg3fSx7XCJcInhcIlwiOjMuNTk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6MC4zNzExMTIzMTY4NDY4NDc1M30se1wiXCJ4XCJcIjo0LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC41NTgxNzM3MTYwNjgyNjc4fSx7XCJcInhcIlwiOjQuNTk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjoxLjE4MzU5MDA1NDUxMjAyNH0se1wiXCJ4XCJcIjo1LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MS41NjI5ODQzNDczNDM0NDQ4fSx7XCJcInhcIlwiOjUuNTk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjoyLjMyMTEyODg0NTIxNDg0Mzh9LHtcIlwieFwiXCI6Ni4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjIuMjI5OTYxNjMzNjgyMjUxfSx7XCJcInhcIlwiOjYuNTk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjoyLjI1NjAyMjY5MTcyNjY4NDZ9LHtcIlwieFwiXCI6Ny4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjIuMjE0MjM5ODM1NzM5MTM1N31dfV0sXCJcImNoYXJ0T3B0aW9uc1wiXCI6e1wiXCJ4QXhpc05hbWVcIlwiOlwiXCJDb25jLlwiXCIsXCJcInlBeGlzTmFtZVwiXCI6XCJcIkFjdGl2aXR5XCJcIixcIlwidGl0bGVcIlwiOlwiXCJEb3NlLVJlc3BvbnNlIGN1cnZlc1wiXCJ9fVwiLHRleHQsLFxuQ2FtZXJvb24sTUlFVkZMRkdJVkxHTElQSVRMQUdMRlZUQVlMUVlSUkdEUUxETCxDT2MxY2NjMmNjKGNjYzJjMSlDKEMpQyg9TylPQ0NDYzNjY2NuYzMsMTQ4MDAxNiwzNi4yNjA5NTk2MjUyNDQxNCw5OTUxNTM1OTYsMzAtNTYgV0hJVEVTVE9ORSBFWFBZLGh0dHBzOi8vZGF0YWdyb2suYWkvaW1nL3NsaWRlcy9hY2Nlc3MtZGItY29ubmVjdC5wbmcsaWQsRXJyb3JNZXNzYWdlLFwiQ09NUE5EIFxuQVRPTSBcbkVORFwiLGZsYWcsMywzLDJCREosMywxLjIzLDxjaGFydD48L2NoYXJ0PixcIntcIlwic2VyaWVzXCJcIjpbe1wiXCJuYW1lXCJcIjpcIlwiUnVuOjIwMjMtMDgtMDhcIlwiLFwiXCJmaXRGdW5jdGlvblwiXCI6XCJcInNpZ21vaWRcIlwiLFwiXCJmaXRMaW5lQ29sb3JcIlwiOlwiXCIjMWY3N2I0XCJcIixcIlwicG9pbnRDb2xvclwiXCI6XCJcIiMxZjc3YjRcIlwiLFwiXCJzaG93UG9pbnRzXCJcIjpcIlwicG9pbnRzXCJcIixcIlwicGFyYW1ldGVyc1wiXCI6WzQuNjc2MDY1MjU3ODY0MjMyNSwgMC45MDQ2OTU2MzIwNzU2NzAzLCA1LjY1MTQwODk3MTg1NjczOCwgMC4wNzczODg0NjAxMjE4NDE4NV0sXCJcInBvaW50c1wiXCI6W3tcIlwieFwiXCI6MC4xMDAwMDAwMDE0OTAxMTYxMixcIlwieVwiXCI6NC4zMjQyNTU5NDMyOTgzNH0se1wiXCJ4XCJcIjowLjYwMDAwMDAyMzg0MTg1NzksXCJcInlcIlwiOjQuNjY4NDQyMjQ5Mjk4MDk2fSx7XCJcInhcIlwiOjEuMTAwMDAwMDIzODQxODU4LFwiXCJ5XCJcIjo0LjM3OTc4NTA2MDg4MjU2OH0se1wiXCJ4XCJcIjoxLjYwMDAwMDAyMzg0MTg1OCxcIlwieVwiXCI6NS4wMzQ1MTM5NTAzNDc5fSx7XCJcInhcIlwiOjIuMDk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6NC44Nzg2NTM1MjYzMDYxNTJ9LHtcIlwieFwiXCI6Mi41OTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjo0LjM0NTEzMTM5NzI0NzMxNDV9LHtcIlwieFwiXCI6My4wOTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjo0LjMzNjk5MjI2Mzc5Mzk0NX0se1wiXCJ4XCJcIjozLjU5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjUuMDM3NDMwMjg2NDA3NDcxfSx7XCJcInhcIlwiOjQuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjo1LjAwOTI2OTIzNzUxODMxMDV9LHtcIlwieFwiXCI6NC41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjQuMTUxOTAyNjc1NjI4NjYyfSx7XCJcInhcIlwiOjUuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjozLjQwNjY5NTEyNzQ4NzE4MjZ9LHtcIlwieFwiXCI6NS41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjIuMzczMjc1OTk1MjU0NTE2Nn0se1wiXCJ4XCJcIjo2LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MS42NzM3MjgxMDg0MDYwNjd9LHtcIlwieFwiXCI6Ni41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuNDg1NzQ3OTAzNTg1NDMzOTZ9LHtcIlwieFwiXCI6Ny4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuMjc4MzA1MjMyNTI0ODcxOH1dfSx7XCJcIm5hbWVcIlwiOlwiXCJSdW46MjAyMy0wOC0wOFwiXCIsXCJcImZpdExpbmVDb2xvclwiXCI6XCJcIiNmZmJiNzhcIlwiLFwiXCJwb2ludENvbG9yXCJcIjpcIlwiI2ZmYmI3OFwiXCIsXCJcInNob3dQb2ludHNcIlwiOlwiXCJwb2ludHNcIlwiLFwiXCJwYXJhbWV0ZXJzXCJcIjpbMi45MzgzOTU4NjMwMTAxMTEsIC0xLjQ2NTg0ODA2NjEzOTIxMTcsIDUuNDYyNzAyNzUxOTk2NTg0LCAwLjM0NzMxMzkwMjM2MTUwMzldLFwiXCJwb2ludHNcIlwiOlt7XCJcInhcIlwiOjAuMTAwMDAwMDAxNDkwMTE2MTIsXCJcInlcIlwiOjAuNDk0MTcxMDgyOTczNDgwMn0se1wiXCJ4XCJcIjowLjYwMDAwMDAyMzg0MTg1NzksXCJcInlcIlwiOjAuMTUzMjM5NzQxOTIxNDI0ODd9LHtcIlwieFwiXCI6MS4xMDAwMDAwMjM4NDE4NTgsXCJcInlcIlwiOjAuNDYzNzM0MzI4NzQ2Nzk1NjV9LHtcIlwieFwiXCI6MS42MDAwMDAwMjM4NDE4NTgsXCJcInlcIlwiOjAuMzM3MDQzMTM2MzU4MjYxMX0se1wiXCJ4XCJcIjoyLjA5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjAuNTE3OTAzMDI5OTE4NjcwN30se1wiXCJ4XCJcIjoyLjU5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjAuMjc4OTk3NjU5NjgzMjI3NTR9LHtcIlwieFwiXCI6My4wOTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjowLjIyMDc1MDY0NDgwMzA0NzE4fSx7XCJcInhcIlwiOjMuNTk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6MC41Nzg5OTE4ODk5NTM2MTMzfSx7XCJcInhcIlwiOjQuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjowLjIxMTY5OTExMzI0OTc3ODc1fSx7XCJcInhcIlwiOjQuNTk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjowLjI3ODU3NjQ2MzQ2MDkyMjI0fSx7XCJcInhcIlwiOjUuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjoxLjA5MDYzMzI3MzEyNDY5NDh9LHtcIlwieFwiXCI6NS41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjEuODUyMDMwMDM4ODMzNjE4Mn0se1wiXCJ4XCJcIjo2LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6Mi43MTc3MDU5NjUwNDIxMTQzfSx7XCJcInhcIlwiOjYuNTk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjoyLjg2ODA5MTgyMTY3MDUzMjJ9LHtcIlwieFwiXCI6Ny4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjMuMjQxMzA3NzM1NDQzMTE1Mn1dfV0sXCJcImNoYXJ0T3B0aW9uc1wiXCI6e1wiXCJ4QXhpc05hbWVcIlwiOlwiXCJDb25jLlwiXCIsXCJcInlBeGlzTmFtZVwiXCI6XCJcIkFjdGl2aXR5XCJcIixcIlwidGl0bGVcIlwiOlwiXCJEb3NlLVJlc3BvbnNlIGN1cnZlc1wiXCJ9fVwiLHRleHQsLFxuQ2FuYWRhLE1NRUxWTEtUSUlHUElWVkdWVkxSSVZES1dMTktESyxDQyhDKD1PKU5DQ1MpYzFjY2NjKGMxKUMoPU8pYzJjY2NjYzIsMTQ4MDAxNywzNi4yNjA5NTk2MjUyNDQxNCw5OTUxNSwzMC01NiBXSElURVNUT05FIEVYUFksaHR0cHM6Ly9kYXRhZ3Jvay5haS9pbWcvc2xpZGVzL2FjY2Vzcy1kYi1jb25uZWN0LnBuZyxpZCxFcnJvck1lc3NhZ2UsXCJDT01QTkQgXG5BVE9NIFxuRU5EXCIsZmxhZyw0LDQsMUlBTiw0LDEuMjMsPGNoYXJ0PjwvY2hhcnQ+LFwie1wiXCJzZXJpZXNcIlwiOlt7XCJcIm5hbWVcIlwiOlwiXCJSdW46MjAyMy0wOC0wOFwiXCIsXCJcImZpdEZ1bmN0aW9uXCJcIjpcIlwic2lnbW9pZFwiXCIsXCJcImZpdExpbmVDb2xvclwiXCI6XCJcIiMxZjc3YjRcIlwiLFwiXCJwb2ludENvbG9yXCJcIjpcIlwiIzFmNzdiNFwiXCIsXCJcInNob3dQb2ludHNcIlwiOlwiXCJwb2ludHNcIlwiLFwiXCJwYXJhbWV0ZXJzXCJcIjpbMC44NTk3MzkwOTc1NDMwMDA4LCAxLjA5NTc2MjU3MzI0ODE5NDYsIDUuMjYwNTM3MDY3OTg3OTU4LCAwLjA3OTc0MTg3OTk4MTc3NzM2XSxcIlwicG9pbnRzXCJcIjpbe1wiXCJ4XCJcIjowLjEwMDAwMDAwMTQ5MDExNjEyLFwiXCJ5XCJcIjowLjgxOTAxNTI2NDUxMTEwODR9LHtcIlwieFwiXCI6MC42MDAwMDAwMjM4NDE4NTc5LFwiXCJ5XCJcIjowLjg0MjE2ODk4Njc5NzMzMjh9LHtcIlwieFwiXCI6MS4xMDAwMDAwMjM4NDE4NTgsXCJcInlcIlwiOjAuODc0MDkyMjIxMjYwMDcwOH0se1wiXCJ4XCJcIjoxLjYwMDAwMDAyMzg0MTg1OCxcIlwieVwiXCI6MC44OTI0Mjc1MDQwNjI2NTI2fSx7XCJcInhcIlwiOjIuMDk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6MC44MjQ5MDY3NjY0MTQ2NDIzfSx7XCJcInhcIlwiOjIuNTk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6MC45MzI3NjY5MTQzNjc2NzU4fSx7XCJcInhcIlwiOjMuMDk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6MC44NTIyOTc0MjUyNzAwODA2fSx7XCJcInhcIlwiOjMuNTk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6MC44MTc0NDkyNzE2Nzg5MjQ2fSx7XCJcInhcIlwiOjQuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjowLjgzOTQ2NDcyNDA2Mzg3MzN9LHtcIlwieFwiXCI6NC41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuNzEzOTM4NzcyNjc4Mzc1Mn0se1wiXCJ4XCJcIjo1LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC41NTYxMTY3NTk3NzcwNjkxfSx7XCJcInhcIlwiOjUuNTk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjowLjMyNzYyMjY4MTg1NjE1NTR9LHtcIlwieFwiXCI6Ni4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuMTI0Nzk0NzQzOTU1MTM1MzV9LHtcIlwieFwiXCI6Ni41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuMTMwMDY3OTc0MzI4OTk0NzV9LHtcIlwieFwiXCI6Ny4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuMDU5NzAyMDc5NzQzMTQ2ODk2fV19LHtcIlwibmFtZVwiXCI6XCJcIlJ1bjoyMDIzLTA4LTA4XCJcIixcIlwiZml0TGluZUNvbG9yXCJcIjpcIlwiI2ZmYmI3OFwiXCIsXCJcInBvaW50Q29sb3JcIlwiOlwiXCIjZmZiYjc4XCJcIixcIlwic2hvd1BvaW50c1wiXCI6XCJcInBvaW50c1wiXCIsXCJcInBhcmFtZXRlcnNcIlwiOls1Ljc2MDkzMDIxOTU4MjU0NiwgMS42NTkxNzkzMjkzODMzMDEzLCA0LjY2NzE1NTkyOTcyMDg1MSwgMC43ODU4MTA5NTQ0MTIxNjUyXSxcIlwicG9pbnRzXCJcIjpbe1wiXCJ4XCJcIjowLjEwMDAwMDAwMTQ5MDExNjEyLFwiXCJ5XCJcIjo2LjE1Njk5MzM4OTEyOTYzOX0se1wiXCJ4XCJcIjowLjYwMDAwMDAyMzg0MTg1NzksXCJcInlcIlwiOjUuMjM2NzAxOTY1MzMyMDMxfSx7XCJcInhcIlwiOjEuMTAwMDAwMDIzODQxODU4LFwiXCJ5XCJcIjo2LjAxMDU2MDUxMjU0MjcyNX0se1wiXCJ4XCJcIjoxLjYwMDAwMDAyMzg0MTg1OCxcIlwieVwiXCI6NS40OTU1MTI5NjIzNDEzMDl9LHtcIlwieFwiXCI6Mi4wOTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjo2LjA4Nzc3MDQ2MjAzNjEzM30se1wiXCJ4XCJcIjoyLjU5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjUuNzk5ODY1NzIyNjU2MjV9LHtcIlwieFwiXCI6My4wOTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjo1LjU5NzU0NjU3NzQ1MzYxM30se1wiXCJ4XCJcIjozLjU5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjUuNTIwOTAyMTU2ODI5ODM0fSx7XCJcInhcIlwiOjQuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjo1LjM2MDY1NDM1NDA5NTQ1OX0se1wiXCJ4XCJcIjo0LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6My41NTM5NzQ2Mjg0NDg0ODYzfSx7XCJcInhcIlwiOjUuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjoxLjU3NzIzNjI5NDc0NjM5OX0se1wiXCJ4XCJcIjo1LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MS4wMDAxMjY0ODEwNTYyMTM0fSx7XCJcInhcIlwiOjYuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjowLjkzMDU3OTc4MTUzMjI4NzZ9LHtcIlwieFwiXCI6Ni41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuNjAzMzYzODcxNTc0NDAxOX0se1wiXCJ4XCJcIjo3LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC40MjAzNjg1NTIyMDc5NDY4fV19XSxcIlwiY2hhcnRPcHRpb25zXCJcIjp7XCJcInhBeGlzTmFtZVwiXCI6XCJcIkNvbmMuXCJcIixcIlwieUF4aXNOYW1lXCJcIjpcIlwiQWN0aXZpdHlcIlwiLFwiXCJ0aXRsZVwiXCI6XCJcIkRvc2UtUmVzcG9uc2UgY3VydmVzXCJcIn19XCIsdGV4dCwsXG5Db2xvbWJpYSxNRFJUREVWU05IVEhES1BUTFRXRkVFSUZFRVlIU1BGSE4sRkMoRikoRiljMWNjYyhPQzJDQ05DQzIpY2MxLDE0ODAwMjksMzYuMzMwOTQ0MDYxMjc5Myw5OTUxNTIwNTAsMSBDT1VSVCBIT1VTRSBTUVVBUkUsaHR0cHM6Ly9kYXRhZ3Jvay5haS9pbWcvc2xpZGVzL2FjY2Vzcy1kYi1jb25uZWN0LnBuZyxpZCxFcnJvck1lc3NhZ2UsXCJDT01QTkQgXG5BVE9NIFxuRU5EXCIsZmxhZyw1LDUsNFVKMSw1LDEuMjMsPGNoYXJ0PjwvY2hhcnQ+LFwie1wiXCJzZXJpZXNcIlwiOlt7XCJcIm5hbWVcIlwiOlwiXCJSdW46MjAyMy0wOC0wOFwiXCIsXCJcImZpdEZ1bmN0aW9uXCJcIjpcIlwic2lnbW9pZFwiXCIsXCJcImZpdExpbmVDb2xvclwiXCI6XCJcIiMxZjc3YjRcIlwiLFwiXCJwb2ludENvbG9yXCJcIjpcIlwiIzFmNzdiNFwiXCIsXCJcInNob3dQb2ludHNcIlwiOlwiXCJwb2ludHNcIlwiLFwiXCJwYXJhbWV0ZXJzXCJcIjpbNi40OTk1MDg4MzE0MTUzNjU1LCAyLjQyNzAzNTEwMDQ1Mzk5MTQsIDUuMTc4NjU5NTM1MzQ4NTc5LCAwLjYyNTY1MzM0NjI0MTU3N10sXCJcInBvaW50c1wiXCI6W3tcIlwieFwiXCI6MC4xMDAwMDAwMDE0OTAxMTYxMixcIlwieVwiXCI6Ni40OTYyMzE1NTU5Mzg3MjF9LHtcIlwieFwiXCI6MC42MDAwMDAwMjM4NDE4NTc5LFwiXCJ5XCJcIjo2LjQyNTQzMzYzNTcxMTY3fSx7XCJcInhcIlwiOjEuMTAwMDAwMDIzODQxODU4LFwiXCJ5XCJcIjo3LjA0MDA2Mzg1ODAzMjIyN30se1wiXCJ4XCJcIjoxLjYwMDAwMDAyMzg0MTg1OCxcIlwieVwiXCI6Ni4xMTE1NDAzMTc1MzU0fSx7XCJcInhcIlwiOjIuMDk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6Ni42ODA3Mjg0MzU1MTYzNTd9LHtcIlwieFwiXCI6Mi41OTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjo2LjQwNjc3NDUyMDg3NDAyM30se1wiXCJ4XCJcIjozLjA5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjYuNjExMjY5NDc0MDI5NTQxfSx7XCJcInhcIlwiOjMuNTk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6NS44ODkwOTQzNTI3MjIxNjh9LHtcIlwieFwiXCI6NC4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjYuNzUzNDQ3MDU1ODE2NjV9LHtcIlwieFwiXCI6NC41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjYuMzYxNDM1ODkwMTk3NzU0fSx7XCJcInhcIlwiOjUuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjo0LjE2NjY5NzUwMjEzNjIzMDV9LHtcIlwieFwiXCI6NS41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjEuMTcyMTE4OTAyMjA2NDIxfSx7XCJcInhcIlwiOjYuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjowLjgwMTA0ODk5NDA2NDMzMX0se1wiXCJ4XCJcIjo2LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC40NjQwMDIxMDI2MTM0NDkxfSx7XCJcInhcIlwiOjcuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjowLjAwMTAzNTc2Njc5MjQ4MzYyNzh9XX0se1wiXCJuYW1lXCJcIjpcIlwiUnVuOjIwMjMtMDgtMDhcIlwiLFwiXCJmaXRMaW5lQ29sb3JcIlwiOlwiXCIjZmZiYjc4XCJcIixcIlwicG9pbnRDb2xvclwiXCI6XCJcIiNmZmJiNzhcIlwiLFwiXCJzaG93UG9pbnRzXCJcIjpcIlwicG9pbnRzXCJcIixcIlwicGFyYW1ldGVyc1wiXCI6WzEuNDczNDM4MTM0NzQ0NjQwMSwgMS4xNjQ5ODA1MTg4MDc0MTk2LCA0LjgyOTU4NjA4ODY2NDIxLCAwLjA5NTAwNTQ1NDk2NzEwMDA3XSxcIlwicG9pbnRzXCJcIjpbe1wiXCJ4XCJcIjowLjEwMDAwMDAwMTQ5MDExNjEyLFwiXCJ5XCJcIjoxLjUyNzkwOTYzNjQ5NzQ5NzZ9LHtcIlwieFwiXCI6MC42MDAwMDAwMjM4NDE4NTc5LFwiXCJ5XCJcIjoxLjM1NTk5NzQ0MzE5OTE1Nzd9LHtcIlwieFwiXCI6MS4xMDAwMDAwMjM4NDE4NTgsXCJcInlcIlwiOjEuNTI0NjM3ODE4MzM2NDg2OH0se1wiXCJ4XCJcIjoxLjYwMDAwMDAyMzg0MTg1OCxcIlwieVwiXCI6MS41NTY3NjU3OTQ3NTQwMjgzfSx7XCJcInhcIlwiOjIuMDk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6MS40MTE0MjQwNDA3OTQzNzI2fSx7XCJcInhcIlwiOjIuNTk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6MS40MDQ1MDEwODA1MTMwMDA1fSx7XCJcInhcIlwiOjMuMDk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6MS40NzY5ODI5NTExNjQyNDU2fSx7XCJcInhcIlwiOjMuNTk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6MS40ODc1NTAwMjAyMTc4OTU1fSx7XCJcInhcIlwiOjQuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjoxLjI5OTE5ODc0NjY4MTIxMzR9LHtcIlwieFwiXCI6NC41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuOTIyOTYxNDEzODYwMzIxfSx7XCJcInhcIlwiOjUuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjowLjY1MjAwNDQ4MDM2MTkzODV9LHtcIlwieFwiXCI6NS41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuMTUzNTA5NzgwNzY0NTc5Nzd9LHtcIlwieFwiXCI6Ni4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuMTA3ODkwMzA3OTAzMjg5OH0se1wiXCJ4XCJcIjo2LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC4xNzI3NjQ0OTUwMTUxNDQzNX0se1wiXCJ4XCJcIjo3LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC4xNDA2NjYwODI1MDE0MTE0NH1dfV0sXCJcImNoYXJ0T3B0aW9uc1wiXCI6e1wiXCJ4QXhpc05hbWVcIlwiOlwiXCJDb25jLlwiXCIsXCJcInlBeGlzTmFtZVwiXCI6XCJcIkFjdGl2aXR5XCJcIixcIlwidGl0bGVcIlwiOlwiXCJEb3NlLVJlc3BvbnNlIGN1cnZlc1wiXCJ9fVwiLHRleHQsLFxuQ29zdGEgUmljYSxNS1NUS0VFSVFUSUtUTExLRFNSVEFLWUhLUkxRSVZMLENDKEMpQ2MxY2NjKGNjMSlDKEMpQyg9TylOMkNDQ0MyQyg9TylPQ0NDYzNjY2NjYzMsMTQ4MDAxOCwzNi4zMzA5NDQwNjEyNzkzLDk5NTA4NDIxOCw0MDQxIFNPVVRIV0VTVEVSTiBCTFZELGh0dHBzOi8vZGF0YWdyb2suYWkvaW1nL3NsaWRlcy9hY2Nlc3MtZGItY29ubmVjdC5wbmcsaWQsRXJyb3JNZXNzYWdlLFwiQ09NUE5EIFxuQVRPTSBcbkVORFwiLGZsYWcsNiw2LDJCUFcsNiwxLjIzLDxjaGFydD48L2NoYXJ0PixcIntcIlwic2VyaWVzXCJcIjpbe1wiXCJuYW1lXCJcIjpcIlwiUnVuOjIwMjMtMDgtMDhcIlwiLFwiXCJmaXRGdW5jdGlvblwiXCI6XCJcInNpZ21vaWRcIlwiLFwiXCJmaXRMaW5lQ29sb3JcIlwiOlwiXCIjMWY3N2I0XCJcIixcIlwicG9pbnRDb2xvclwiXCI6XCJcIiMxZjc3YjRcIlwiLFwiXCJzaG93UG9pbnRzXCJcIjpcIlwicG9pbnRzXCJcIixcIlwicGFyYW1ldGVyc1wiXCI6WzIuNDgzMzY0MTg0MzMxMTIyNywgLTEuODk0NTk3ODc0MjA5MDA2MiwgNC42NzExMjc3MDgwOTI1NjgsIDAuMjQxNTk4NjEzMTE4MTUxNTNdLFwiXCJwb2ludHNcIlwiOlt7XCJcInhcIlwiOjAuMTAwMDAwMDAxNDkwMTE2MTIsXCJcInlcIlwiOjAuMDk2OTUyNDE2MDAyNzUwNH0se1wiXCJ4XCJcIjowLjYwMDAwMDAyMzg0MTg1NzksXCJcInlcIlwiOjAuMDI4NDgzMDQwNjMwODE3NDEzfSx7XCJcInhcIlwiOjEuMTAwMDAwMDIzODQxODU4LFwiXCJ5XCJcIjowLjIyMDg3MTc2MTQ0MTIzMDc3fSx7XCJcInhcIlwiOjEuNjAwMDAwMDIzODQxODU4LFwiXCJ5XCJcIjowLjAwNjg5MTU1NDY4NzE3MjE3NDV9LHtcIlwieFwiXCI6Mi4wOTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjowLjQzMDU4Nzk3NzE3MDk0NDJ9LHtcIlwieFwiXCI6Mi41OTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjowLjQ0Nzc0MTE1MDg1NjAxODA3fSx7XCJcInhcIlwiOjMuMDk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6MC40NTM0NjMxOTY3NTQ0NTU1N30se1wiXCJ4XCJcIjozLjU5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjAuMjM3MDU5MzEwMDc4NjIwOX0se1wiXCJ4XCJcIjo0LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC40NjU3OTUzOTc3NTg0ODM5fSx7XCJcInhcIlwiOjQuNTk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjoxLjE1NTIwMDcxOTgzMzM3NH0se1wiXCJ4XCJcIjo1LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6Mi4yMjk0MDcwNzIwNjcyNjA3fSx7XCJcInhcIlwiOjUuNTk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjoyLjQzMTE1MzA1OTAwNTczNzN9LHtcIlwieFwiXCI6Ni4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjIuMzM4NDYxMTYwNjU5Nzl9LHtcIlwieFwiXCI6Ni41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjIuNjA4MjAxMDI2OTE2NTA0fSx7XCJcInhcIlwiOjcuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjoyLjgxMzYxNDM2ODQzODcyMDd9XX0se1wiXCJuYW1lXCJcIjpcIlwiUnVuOjIwMjMtMDgtMDhcIlwiLFwiXCJmaXRMaW5lQ29sb3JcIlwiOlwiXCIjZmZiYjc4XCJcIixcIlwicG9pbnRDb2xvclwiXCI6XCJcIiNmZmJiNzhcIlwiLFwiXCJzaG93UG9pbnRzXCJcIjpcIlwicG9pbnRzXCJcIixcIlwicGFyYW1ldGVyc1wiXCI6WzUuMjI0NTczNTIxNjQyMDMzLCAxLjQ0NTQwMzM5MjQxOTg1MjgsIDUuNjAxNDE5Nzc0NjA3NjUzNSwgMC4yODIzMjE2MDU0MTk3NTc3XSxcIlwicG9pbnRzXCJcIjpbe1wiXCJ4XCJcIjowLjEwMDAwMDAwMTQ5MDExNjEyLFwiXCJ5XCJcIjo0Ljk1MDI3NDk0NDMwNTQyfSx7XCJcInhcIlwiOjAuNjAwMDAwMDIzODQxODU3OSxcIlwieVwiXCI6NS4xNzU0Njc5Njc5ODcwNjA1fSx7XCJcInhcIlwiOjEuMTAwMDAwMDIzODQxODU4LFwiXCJ5XCJcIjo1LjI3Njc1Mjk0ODc2MDk4Nn0se1wiXCJ4XCJcIjoxLjYwMDAwMDAyMzg0MTg1OCxcIlwieVwiXCI6NS41ODkyOTQ5MTA0MzA5MDh9LHtcIlwieFwiXCI6Mi4wOTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjo1LjYxNjk5NDg1Nzc4ODA4Nn0se1wiXCJ4XCJcIjoyLjU5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjUuMTIwODEzODQ2NTg4MTM1fSx7XCJcInhcIlwiOjMuMDk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6NS4zNDA3NjY5MDY3MzgyODF9LHtcIlwieFwiXCI6My41OTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjo0Ljg3NjQ3MTA0MjYzMzA1N30se1wiXCJ4XCJcIjo0LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6NC45NDk5OTM2MTAzODIwOH0se1wiXCJ4XCJcIjo0LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6NS4xNjI1NjQ3NTQ0ODYwODR9LHtcIlwieFwiXCI6NS4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjQuMzk5NTU3NTkwNDg0NjE5fSx7XCJcInhcIlwiOjUuNTk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjoyLjc5Nzc5Njk2NDY0NTM4NTd9LHtcIlwieFwiXCI6Ni4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjEuMDIyOTg3MjQ2NTEzMzY2N30se1wiXCJ4XCJcIjo2LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC40ODI3NTYwMTg2Mzg2MTA4NH0se1wiXCJ4XCJcIjo3LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC4xMDQwODkzMTk3MDU5NjMxM31dfV0sXCJcImNoYXJ0T3B0aW9uc1wiXCI6e1wiXCJ4QXhpc05hbWVcIlwiOlwiXCJDb25jLlwiXCIsXCJcInlBeGlzTmFtZVwiXCI6XCJcIkFjdGl2aXR5XCJcIixcIlwidGl0bGVcIlwiOlwiXCJEb3NlLVJlc3BvbnNlIGN1cnZlc1wiXCJ9fVwiLHRleHQsLFxuQ3ViYSxNSEFJTFJZRklSUkxGWUhJRllLSVlTTElTS0tIUVNMUFNEVlJRRixDT2MxY2NjMmMoYzEpYyhDQyg9TylOM0NDQ0MzQyg9TylPYzRjY2MoQyljYzRPQyljKEMpbjJDKD1PKWM1Y2NjKENsKWNjNSwxNDgwMDE5LDM2LjMzMTE1NzY4NDMyNjE3LDk5NTA4MTkyOCwxMjI3IFVTIEhJR0hXQVkgMTEsaHR0cHM6Ly9kYXRhZ3Jvay5haS9pbWcvc2xpZGVzL2FjY2Vzcy1kYi1jb25uZWN0LnBuZyxpZCxFcnJvck1lc3NhZ2UsXCJDT01QTkQgXG5BVE9NIFxuRU5EXCIsZmxhZyw3LDcsMVFCUyw3LDEuMjMsPGNoYXJ0PjwvY2hhcnQ+LFwie1wiXCJzZXJpZXNcIlwiOlt7XCJcIm5hbWVcIlwiOlwiXCJSdW46MjAyMy0wOC0wOFwiXCIsXCJcImZpdEZ1bmN0aW9uXCJcIjpcIlwic2lnbW9pZFwiXCIsXCJcImZpdExpbmVDb2xvclwiXCI6XCJcIiMxZjc3YjRcIlwiLFwiXCJwb2ludENvbG9yXCJcIjpcIlwiIzFmNzdiNFwiXCIsXCJcInNob3dQb2ludHNcIlwiOlwiXCJwb2ludHNcIlwiLFwiXCJwYXJhbWV0ZXJzXCJcIjpbMy4zMjA4Mzg2Nzk3MTM5MjUsIC0xLjI0MjE2MTk5ODczMTY3MjgsIDQuODMxMzI1NDI1MjI1MjU2LCAwLjMyMzYwMTEwOTg0MDMwNzJdLFwiXCJwb2ludHNcIlwiOlt7XCJcInhcIlwiOjAuMTAwMDAwMDAxNDkwMTE2MTIsXCJcInlcIlwiOjAuMzcyNzQ3MDMzODM0NDU3NH0se1wiXCJ4XCJcIjowLjYwMDAwMDAyMzg0MTg1NzksXCJcInlcIlwiOjAuMTIzNjUwMTQxMDYwMzUyMzN9LHtcIlwieFwiXCI6MS4xMDAwMDAwMjM4NDE4NTgsXCJcInlcIlwiOjAuNDg0MjI0Njc3MDg1ODc2NDZ9LHtcIlwieFwiXCI6MS42MDAwMDAwMjM4NDE4NTgsXCJcInlcIlwiOjAuMjI2NDQ2NTA5MzYxMjY3MX0se1wiXCJ4XCJcIjoyLjA5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjAuMTY4MjE3OTQyMTE4NjQ0NzF9LHtcIlwieFwiXCI6Mi41OTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjowLjM4NzkwMTQ1NTE2Mzk1NTd9LHtcIlwieFwiXCI6My4wOTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjowLjU0NzAyNDQ4ODQ0OTA5Njd9LHtcIlwieFwiXCI6My41OTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjowLjM0MTkwNTM1NTQ1MzQ5MTJ9LHtcIlwieFwiXCI6NC4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuNzY1NTEyMDQ5MTk4MTUwNn0se1wiXCJ4XCJcIjo0LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MS4yMzQ2NTE2ODQ3NjEwNDc0fSx7XCJcInhcIlwiOjUuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjoyLjQ1MzMzNjcxNTY5ODI0Mn0se1wiXCJ4XCJcIjo1LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6Mi45NTY1NDkxNjc2MzMwNTY2fSx7XCJcInhcIlwiOjYuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjozLjMzNTI5OTQ5MTg4MjMyNH0se1wiXCJ4XCJcIjo2LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6My4yNDAyOTA4ODAyMDMyNDd9LHtcIlwieFwiXCI6Ny4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjMuMTEwNzIxODI2NTUzMzQ0N31dfSx7XCJcIm5hbWVcIlwiOlwiXCJSdW46MjAyMy0wOC0wOFwiXCIsXCJcImZpdExpbmVDb2xvclwiXCI6XCJcIiNmZmJiNzhcIlwiLFwiXCJwb2ludENvbG9yXCJcIjpcIlwiI2ZmYmI3OFwiXCIsXCJcInNob3dQb2ludHNcIlwiOlwiXCJwb2ludHNcIlwiLFwiXCJwYXJhbWV0ZXJzXCJcIjpbMy42NDAxODUzNTIxNTExMDk0LCAxLjI2MjExNTg4ODc1MDEzLCA1LjM5OTAyODA3NDQwMjc0NCwgMC41MDg5NTgwODMwMDY4MDkxXSxcIlwicG9pbnRzXCJcIjpbe1wiXCJ4XCJcIjowLjEwMDAwMDAwMTQ5MDExNjEyLFwiXCJ5XCJcIjozLjg1ODU1OTg0Njg3ODA1MTh9LHtcIlwieFwiXCI6MC42MDAwMDAwMjM4NDE4NTc5LFwiXCJ5XCJcIjozLjYwNzcyMDYxMzQ3OTYxNDN9LHtcIlwieFwiXCI6MS4xMDAwMDAwMjM4NDE4NTgsXCJcInlcIlwiOjMuODU1MjUyMjY1OTMwMTc2fSx7XCJcInhcIlwiOjEuNjAwMDAwMDIzODQxODU4LFwiXCJ5XCJcIjozLjYxOTAzOTI5NzEwMzg4Mn0se1wiXCJ4XCJcIjoyLjA5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjMuODM5Mzg4MzcwNTEzOTE2fSx7XCJcInhcIlwiOjIuNTk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6My4zMzUyODMwNDEwMDAzNjZ9LHtcIlwieFwiXCI6My4wOTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjozLjU3MTE0MTQ4MTM5OTUzNn0se1wiXCJ4XCJcIjozLjU5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjMuNDE1NTA0NjkzOTg0OTg1NH0se1wiXCJ4XCJcIjo0LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6My43MzE2NjQ2NTc1OTI3NzM0fSx7XCJcInhcIlwiOjQuNTk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjozLjA2ODAxNTU3NTQwODkzNTV9LHtcIlwieFwiXCI6NS4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjIuODkxMDY2NTUxMjA4NDk2fSx7XCJcInhcIlwiOjUuNTk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjoxLjYwMjI3NTM3MTU1MTUxMzd9LHtcIlwieFwiXCI6Ni4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuNzY1MjU3NjU2NTc0MjQ5M30se1wiXCJ4XCJcIjo2LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC42ODc1MzI2MDM3NDA2OTIxfSx7XCJcInhcIlwiOjcuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjowLjU4Mjg4NzE3MjY5ODk3NDZ9XX1dLFwiXCJjaGFydE9wdGlvbnNcIlwiOntcIlwieEF4aXNOYW1lXCJcIjpcIlwiQ29uYy5cIlwiLFwiXCJ5QXhpc05hbWVcIlwiOlwiXCJBY3Rpdml0eVwiXCIsXCJcInRpdGxlXCJcIjpcIlwiRG9zZS1SZXNwb25zZSBjdXJ2ZXNcIlwifX1cIix0ZXh0LCxcbkl0YWx5LE1TTkZITkVIVk1RRllSTk5MS1RLR1ZGR1JRLENDKEMpQ2MxY2NjKGNjMSlDKEMpQyg9TylOMkNDQ0MyQyg9TylPQ0NPW04rXSg9TylbTy1dLDE0ODAwMjAsMzYuMzMxMTU3Njg0MzI2MTcsOTk1MDIsXCIxNjgtNDYgOTFTVCBBVkUuLCAyTkQgRkxSXCIsaHR0cHM6Ly9kYXRhZ3Jvay5haS9pbWcvc2xpZGVzL2FjY2Vzcy1kYi1jb25uZWN0LnBuZyxpZCxFcnJvck1lc3NhZ2UsXCJDT01QTkQgXG5BVE9NIFxuRU5EXCIsZmxhZyw4LDgsMVpQOCw4LDEuMjMsPGNoYXJ0PjwvY2hhcnQ+LFwie1wiXCJzZXJpZXNcIlwiOlt7XCJcIm5hbWVcIlwiOlwiXCJSdW46MjAyMy0wOC0wOFwiXCIsXCJcImZpdEZ1bmN0aW9uXCJcIjpcIlwic2lnbW9pZFwiXCIsXCJcImZpdExpbmVDb2xvclwiXCI6XCJcIiMxZjc3YjRcIlwiLFwiXCJwb2ludENvbG9yXCJcIjpcIlwiIzFmNzdiNFwiXCIsXCJcInNob3dQb2ludHNcIlwiOlwiXCJwb2ludHNcIlwiLFwiXCJwYXJhbWV0ZXJzXCJcIjpbMi4yOTM1OTIxMDU5MjM4MDksIDEuMzc4MTU4NjU0OTE0MTgzNSwgNS4xMDI1ODk4MDM4Njc2NjA1LCAwLjAzNDkzODUxMjQ1MjkxMjkxXSxcIlwicG9pbnRzXCJcIjpbe1wiXCJ4XCJcIjowLjEwMDAwMDAwMTQ5MDExNjEyLFwiXCJ5XCJcIjoyLjEyODcyODM4OTczOTk5MDJ9LHtcIlwieFwiXCI6MC42MDAwMDAwMjM4NDE4NTc5LFwiXCJ5XCJcIjoyLjI2Nzk3MjIzMDkxMTI1NX0se1wiXCJ4XCJcIjoxLjEwMDAwMDAyMzg0MTg1OCxcIlwieVwiXCI6Mi4zOTg0NDI1MDY3OTAxNjF9LHtcIlwieFwiXCI6MS42MDAwMDAwMjM4NDE4NTgsXCJcInlcIlwiOjIuNTEzMDYyMjM4NjkzMjM3M30se1wiXCJ4XCJcIjoyLjA5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjIuMzI1NTExNjkzOTU0NDY3OH0se1wiXCJ4XCJcIjoyLjU5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjIuMTI3MzQwNzkzNjA5NjE5fSx7XCJcInhcIlwiOjMuMDk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6Mi40NzI1OTc4Mzc0NDgxMn0se1wiXCJ4XCJcIjozLjU5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjIuMTMxMTgxNDc4NTAwMzY2fSx7XCJcInhcIlwiOjQuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjoyLjA5MDQyMTQzODIxNzE2M30se1wiXCJ4XCJcIjo0LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6Mi4wMjI5OTE2NTcyNTcwOH0se1wiXCJ4XCJcIjo1LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MS4xMTA1MDU5Mzg1Mjk5NjgzfSx7XCJcInhcIlwiOjUuNTk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjowLjQ0OTQ0ODU4NTUxMDI1Mzl9LHtcIlwieFwiXCI6Ni4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuMTM3NTYzNTg2MjM1MDQ2NH0se1wiXCJ4XCJcIjo2LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC4wMzYzNTExMjE5NjIwNzA0NjV9LHtcIlwieFwiXCI6Ny4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuMTYxOTc3MTEyMjkzMjQzNH1dfSx7XCJcIm5hbWVcIlwiOlwiXCJSdW46MjAyMy0wOC0wOFwiXCIsXCJcImZpdExpbmVDb2xvclwiXCI6XCJcIiNmZmJiNzhcIlwiLFwiXCJwb2ludENvbG9yXCJcIjpcIlwiI2ZmYmI3OFwiXCIsXCJcInNob3dQb2ludHNcIlwiOlwiXCJwb2ludHNcIlwiLFwiXCJwYXJhbWV0ZXJzXCJcIjpbNS45NTMxMjU0OTk0Mzk4NzksIDEuMjUyODYyMDI1NTMwNjUyOCwgNS4xODc2Mzc0NDAxNDk4MDIsIDAuMzExMDM0ODc1MzI2MDg4Nl0sXCJcInBvaW50c1wiXCI6W3tcIlwieFwiXCI6MC4xMDAwMDAwMDE0OTAxMTYxMixcIlwieVwiXCI6NS42NTg1MjgzMjc5NDE4OTQ1fSx7XCJcInhcIlwiOjAuNjAwMDAwMDIzODQxODU3OSxcIlwieVwiXCI6NS45MTExNTIzNjI4MjM0ODZ9LHtcIlwieFwiXCI6MS4xMDAwMDAwMjM4NDE4NTgsXCJcInlcIlwiOjUuOTI0OTIwMDgyMDkyMjg1fSx7XCJcInhcIlwiOjEuNjAwMDAwMDIzODQxODU4LFwiXCJ5XCJcIjo1Ljg0Njk0Mzg1NTI4NTY0NDV9LHtcIlwieFwiXCI6Mi4wOTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjo1LjkyOTQ3MjkyMzI3ODgwOX0se1wiXCJ4XCJcIjoyLjU5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjYuMTkwMDM3NzI3MzU1OTU3fSx7XCJcInhcIlwiOjMuMDk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6Ni4yMzYxNzk4Mjg2NDM3OTl9LHtcIlwieFwiXCI6My41OTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjo2LjE0MTAxOTM0NDMyOTgzNH0se1wiXCJ4XCJcIjo0LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6NS4yOTUyMTA4MzgzMTc4NzF9LHtcIlwieFwiXCI6NC41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjUuMjY1ODAxOTA2NTg1NjkzfSx7XCJcInhcIlwiOjUuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjozLjM3MjI4NTEyNzYzOTc3MDV9LHtcIlwieFwiXCI6NS41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjEuODI5OTIyNjc2MDg2NDI1OH0se1wiXCJ4XCJcIjo2LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC4zMjY5MDkwMDU2NDE5MzcyNn0se1wiXCJ4XCJcIjo2LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC42Mjc0NTQzNDA0NTc5MTYzfSx7XCJcInhcIlwiOjcuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjowLjg0NDE4NTcwOTk1MzMwODF9XX1dLFwiXCJjaGFydE9wdGlvbnNcIlwiOntcIlwieEF4aXNOYW1lXCJcIjpcIlwiQ29uYy5cIlwiLFwiXCJ5QXhpc05hbWVcIlwiOlwiXCJBY3Rpdml0eVwiXCIsXCJcInRpdGxlXCJcIjpcIlwiRG9zZS1SZXNwb25zZSBjdXJ2ZXNcIlwifX1cIix0ZXh0LCxcblJ3YW5kYSxNUE5TRVBBU0xMRUxGTlNJQVRRR0VMVlJTTEtBR05BU0ssQ0MoQylDYzFjY2MoY2MxKUMoQylDKD1PKU4yQ0NDQzJDKD1PKU9DQ08sMTQ4MDAyMSwzNi4zMzEzNzEzMDczNzMwNSw5OTUwMzcyNDcsXCIxNjgtNDYgOTFTVCBBVkUuLCAyTkQgRkxSXCIsaHR0cHM6Ly9kYXRhZ3Jvay5haS9pbWcvc2xpZGVzL2FjY2Vzcy1kYi1jb25uZWN0LnBuZyxpZCxFcnJvck1lc3NhZ2UsXCJDT01QTkQgXG5BVE9NIFxuRU5EXCIsZmxhZyw5LDksMkJESiw5LDEuMjMsPGNoYXJ0PjwvY2hhcnQ+LFwie1wiXCJzZXJpZXNcIlwiOlt7XCJcIm5hbWVcIlwiOlwiXCJSdW46MjAyMy0wOC0wOFwiXCIsXCJcImZpdEZ1bmN0aW9uXCJcIjpcIlwic2lnbW9pZFwiXCIsXCJcImZpdExpbmVDb2xvclwiXCI6XCJcIiMxZjc3YjRcIlwiLFwiXCJwb2ludENvbG9yXCJcIjpcIlwiIzFmNzdiNFwiXCIsXCJcInNob3dQb2ludHNcIlwiOlwiXCJwb2ludHNcIlwiLFwiXCJwYXJhbWV0ZXJzXCJcIjpbMy44MjA5OTcyMjAyNjU0NDc0LCAxLjM3NzkyMTY3MTY0NDg1MDYsIDUuMjk5ODgyMjI4NDM5Njg2LCAwLjA2MDQwNjQ1NTE5MDY5NjA4XSxcIlwicG9pbnRzXCJcIjpbe1wiXCJ4XCJcIjowLjEwMDAwMDAwMTQ5MDExNjEyLFwiXCJ5XCJcIjozLjc4MjExMDkyOTQ4OTEzNTd9LHtcIlwieFwiXCI6MC42MDAwMDAwMjM4NDE4NTc5LFwiXCJ5XCJcIjozLjU0MjQzMzAyMzQ1Mjc1OX0se1wiXCJ4XCJcIjoxLjEwMDAwMDAyMzg0MTg1OCxcIlwieVwiXCI6My43MDA4Njc0MTQ0NzQ0ODczfSx7XCJcInhcIlwiOjEuNjAwMDAwMDIzODQxODU4LFwiXCJ5XCJcIjozLjcxNzMwMTYwNzEzMTk1OH0se1wiXCJ4XCJcIjoyLjA5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjQuMDI0NDUyMjA5NDcyNjU2fSx7XCJcInhcIlwiOjIuNTk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6NC4wMTM4OTkzMjYzMjQ0NjN9LHtcIlwieFwiXCI6My4wOTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjozLjk0NTA5NDM0NzAwMDEyMn0se1wiXCJ4XCJcIjozLjU5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjMuODY2NjIxOTcxMTMwMzcxfSx7XCJcInhcIlwiOjQuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjozLjc0NjE2MjY1Mjk2OTM2MDR9LHtcIlwieFwiXCI6NC41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjMuMzQ1NDc0MDA0NzQ1NDgzNH0se1wiXCJ4XCJcIjo1LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6Mi42MTk0NDMxNzgxNzY4OH0se1wiXCJ4XCJcIjo1LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC45OTk0MDUwMjY0MzU4NTJ9LHtcIlwieFwiXCI6Ni4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuNDYyNTk3OTM2MzkxODMwNDR9LHtcIlwieFwiXCI6Ni41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuMDU0MTM0NjExMDQwMzUzNzc1fSx7XCJcInhcIlwiOjcuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjowLjA1NzExMTg3NDIyMjc1NTQzfV19LHtcIlwibmFtZVwiXCI6XCJcIlJ1bjoyMDIzLTA4LTA4XCJcIixcIlwiZml0TGluZUNvbG9yXCJcIjpcIlwiI2ZmYmI3OFwiXCIsXCJcInBvaW50Q29sb3JcIlwiOlwiXCIjZmZiYjc4XCJcIixcIlwic2hvd1BvaW50c1wiXCI6XCJcInBvaW50c1wiXCIsXCJcInBhcmFtZXRlcnNcIlwiOls1LjYzMTgwNzk2NTc3MjYwMzUsIDEuODQ5NTQ5Mzc3MDAwMDU5NSwgNS4zOTE3OTMzMTI0NzExMTYsIDAuMTcwNjA3MDc1ODczNDg0NDJdLFwiXCJwb2ludHNcIlwiOlt7XCJcInhcIlwiOjAuMTAwMDAwMDAxNDkwMTE2MTIsXCJcInlcIlwiOjUuNDU4MDc5ODE0OTEwODg5fSx7XCJcInhcIlwiOjAuNjAwMDAwMDIzODQxODU3OSxcIlwieVwiXCI6NS41NTQ0MjcxNDY5MTE2MjF9LHtcIlwieFwiXCI6MS4xMDAwMDAwMjM4NDE4NTgsXCJcInlcIlwiOjUuNzk5OTgzMDI0NTk3MTY4fSx7XCJcInhcIlwiOjEuNjAwMDAwMDIzODQxODU4LFwiXCJ5XCJcIjo1LjM2NDE0MDAzMzcyMTkyNH0se1wiXCJ4XCJcIjoyLjA5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjUuODY0NDg1NzQwNjYxNjIxfSx7XCJcInhcIlwiOjIuNTk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6NS40NTA5ODA2NjMyOTk1NjA1fSx7XCJcInhcIlwiOjMuMDk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6NS43MDI1NzQ3Mjk5MTk0MzR9LHtcIlwieFwiXCI6My41OTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjo1LjczMTQ1MzQxODczMTY4OTV9LHtcIlwieFwiXCI6NC4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjUuNTEyMzQ0MzYwMzUxNTYyNX0se1wiXCJ4XCJcIjo0LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6NS43MjQzOTU3NTE5NTMxMjV9LHtcIlwieFwiXCI6NS4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjQuMzU0NTA2OTY5NDUxOTA0fSx7XCJcInhcIlwiOjUuNTk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjoxLjczMDc2NjY1NDAxNDU4NzR9LHtcIlwieFwiXCI6Ni4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuNjMwNTkzNjU3NDkzNTkxM30se1wiXCJ4XCJcIjo2LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC4wMzUxODM0MzcxNjg1OTgxNzV9LHtcIlwieFwiXCI6Ny4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuNzU3NTE2OTIwNTY2NTU4OH1dfV0sXCJcImNoYXJ0T3B0aW9uc1wiXCI6e1wiXCJ4QXhpc05hbWVcIlwiOlwiXCJDb25jLlwiXCIsXCJcInlBeGlzTmFtZVwiXCI6XCJcIkFjdGl2aXR5XCJcIixcIlwidGl0bGVcIlwiOlwiXCJEb3NlLVJlc3BvbnNlIGN1cnZlc1wiXCJ9fVwiLHRleHQsLFxuU3dpdHplcmxhbmQsSVJWVkdSWUxJRVZXS0FBR01ETURLVkxGTFdTU0RFSSxDTjFDQ0MoQ0MxKU9jMmNjYyhjYzIpQyhGKShGKUYsMTQ4MDAyOCwzNi4zMzEzNzEzMDczNzMwNSw5OTUwNCw5Mi0xMSAxNzlUSCBQTEFDRSxodHRwczovL2RhdGFncm9rLmFpL2ltZy9zbGlkZXMvYWNjZXNzLWRiLWNvbm5lY3QucG5nLGlkLEVycm9yTWVzc2FnZSxcIkNPTVBORCBcbkFUT00gXG5FTkRcIixmbGFnLDksMTAsMUlBTiwxMCwxLjIzLDxjaGFydD48L2NoYXJ0PixcIntcIlwic2VyaWVzXCJcIjpbe1wiXCJuYW1lXCJcIjpcIlwiUnVuOjIwMjMtMDgtMDhcIlwiLFwiXCJmaXRGdW5jdGlvblwiXCI6XCJcInNpZ21vaWRcIlwiLFwiXCJmaXRMaW5lQ29sb3JcIlwiOlwiXCIjMWY3N2I0XCJcIixcIlwicG9pbnRDb2xvclwiXCI6XCJcIiMxZjc3YjRcIlwiLFwiXCJzaG93UG9pbnRzXCJcIjpcIlwicG9pbnRzXCJcIixcIlwicGFyYW1ldGVyc1wiXCI6WzEuMTE5MDI1NTg2NTA5NzQ3MSwgMi4zMTYzODk1MTYxNTQ0NDM3LCA1LjQ5Njg4NjYxODIyNzkxOTUsIDAuMjAzNTIwNDA0NzI4OTA1Ml0sXCJcInBvaW50c1wiXCI6W3tcIlwieFwiXCI6MC4xMDAwMDAwMDE0OTAxMTYxMixcIlwieVwiXCI6MS4xMDU3NjgzMjI5NDQ2NDExfSx7XCJcInhcIlwiOjAuNjAwMDAwMDIzODQxODU3OSxcIlwieVwiXCI6MS4xMDE5Njk3MTg5MzMxMDU1fSx7XCJcInhcIlwiOjEuMTAwMDAwMDIzODQxODU4LFwiXCJ5XCJcIjoxLjA4MTg2MDc4MDcxNTk0MjR9LHtcIlwieFwiXCI6MS42MDAwMDAwMjM4NDE4NTgsXCJcInlcIlwiOjEuMDYyOTk3ODE3OTkzMTY0fSx7XCJcInhcIlwiOjIuMDk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6MS4wNDY0NDc1MTU0ODc2NzF9LHtcIlwieFwiXCI6Mi41OTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjoxLjEyMTcyNDk2MzE4ODE3MTR9LHtcIlwieFwiXCI6My4wOTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjoxLjIxNjY5OTYwMDIxOTcyNjZ9LHtcIlwieFwiXCI6My41OTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjoxLjIxNTQ3NzcwNTAwMTgzMX0se1wiXCJ4XCJcIjo0LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MS4wNTgxODkzOTIwODk4NDM4fSx7XCJcInhcIlwiOjQuNTk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjoxLjE3NDc5OTU2MTUwMDU0OTN9LHtcIlwieFwiXCI6NS4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjEuMDE4MTEyNzc4NjYzNjM1M30se1wiXCJ4XCJcIjo1LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC41MzQ0NTIzMTkxNDUyMDI2fSx7XCJcInhcIlwiOjYuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjowLjI1Njk1MjY0MzM5NDQ3MDJ9LHtcIlwieFwiXCI6Ni41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuMTkxMjIwNzMwNTQzMTM2Nn0se1wiXCJ4XCJcIjo3LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC4xNTA2MDUzODA1MzUxMjU3M31dfSx7XCJcIm5hbWVcIlwiOlwiXCJSdW46MjAyMy0wOC0wOFwiXCIsXCJcImZpdExpbmVDb2xvclwiXCI6XCJcIiNmZmJiNzhcIlwiLFwiXCJwb2ludENvbG9yXCJcIjpcIlwiI2ZmYmI3OFwiXCIsXCJcInNob3dQb2ludHNcIlwiOlwiXCJwb2ludHNcIlwiLFwiXCJwYXJhbWV0ZXJzXCJcIjpbMy4xMDM4NTgxMDI1ODA1Nzg1LCAyLjAwMzIyMjQyMDQxODUyNDUsIDUuMDg3NjAyODI1OTg5MTYzLCAwLjEzMjc3OTg4NTEyNDkyNzUzXSxcIlwicG9pbnRzXCJcIjpbe1wiXCJ4XCJcIjowLjEwMDAwMDAwMTQ5MDExNjEyLFwiXCJ5XCJcIjozLjA0OTg1MDk0MDcwNDM0NTd9LHtcIlwieFwiXCI6MC42MDAwMDAwMjM4NDE4NTc5LFwiXCJ5XCJcIjoyLjgwNTIxNzc0MjkxOTkyMn0se1wiXCJ4XCJcIjoxLjEwMDAwMDAyMzg0MTg1OCxcIlwieVwiXCI6My4zNDE1MjUzMTYyMzg0MDMzfSx7XCJcInhcIlwiOjEuNjAwMDAwMDIzODQxODU4LFwiXCJ5XCJcIjozLjA1NDk4NDMzMTEzMDk4MTR9LHtcIlwieFwiXCI6Mi4wOTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjozLjI1MDA3NDg2MzQzMzgzOH0se1wiXCJ4XCJcIjoyLjU5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjMuMDQzMjU4NjY2OTkyMTg3NX0se1wiXCJ4XCJcIjozLjA5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjMuMjY1ODUyNDUxMzI0NDYzfSx7XCJcInhcIlwiOjMuNTk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6Mi45NDc1NzI0Njk3MTEzMDM3fSx7XCJcInhcIlwiOjQuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjozLjE5Mjk4OTgyNjIwMjM5MjZ9LHtcIlwieFwiXCI6NC41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjIuNzQ2MDA2MDExOTYyODkwNn0se1wiXCJ4XCJcIjo1LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MS42MTc1ODYxMzU4NjQyNTc4fSx7XCJcInhcIlwiOjUuNTk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjowLjMwMDY2MDg0ODYxNzU1Mzd9LHtcIlwieFwiXCI6Ni4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuMzQ0NDgwMzA1OTEwMTEwNX0se1wiXCJ4XCJcIjo2LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC4wMTU1Mzc5NzE2MzA2OTI0ODJ9LHtcIlwieFwiXCI6Ny4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuNTUyNzM1ODA1NTExNDc0Nn1dfV0sXCJcImNoYXJ0T3B0aW9uc1wiXCI6e1wiXCJ4QXhpc05hbWVcIlwiOlwiXCJDb25jLlwiXCIsXCJcInlBeGlzTmFtZVwiXCI6XCJcIkFjdGl2aXR5XCJcIixcIlwidGl0bGVcIlwiOlwiXCJEb3NlLVJlc3BvbnNlIGN1cnZlc1wiXCJ9fVwiLHRleHQsLFxuLCwsLCwsLCwsLCwsLCwsLCwsLCwsYCk7XG50ZXN0RGF0YS5jb2x1bW5zLmFkZChERy5Db2x1bW4uZnJvbUxpc3QoREcuVFlQRS5CWVRFX0FSUkFZLCAnQmluYXJ5SW1hZ2UnLCBBcnJheS5mcm9tKG5ldyBVaW50OEFycmF5KDExKSkpKTtcbiJdfQ==","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { testData } from './dataframe-utils';\nimport { changeOptionsSaveLayout, filterAsync, loadLayout, selectFilterChangeCurrent, testViewerInternal } from './test-viewer-utils';\nconst STANDART_TIMEOUT = 30000;\nconst BENCHMARK_TIMEOUT = 10800000;\nconst stdLog = console.log.bind(console);\nconst stdInfo = console.info.bind(console);\nconst stdWarn = console.warn.bind(console);\nconst stdError = console.error.bind(console);\nexport const tests = {};\nconst autoTestsCatName = 'Auto Tests';\nconst demoCatName = 'Demo';\nconst detectorsCatName = 'Detectors';\nconst coreCatName = 'Core';\nconst wasRegistered = {};\nexport let currentCategory;\nexport var assure;\n(function (assure) {\n function notNull(value, name) {\n if (value == null)\n throw new Error(`${name == null ? 'Value' : name} not defined`);\n }\n assure.notNull = notNull;\n})(assure || (assure = {}));\nexport class TestContext {\n constructor(catchUnhandled, report, returnOnFail) {\n this.catchUnhandled = true;\n this.report = false;\n this.returnOnFail = false;\n if (catchUnhandled !== undefined)\n this.catchUnhandled = catchUnhandled;\n if (report !== undefined)\n this.report = report;\n if (returnOnFail !== undefined)\n this.returnOnFail = returnOnFail;\n }\n ;\n}\nexport class Test {\n constructor(category, name, test, options) {\n var _a;\n this.category = category;\n this.name = name;\n options !== null && options !== void 0 ? options : (options = {});\n (_a = options.timeout) !== null && _a !== void 0 ? _a : (options.timeout = STANDART_TIMEOUT);\n this.options = options;\n this.test = () => __awaiter(this, void 0, void 0, function* () {\n return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {\n var _b;\n let result = '';\n try {\n if (DG.Test.isInDebug)\n debugger;\n let res = yield test();\n try {\n result = (_b = res === null || res === void 0 ? void 0 : res.toString()) !== null && _b !== void 0 ? _b : '';\n }\n catch (e) {\n result = 'Can\\'t convert test\\'s result to string';\n console.error(`Can\\'t convert test\\'s result to string in the ${this.category}:${this.name} test`);\n }\n }\n catch (e) {\n reject(e);\n }\n resolve(result);\n }));\n });\n }\n}\nexport class Category {\n}\nexport class NodeTestExecutionOptions {\n}\nexport class TestExecutionOptions {\n}\nexport function testEvent(event, handler, trigger, ms = 0, reason = `timeout`) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise((resolve, reject) => {\n const sub = event.subscribe((args) => {\n try {\n handler(args);\n resolve('OK');\n }\n catch (e) {\n reject(e);\n }\n finally {\n sub.unsubscribe();\n clearTimeout(timeout);\n }\n });\n const timeout = setTimeout(() => {\n sub.unsubscribe();\n // eslint-disable-next-line prefer-promise-reject-errors\n reject(reason);\n }, ms);\n trigger();\n });\n });\n}\nexport function testEventAsync(event, handler, trigger, ms = 0, reason = `timeout`) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise((resolve, reject) => {\n const sub = event.subscribe((args) => {\n handler(args).then(() => {\n resolve('OK');\n }).catch((e) => {\n reject(e);\n }).finally(() => {\n sub.unsubscribe();\n clearTimeout(timeout);\n });\n });\n const timeout = setTimeout(() => {\n sub.unsubscribe();\n // eslint-disable-next-line prefer-promise-reject-errors\n reject(reason);\n }, ms);\n trigger();\n });\n });\n}\nexport function test(name, test, options) {\n if (tests[currentCategory] == undefined)\n tests[currentCategory] = {};\n if (tests[currentCategory].tests == undefined)\n tests[currentCategory].tests = [];\n tests[currentCategory].tests.push(new Test(currentCategory, name, test, options));\n}\n/* Tests two objects for equality, throws an exception if they are not equal. */\nexport function expect(actual, expected = true, error) {\n if (error)\n error = `${error}, `;\n else\n error = '';\n if (actual !== expected)\n throw new Error(`${error}Expected \"${expected}\", got \"${actual}\"`);\n}\nexport function expectFloat(actual, expected, tolerance = 0.001, error) {\n if ((actual === Number.POSITIVE_INFINITY && expected === Number.POSITIVE_INFINITY) ||\n (actual === Number.NEGATIVE_INFINITY && expected === Number.NEGATIVE_INFINITY) ||\n (actual === Number.NaN && expected === Number.NaN) || (isNaN(actual) && isNaN(expected)))\n return;\n const areEqual = Math.abs(actual - expected) < tolerance;\n expect(areEqual, true, `${error !== null && error !== void 0 ? error : ''} (tolerance = ${tolerance}; a = ${actual}, e = ${expected})`);\n if (!areEqual)\n throw new Error(`Expected ${expected}, got ${actual} (tolerance = ${tolerance})`);\n}\nexport function expectTable(actual, expected, error) {\n const expectedRowCount = expected.rowCount;\n const actualRowCount = actual.rowCount;\n expect(actualRowCount, expectedRowCount, `${error !== null && error !== void 0 ? error : ''}, row count`);\n for (const column of expected.columns) {\n const actualColumn = actual.columns.byName(column.name);\n if (actualColumn == null)\n throw new Error(`Column ${column.name} not found`);\n if (actualColumn.type != column.type)\n throw new Error(`Column ${column.name} type expected ${column.type} got ${actualColumn.type}`);\n for (let i = 0; i < expectedRowCount; i++) {\n const value = column.get(i);\n const actualValue = actualColumn.get(i);\n if (column.type == DG.TYPE.FLOAT)\n expectFloat(actualValue, value, 0.0001, error);\n else if (column.type == DG.TYPE.DATE_TIME)\n expect(actualValue.isSame(value), true, error);\n else\n expect(actualValue, value, error);\n }\n }\n}\nexport function expectObject(actual, expected) {\n for (const [expectedKey, expectedValue] of Object.entries(expected)) {\n if (!actual.hasOwnProperty(expectedKey))\n throw new Error(`Expected property \"${expectedKey}\" not found`);\n const actualValue = actual[expectedKey];\n if (actualValue instanceof Array && expectedValue instanceof Array)\n expectArray(actualValue, expectedValue);\n else if (actualValue instanceof Object && expectedValue instanceof Object)\n expectObject(actualValue, expectedValue);\n else if (Number.isFinite(actualValue) && Number.isFinite(expectedValue))\n expectFloat(actualValue, expectedValue);\n else if (actualValue != expectedValue)\n throw new Error(`Expected (${expectedValue}) for key '${expectedKey}', got (${actualValue})`);\n }\n}\nexport function expectArray(actual, expected) {\n const actualLength = actual.length;\n const expectedLength = expected.length;\n if (actualLength != expectedLength) {\n throw new Error(`Arrays are of different length: actual array length is ${actualLength} ` +\n `and expected array length is ${expectedLength}`);\n }\n for (let i = 0; i < actualLength; i++) {\n if (actual[i] instanceof Array && expected[i] instanceof Array)\n expectArray(actual[i], expected[i]);\n else if (actual[i] instanceof Object && expected[i] instanceof Object)\n expectObject(actual[i], expected[i]);\n else if (actual[i] != expected[i])\n throw new Error(`Expected ${expected[i]} at position ${i}, got ${actual[i]}`);\n }\n}\n/* Defines a test suite. */\nexport function category(category, tests_, options) {\n var _a;\n currentCategory = category;\n tests_();\n if (tests[currentCategory]) {\n tests[currentCategory].clear = (_a = options === null || options === void 0 ? void 0 : options.clear) !== null && _a !== void 0 ? _a : true;\n tests[currentCategory].timeout = options === null || options === void 0 ? void 0 : options.timeout;\n tests[currentCategory].benchmarks = options === null || options === void 0 ? void 0 : options.benchmarks;\n tests[currentCategory].stressTests = options === null || options === void 0 ? void 0 : options.stressTests;\n tests[currentCategory].owner = options === null || options === void 0 ? void 0 : options.owner;\n }\n}\n/* Defines a function to be executed before the tests in this category are executed. */\nexport function before(before) {\n if (tests[currentCategory] == undefined)\n tests[currentCategory] = {};\n tests[currentCategory].before = before;\n}\n/* Defines a function to be executed after the tests in this category are executed. */\nexport function after(after) {\n if (tests[currentCategory] == undefined)\n tests[currentCategory] = {};\n tests[currentCategory].after = after;\n}\nfunction addNamespace(s, f) {\n return s.replace(new RegExp(f.name, 'gi'), f.nqName);\n}\nexport function initAutoTests(package_, module) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n return __awaiter(this, void 0, void 0, function* () {\n const packageId = package_.id;\n if (wasRegistered[packageId])\n return;\n const moduleTests = module ? module.tests : tests;\n if (package_.name === 'DevTools' || (!!module && module._package.name === 'DevTools')) {\n for (const f of window.dartTests) {\n const arr = f.name.split(/\\s*\\|\\s*!/g);\n let name = (_a = arr.pop()) !== null && _a !== void 0 ? _a : f.name;\n let cat = arr.length ? coreCatName + ': ' + arr.join(': ') : coreCatName;\n let fullName = name.split(' | ');\n name = fullName[fullName.length - 1];\n fullName.unshift(cat);\n fullName.pop();\n cat = fullName.join(': ');\n if (moduleTests[cat] === undefined)\n moduleTests[cat] = { tests: [], clear: true };\n moduleTests[cat].tests.push(new Test(cat, name, f.test, { isAggregated: false, timeout: (_c = (_b = f.options) === null || _b === void 0 ? void 0 : _b.timeout) !== null && _c !== void 0 ? _c : STANDART_TIMEOUT, skipReason: (_d = f.options) === null || _d === void 0 ? void 0 : _d.skipReason, owner: (_e = f.options) === null || _e === void 0 ? void 0 : _e.owner, benchmark: (_g = (_f = f.options) === null || _f === void 0 ? void 0 : _f.benchmark) !== null && _g !== void 0 ? _g : false }));\n }\n }\n const moduleAutoTests = [];\n const moduleDemo = [];\n const moduleDetectors = [];\n const packFunctions = yield grok.dapi.functions.filter(`package.id = \"${packageId}\"`).list();\n const reg = new RegExp(/skip:\\s*([^,\\s]+)|wait:\\s*(\\d+)|cat:\\s*([^,\\s]+)|timeout:\\s*(\\d+)/g);\n for (const f of packFunctions) {\n const tests = f.options['test'];\n const demo = f.options['demoPath'];\n if ((tests && Array.isArray(tests) && tests.length)) {\n for (let i = 0; i < tests.length; i++) {\n const res = tests[i].matchAll(reg);\n const map = {};\n Array.from(res).forEach((arr) => {\n if (arr[0].startsWith('skip'))\n map['skip'] = arr[1];\n else if (arr[0].startsWith('wait'))\n map['wait'] = parseInt(arr[2]);\n else if (arr[0].startsWith('cat'))\n map['cat'] = arr[3];\n else if (arr[0].startsWith('timeout'))\n map['timeout'] = parseInt(arr[4]);\n });\n const test = new Test((_h = map.cat) !== null && _h !== void 0 ? _h : autoTestsCatName, tests.length === 1 ? f.name : `${f.name} ${i + 1}`, () => __awaiter(this, void 0, void 0, function* () {\n const res = yield grok.functions.eval(addNamespace(tests[i], f));\n if (map.wait)\n yield delay(map.wait);\n // eslint-disable-next-line no-throw-literal\n if (typeof res === 'boolean' && !res)\n throw `Failed: ${tests[i]}, expected true, got ${res}`;\n }), { skipReason: map.skip, timeout: DG.Test.isInBenchmark ? (_j = map.benchmarkTimeout) !== null && _j !== void 0 ? _j : BENCHMARK_TIMEOUT : (_k = map.timeout) !== null && _k !== void 0 ? _k : STANDART_TIMEOUT });\n if (map.cat) {\n const cat = map.cat;\n if (moduleTests[cat] === undefined)\n moduleTests[cat] = { tests: [], clear: true };\n // only before/after can be defined in ts files tests under the category\n if (!moduleTests[cat].tests)\n moduleTests[cat].tests = [];\n moduleTests[cat].tests.push(test);\n }\n else\n moduleAutoTests.push(test);\n }\n }\n if (demo) {\n const wait = f.options['demoWait'] ? parseInt(f.options['demoWait']) : undefined;\n const test = new Test(demoCatName, f.friendlyName, () => __awaiter(this, void 0, void 0, function* () {\n yield delay(300);\n grok.shell.clearLastError();\n yield f.apply();\n yield delay(wait ? wait : 2000);\n const unhandled = yield grok.shell.lastError;\n if (unhandled)\n throw new Error(unhandled);\n }), { skipReason: f.options['demoSkip'] });\n moduleDemo.push(test);\n }\n if (f.hasTag('semTypeDetector')) {\n let detectorsTestData = testData;\n if (f.options['testData']) {\n detectorsTestData = yield grok.data.files.openTable(`System:AppData/${package_.nqName}/${f.options['testData']}`);\n }\n const test = new Test(detectorsCatName, f.friendlyName, () => __awaiter(this, void 0, void 0, function* () {\n const arr = [];\n console.log(`System:AppData/${package_.nqName}/${f.options['testData']}`);\n for (const col of detectorsTestData.clone().columns) {\n const res = yield f.apply([col]);\n arr.push(res || col.semType);\n }\n const resArr = arr.filter((i) => i);\n expect(resArr.length, 1);\n if (f.options['testDataColumnName'])\n expect(resArr[0], f.options['testDataColumnName']);\n }), { skipReason: f.options['skipTest'] });\n moduleDetectors.push(test);\n }\n }\n wasRegistered[packageId] = true;\n if (moduleAutoTests.length > 0)\n moduleTests[autoTestsCatName] = { tests: moduleAutoTests, clear: true };\n if (moduleDemo.length > 0)\n moduleTests[demoCatName] = { tests: moduleDemo, clear: true };\n if (moduleDetectors.length > 0)\n moduleTests[detectorsCatName] = { tests: moduleDetectors, clear: false };\n });\n}\nfunction redefineConsole() {\n const logs = [];\n console.log = (...args) => {\n logs.push(...args);\n stdLog(...args);\n };\n console.info = (...args) => {\n logs.push(...args);\n stdInfo(...args);\n };\n console.warn = (...args) => {\n logs.push(...args);\n stdWarn(...args);\n };\n console.error = (...args) => {\n logs.push(...args);\n stdError(...args);\n };\n return logs;\n}\nfunction resetConsole() {\n console.log = stdLog;\n console.info = stdInfo;\n console.warn = stdWarn;\n console.error = stdError;\n}\nexport function runTests(options) {\n var _a, _b;\n var _c;\n return __awaiter(this, void 0, void 0, function* () {\n const package_ = (options === null || options === void 0 ? void 0 : options.nodeOptions) ? options.nodeOptions.package : grok.functions.getCurrentCall().func.package;\n if (!package_)\n throw new Error('Can\\'t run tests outside of the package');\n const match = (_a = package_.packageOwner) === null || _a === void 0 ? void 0 : _a.match(/<([^>]*)>/);\n const packageOwner = match ? match[1] : '';\n if (package_ != undefined)\n yield initAutoTests(package_);\n const results = [];\n console.log(`Running tests...`);\n console.log(options);\n options !== null && options !== void 0 ? options : (options = {});\n (_b = (_c = options).testContext) !== null && _b !== void 0 ? _b : (_c.testContext = new TestContext());\n grok.shell.clearLastError();\n const logs = redefineConsole();\n yield invokeTests(tests, options);\n for (let r of results) {\n r.result = r.result.toString().replace(/\"/g, '\\'');\n if (r.logs != undefined)\n r.logs = r.logs.toString().replace(/\"/g, '\\'');\n }\n return results;\n function invokeCategoryMethod(method, category) {\n return __awaiter(this, void 0, void 0, function* () {\n let invokationResult = undefined;\n try {\n if (method !== undefined) {\n yield timeout(() => __awaiter(this, void 0, void 0, function* () {\n yield method();\n }), 100000, `before ${category}: timeout error`);\n }\n }\n catch (x) {\n invokationResult = yield getResult(x);\n }\n return invokationResult;\n });\n }\n function invokeTestsInCategory(category, options, isTargetCategory) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;\n return __awaiter(this, void 0, void 0, function* () {\n let t = (_a = category.tests) !== null && _a !== void 0 ? _a : [];\n const res = [];\n // let memoryUsageBefore = (window?.performance as any)?.memory?.usedJSHeapSize;\n const widgetsBefore = getWidgetsCountSafe();\n if (category.clear) {\n let skippingTests = isTargetCategory && options.skipToTest != undefined;\n for (let i = 0; i < t.length; i++) {\n if (t[i].options) {\n if (((_b = t[i].options) === null || _b === void 0 ? void 0 : _b.benchmark) === undefined) {\n if (!t[i].options)\n t[i].options = {};\n t[i].options.benchmark = (_c = category.benchmarks) !== null && _c !== void 0 ? _c : false;\n }\n }\n let test = t[i];\n if (options.test)\n if (options.test.toLowerCase() !== test.name.toLowerCase())\n continue;\n if (skippingTests) {\n if ((options === null || options === void 0 ? void 0 : options.skipToTest) != undefined && test.name.toLowerCase().trim() === (options === null || options === void 0 ? void 0 : options.skipToTest.toLowerCase().trim())) {\n // Found the target test, stop skipping after this one\n skippingTests = false;\n }\n else\n continue;\n }\n if (test === null || test === void 0 ? void 0 : test.options) {\n test.options.owner = (_g = (_f = (_e = (_d = t[i].options) === null || _d === void 0 ? void 0 : _d.owner) !== null && _e !== void 0 ? _e : category === null || category === void 0 ? void 0 : category.owner) !== null && _f !== void 0 ? _f : packageOwner) !== null && _g !== void 0 ? _g : '';\n }\n // let isGBEnable = (window as any).gc && test.options?.skipReason == undefined;\n // console.log(`********${isGBEnable}`);\n // if (isGBEnable)\n // await (window as any).gc();\n // memoryUsageBefore = (window?.performance as any)?.memory?.usedJSHeapSize;\n let testRun = yield execTest(test, options === null || options === void 0 ? void 0 : options.test, logs, DG.Test.isInBenchmark ? (_j = (_h = t[i].options) === null || _h === void 0 ? void 0 : _h.benchmarkTimeout) !== null && _j !== void 0 ? _j : BENCHMARK_TIMEOUT : (_l = (_k = t[i].options) === null || _k === void 0 ? void 0 : _k.timeout) !== null && _l !== void 0 ? _l : STANDART_TIMEOUT, package_.name, options.verbose);\n // if (isGBEnable)\n // await (window as any).gc();\n if (testRun) {\n res.push(Object.assign(Object.assign({}, testRun), { widgetsDifference: getWidgetsCountSafe() - widgetsBefore }));\n // Return early if returnOnFail is set and test failed (but ignore failure for the skipToTest test itself)\n if (options.returnOnFail && options.skipToTest !== test.name && !testRun.success && !testRun.skipped)\n return res;\n }\n // res.push({ ...testRun, memoryDelta: (window?.performance as any)?.memory?.usedJSHeapSize - memoryUsageBefore, widgetsDelta: getWidgetsCountSafe() - widgetsBefore });\n if (!options.nodeOptions) {\n grok.shell.closeAll();\n DG.Balloon.closeAll();\n }\n }\n }\n else {\n let skippingTests = isTargetCategory && options.skipToTest != undefined;\n for (let i = 0; i < t.length; i++) {\n let test = t[i];\n if (options.test)\n if (options.test.toLowerCase() !== test.name.toLowerCase())\n continue;\n if (skippingTests) {\n if ((options === null || options === void 0 ? void 0 : options.skipToTest) != undefined && test.name.toLowerCase().trim() === (options === null || options === void 0 ? void 0 : options.skipToTest.toLowerCase().trim())) {\n // Found the target test, stop skipping after this one\n skippingTests = false;\n }\n continue; // Skip this test (including the target)\n }\n if (test === null || test === void 0 ? void 0 : test.options) {\n test.options.owner = (_q = (_p = (_o = (_m = t[i].options) === null || _m === void 0 ? void 0 : _m.owner) !== null && _o !== void 0 ? _o : category === null || category === void 0 ? void 0 : category.owner) !== null && _p !== void 0 ? _p : packageOwner) !== null && _q !== void 0 ? _q : '';\n }\n // let isGBEnable = (window as any).gc && test.options?.skipReason == undefined;\n // console.log(`********${isGBEnable}`);\n // if (isGBEnable)\n // await (window as any).gc();\n // memoryUsageBefore = (window?.performance as any)?.memory?.usedJSHeapSize;\n let testRun = yield execTest(test, options === null || options === void 0 ? void 0 : options.test, logs, DG.Test.isInBenchmark ? (_s = (_r = t[i].options) === null || _r === void 0 ? void 0 : _r.benchmarkTimeout) !== null && _s !== void 0 ? _s : BENCHMARK_TIMEOUT : (_t = t[i].options) === null || _t === void 0 ? void 0 : _t.timeout, package_.name, options.verbose);\n // if (isGBEnable)\n // await (window as any).gc();\n if (testRun) {\n res.push(Object.assign(Object.assign({}, testRun), { widgetsDifference: getWidgetsCountSafe() - widgetsBefore }));\n // Return early if returnOnFail is set and test failed (but ignore failure for the skipToTest test itself)\n if (options.returnOnFail && options.skipToTest !== test.name && !testRun.success && !testRun.skipped)\n return res;\n }\n // res.push({ ...testRun, memoryDelta: (window?.performance as any)?.memory?.usedJSHeapSize - memoryUsageBefore, widgetsDifference: getWidgetsCountSafe() - widgetsBefore });\n }\n }\n return res;\n });\n }\n function getWidgetsCountSafe() {\n var _a;\n if (typeof process !== 'undefined')\n return 0;\n let length = -1;\n try {\n length = DG.Widget.getAll().length;\n }\n catch (e) {\n console.warn((_a = e.message) !== null && _a !== void 0 ? _a : e);\n }\n return length;\n }\n function invokeTests(categoriesToInvoke, options) {\n var _a, _b, _c, _d, _e, _f;\n return __awaiter(this, void 0, void 0, function* () {\n try {\n let skippingCategories = (options === null || options === void 0 ? void 0 : options.skipToCategory) != undefined;\n let isTargetCategory = false;\n for (const [key, value] of Object.entries(categoriesToInvoke)) {\n if ((_a = options.exclude) === null || _a === void 0 ? void 0 : _a.some((c) => key.startsWith(c)))\n continue;\n if ((options === null || options === void 0 ? void 0 : options.category) != null && !key.toLowerCase().startsWith(options === null || options === void 0 ? void 0 : options.category.toLowerCase().trim()))\n continue;\n if (skippingCategories) {\n if (isTargetCategory)\n skippingCategories = false;\n else {\n if ((options === null || options === void 0 ? void 0 : options.skipToCategory) != null && key.toLowerCase().trim() === (options === null || options === void 0 ? void 0 : options.skipToCategory.toLowerCase().trim())) {\n isTargetCategory = true;\n }\n else {\n // Haven't found the target category yet, keep skipping\n continue;\n }\n }\n }\n //@ts-ignore\n const skipped = (_b = value.tests) === null || _b === void 0 ? void 0 : _b.every((t) => {\n var _a;\n return ((_a = t.options) === null || _a === void 0 ? void 0 : _a.skipReason)\n || ((options === null || options === void 0 ? void 0 : options.test) != null && options.test.toLowerCase() !== t.name.toLowerCase());\n });\n if (!skipped) {\n //@ts-ignore\n const skippedCount = ((_c = value.tests) !== null && _c !== void 0 ? _c : []).filter((t) => { var _a; return ((_a = t.options) === null || _a === void 0 ? void 0 : _a.skipReason) || ((options === null || options === void 0 ? void 0 : options.test) != null && options.test.toLowerCase() !== t.name.toLowerCase()); }).length;\n stdLog(`Package testing: Started {{${key}}}${skippedCount > 0 ? ` skipped {{${skippedCount}}}` : ''}`);\n value.beforeStatus = yield invokeCategoryMethod(value.before, key);\n }\n let t = (_d = value.tests) !== null && _d !== void 0 ? _d : [];\n if (options.stressTest) {\n t = t.filter((e) => { var _a; return (_a = e.options) === null || _a === void 0 ? void 0 : _a.stressTest; });\n t = shuffle(t);\n }\n if (((_f = (_e = options.tags) === null || _e === void 0 ? void 0 : _e.length) !== null && _f !== void 0 ? _f : 0) > 0) {\n t = t.filter((e) => { var _a, _b; return (_b = (_a = e.options) === null || _a === void 0 ? void 0 : _a.tags) === null || _b === void 0 ? void 0 : _b.some(tag => { var _a; return ((_a = options === null || options === void 0 ? void 0 : options.tags) !== null && _a !== void 0 ? _a : []).includes(tag); }); });\n }\n let res;\n if (value.beforeStatus) {\n res = Array.from(t.map((testElem) => {\n return {\n date: new Date().toISOString(),\n category: key,\n name: testElem.name,\n success: false,\n result: 'before() failed',\n ms: 0,\n skipped: false,\n logs: '',\n owner: packageOwner,\n package: package_.name,\n widgetsDifference: 0,\n flaking: DG.Test.isReproducing\n };\n }));\n res.forEach((test) => __awaiter(this, void 0, void 0, function* () { return yield grok.shell.reportTest('package', test); }));\n }\n else\n res = yield invokeTestsInCategory(value, options, skippingCategories);\n const data = res.filter((d) => d.result != 'skipped');\n if (!skipped)\n value.afterStatus = yield invokeCategoryMethod(value.after, key);\n // Clear after category\n // grok.shell.closeAll();\n // DG.Balloon.closeAll();\n if (value.afterStatus) {\n stdLog(`Package testing: Category after() {{${key}}} failed`);\n stdLog(`Package testing: Result for {{${key}}} after: ${value.afterStatus}`);\n data.push({\n date: new Date().toISOString(),\n category: key,\n name: 'after',\n success: false,\n result: value.afterStatus,\n ms: 0,\n skipped: false,\n logs: '',\n owner: packageOwner,\n package: package_.name,\n widgetsDifference: 0,\n flaking: DG.Test.isReproducing\n });\n }\n if (value.beforeStatus) {\n stdLog(`Package testing: Category before() {{${key}}} failed`);\n stdLog(`Package testing: Result for {{${key}}} before: ${value.beforeStatus}`);\n data.push({\n date: new Date().toISOString(),\n category: key,\n name: 'before',\n success: false,\n result: value.beforeStatus,\n ms: 0,\n skipped: false,\n logs: '',\n owner: packageOwner,\n package: package_.name,\n widgetsDifference: 0,\n flaking: DG.Test.isReproducing\n });\n }\n results.push(...data);\n // If returnOnFail is set and a test failed (other than skipToTest), stop processing more categories\n if (options.returnOnFail && data.some((d) => !d.success && !d.skipped && d.name !== options.skipToTest))\n break;\n }\n }\n finally {\n resetConsole();\n }\n if (options.testContext.catchUnhandled && (!DG.Test.isInBenchmark)) {\n yield delay(1000);\n const error = yield grok.shell.lastError;\n if (error != undefined) {\n const params = {\n logs: '',\n date: new Date().toISOString(),\n category: 'Unhandled exceptions',\n name: 'Exception',\n result: error !== null && error !== void 0 ? error : '',\n success: !error,\n ms: 0,\n skipped: false,\n owner: packageOwner !== null && packageOwner !== void 0 ? packageOwner : '',\n 'package': package_.name,\n widgetsDifference: 0\n };\n stdLog(`Package testing: Unhandled Exception: ${error}`);\n results.push(Object.assign(Object.assign({}, params), { 'flaking': DG.Test.isReproducing && !error }));\n params.package = package_.name;\n yield grok.shell.reportTest('package', params);\n }\n }\n });\n }\n });\n}\nfunction getResult(x) {\n return __awaiter(this, void 0, void 0, function* () {\n return `${x.toString()}\\n${x.stack ? (yield DG.Logger.translateStackTrace(x.stack)) : ''}`;\n });\n}\nfunction execTest(t, predicate, logs, testTimeout, packageName, verbose) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;\n return __awaiter(this, void 0, void 0, function* () {\n logs.length = 0;\n let r;\n let type = 'package';\n const filter = predicate != undefined && (t.name.toLowerCase() !== predicate.toLowerCase());\n let skip = ((_a = t.options) === null || _a === void 0 ? void 0 : _a.skipReason) || filter;\n let skipReason = filter ? 'skipped' : (_b = t.options) === null || _b === void 0 ? void 0 : _b.skipReason;\n if (DG.Test.isInBenchmark && !((_c = t.options) === null || _c === void 0 ? void 0 : _c.benchmark)) {\n stdLog(`Package testing: Skipped {{${t.category}}} {{${t.name}}} doesnt available in benchmark mode`);\n return undefined;\n }\n if (skip && !DG.Test.isInBenchmark)\n stdLog(`Package testing: Skipped {{${t.category}}} {{${t.name}}}`);\n if (!skip)\n stdLog(`Package testing: Started {{${t.category}}} {{${t.name}}}`);\n const start = Date.now();\n const startDate = new Date(start).toISOString();\n try {\n if (skip)\n r = { name: t.name, owner: (_e = (_d = t.options) === null || _d === void 0 ? void 0 : _d.owner) !== null && _e !== void 0 ? _e : '', category: t.category, logs: '', date: startDate, success: true, result: skipReason, ms: 0, skipped: true, package: packageName !== null && packageName !== void 0 ? packageName : '', flaking: DG.Test.isReproducing };\n else {\n let timeout_ = testTimeout !== null && testTimeout !== void 0 ? testTimeout : STANDART_TIMEOUT;\n if (DG.Test.isProfiling)\n console.profile(`${t.category}: ${t.name}`);\n r = { name: t.name, owner: (_g = (_f = t.options) === null || _f === void 0 ? void 0 : _f.owner) !== null && _g !== void 0 ? _g : '', category: t.category, logs: '', date: startDate, success: true, result: (_h = (yield timeout(t.test, timeout_)).toString()) !== null && _h !== void 0 ? _h : 'OK', ms: 0, skipped: false, package: packageName !== null && packageName !== void 0 ? packageName : '', flaking: DG.Test.isReproducing };\n if (DG.Test.isProfiling) {\n console.profileEnd(`${t.category}: ${t.name}`);\n grok.shell.info(`Profiling of ${t.category}: ${t.name} finished \\n Please ensure that you have opened DevTools (F12) / Performance panel before test starts.`);\n }\n }\n }\n catch (x) {\n stdError(x);\n r = { name: t.name, owner: (_k = (_j = t.options) === null || _j === void 0 ? void 0 : _j.owner) !== null && _k !== void 0 ? _k : '', category: t.category, logs: '', date: startDate, success: false, result: yield getResult(x), ms: 0, skipped: false, package: packageName !== null && packageName !== void 0 ? packageName : '', flaking: false };\n }\n if (((_l = t.options) === null || _l === void 0 ? void 0 : _l.isAggregated) && r.result.constructor === DG.DataFrame) {\n const col = r.result.col('success');\n if (col)\n r.success = col.stats.sum === col.length;\n if (!verbose) {\n const df = r.result;\n df.columns.remove('stack');\n df.rows.removeWhere((r) => r.get('success'));\n r.result = df;\n }\n r.result = r.result.toCsv();\n }\n r.logs = logs.join('\\n');\n r.ms = Date.now() - start;\n if (!skip)\n stdLog(`Package testing: Finished {{${t.category}}} {{${t.name}}} with {{${r.success ? 'success' : 'error'}}} for ${r.ms} ms`);\n if (!r.success) {\n stdLog(`Package testing: Result for {{${t.category}}} {{${t.name}}}: ${r.result}`);\n }\n r.category = t.category;\n r.name = t.name;\n r.owner = (_o = (_m = t.options) === null || _m === void 0 ? void 0 : _m.owner) !== null && _o !== void 0 ? _o : '';\n if (!filter) {\n let params = {\n 'success': r.success, 'result': r.result, 'ms': r.ms, 'date': r.date,\n 'skipped': r.skipped, 'category': t.category, 'name': t.name, 'logs': r.logs, 'owner': r.owner,\n 'flaking': DG.Test.isReproducing && r.success,\n 'package': r.package\n };\n if (r.result.constructor == Object) {\n const res = Object.keys(r.result).reduce((acc, k) => (Object.assign(Object.assign({}, acc), { ['result.' + k]: r.result[k] })), {});\n params = Object.assign(Object.assign({}, params), res);\n }\n if (params.result instanceof DG.DataFrame)\n params.result = JSON.stringify((_p = params.result) === null || _p === void 0 ? void 0 : _p.toJson()) || '';\n yield grok.shell.reportTest(type, params);\n }\n return r;\n });\n}\nexport function shuffle(array) {\n const newArr = array.slice();\n newArr.sort(() => Math.random() - 0.5);\n return newArr;\n}\n/* Waits [ms] milliseconds */\nexport function delay(ms) {\n return __awaiter(this, void 0, void 0, function* () {\n yield new Promise((r) => setTimeout(r, ms));\n });\n}\nexport function awaitCheck(checkHandler, error = 'Timeout exceeded', wait = 500, interval = 50) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n clearInterval(intervalId);\n reject(new Error(error));\n }, wait);\n // @ts-ignore\n const intervalId = setInterval(() => {\n if (checkHandler()) {\n clearInterval(intervalId);\n resolve(null);\n }\n }, interval);\n });\n });\n}\n// Returns test execution result or an error in case of timeout\nexport function timeout(func, testTimeout, timeoutReason = 'EXECUTION TIMEOUT') {\n return __awaiter(this, void 0, void 0, function* () {\n let timeout = null;\n const timeoutPromise = new Promise((_, reject) => {\n timeout = setTimeout(() => {\n // eslint-disable-next-line prefer-promise-reject-errors\n reject(timeoutReason);\n }, testTimeout);\n });\n try {\n return yield Promise.race([func(), timeoutPromise]);\n }\n finally {\n if (timeout)\n clearTimeout(timeout);\n }\n });\n}\nexport function isDialogPresent(dialogTitle) {\n const dialogs = DG.Dialog.getOpenDialogs();\n for (let i = 0; i < dialogs.length; i++) {\n if (dialogs[i].title == dialogTitle)\n return true;\n }\n return false;\n}\n/** Expects an asynchronous {@link action} to throw an exception. Use {@link check} to perform\n * deeper inspection of the exception if necessary.\n * @param {function(): Promise<void>} action\n * @param {function(any): boolean} check\n * @return {Promise<void>}\n */\nexport function expectExceptionAsync(action, check) {\n return __awaiter(this, void 0, void 0, function* () {\n let caught = false;\n let checked = false;\n try {\n yield action();\n }\n catch (e) {\n caught = true;\n checked = !check || check(e);\n }\n finally {\n if (!caught)\n throw new Error('An exception is expected but not thrown');\n if (!checked)\n throw new Error('An expected exception is thrown, but it does not satisfy the condition');\n }\n });\n}\nconst catDF = DG.DataFrame.fromColumns([DG.Column.fromStrings('col', ['val1', 'val2', 'val3'])]);\n/**\n * Universal test for viewers. It search viewers in DOM by tags: canvas, svg, img, input, h1, a\n * @param {string} v Viewer name\n * @param {_DG.DataFrame} df Dataframe to use. Should have at least 3 rows\n * @param {boolean} options.detectSemanticTypes Specify whether to detect semantic types or not\n * @param {boolean} options.readOnly If set to true, the dataframe will not be modified during the test\n * @param {boolean} options.arbitraryDfTest If set to false, test on arbitrary dataframe\n * (one categorical column) will not be performed\n * @param {object} options List of options (optional)\n * @return {Promise<void>} The test is considered successful if it completes without errors\n */\nexport function testViewer(v, df, options) {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n const packageName = (_a = options === null || options === void 0 ? void 0 : options.packageName) !== null && _a !== void 0 ? _a : '';\n if (options === null || options === void 0 ? void 0 : options.detectSemanticTypes)\n yield grok.data.detectSemanticTypes(df);\n const tv = grok.shell.addTableView(df);\n try {\n //1. Open, do nothing and close\n yield testViewerInternal(tv, v, packageName, grok.events.onViewerAdded);\n //in case viewer with async rendering - wait for render to complete\n if (options === null || options === void 0 ? void 0 : options.awaitViewer)\n yield testViewerInternal(tv, v, packageName, grok.events.onViewerAdded, undefined, options.awaitViewer);\n //2. Open viewer, run selection, filter, etc. and close\n if (!(options === null || options === void 0 ? void 0 : options.readOnly)) {\n yield testViewerInternal(tv, v, packageName, grok.events.onViewerAdded, selectFilterChangeCurrent);\n if (options === null || options === void 0 ? void 0 : options.awaitViewer)\n yield testViewerInternal(tv, v, packageName, grok.events.onViewerAdded, selectFilterChangeCurrent, options.awaitViewer);\n }\n //2. Open viewer, change options, save layout and close\n let propsAndLayout = null;\n propsAndLayout = yield testViewerInternal(tv, v, packageName, grok.events.onViewerAdded, changeOptionsSaveLayout);\n if (options === null || options === void 0 ? void 0 : options.awaitViewer)\n propsAndLayout = yield testViewerInternal(tv, v, packageName, grok.events.onViewerAdded, changeOptionsSaveLayout, options.awaitViewer);\n //3. Load layout\n yield testViewerInternal(tv, v, packageName, grok.events.onViewLayoutApplied, loadLayout, undefined, propsAndLayout === null || propsAndLayout === void 0 ? void 0 : propsAndLayout.layout, { savedProps: propsAndLayout === null || propsAndLayout === void 0 ? void 0 : propsAndLayout.savedProps });\n if (options === null || options === void 0 ? void 0 : options.awaitViewer)\n yield testViewerInternal(tv, v, packageName, grok.events.onViewLayoutApplied, loadLayout, options.awaitViewer, propsAndLayout === null || propsAndLayout === void 0 ? void 0 : propsAndLayout.layout, { savedProps: propsAndLayout === null || propsAndLayout === void 0 ? void 0 : propsAndLayout.savedProps });\n //4. Open viewer on arbitary dataset\n if ((options === null || options === void 0 ? void 0 : options.arbitraryDfTest) !== false) {\n tv.dataFrame = catDF;\n yield delay(50);\n yield testViewerInternal(tv, v, packageName, grok.events.onViewerAdded);\n if (options === null || options === void 0 ? void 0 : options.awaitViewer)\n yield testViewerInternal(tv, v, packageName, grok.events.onViewerAdded, undefined, options.awaitViewer);\n }\n //5. Call postponed filtering\n yield testViewerInternal(tv, v, packageName, grok.events.onViewerAdded, filterAsync);\n if (options === null || options === void 0 ? void 0 : options.awaitViewer)\n yield testViewerInternal(tv, v, packageName, grok.events.onViewerAdded, filterAsync, options.awaitViewer);\n }\n finally {\n // closeAll() is handling by common test workflow\n // grok.shell.closeAll();\n // DG.Balloon.closeAll();\n }\n });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBS0EsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTdDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLHlCQUF5QixFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdEksTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7QUFDL0IsTUFBTSxpQkFBaUIsR0FBRyxRQUFRLENBQUM7QUFFbkMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDekMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDM0MsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDM0MsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFFN0MsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUVkLEVBQUUsQ0FBQztBQUVQLE1BQU0sZ0JBQWdCLEdBQUcsWUFBWSxDQUFDO0FBQ3RDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUMzQixNQUFNLGdCQUFnQixHQUFHLFdBQVcsQ0FBQztBQUNyQyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUM7QUFDM0IsTUFBTSxhQUFhLEdBQStCLEVBQUUsQ0FBQztBQUNyRCxNQUFNLENBQUMsSUFBSSxlQUF1QixDQUFDO0FBRW5DLE1BQU0sS0FBVyxNQUFNLENBS3RCO0FBTEQsV0FBaUIsTUFBTTtJQUNyQixTQUFnQixPQUFPLENBQUMsS0FBVSxFQUFFLElBQWE7UUFDL0MsSUFBSSxLQUFLLElBQUksSUFBSTtZQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksY0FBYyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUhlLGNBQU8sVUFHdEIsQ0FBQTtBQUNILENBQUMsRUFMZ0IsTUFBTSxLQUFOLE1BQU0sUUFLdEI7QUEwQ0QsTUFBTSxPQUFPLFdBQVc7SUFNdEIsWUFBWSxjQUF3QixFQUFFLE1BQWdCLEVBQUUsWUFBc0I7UUFKOUUsbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFDdEIsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUNmLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBR25CLElBQUksY0FBYyxLQUFLLFNBQVM7WUFBRSxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUN2RSxJQUFJLE1BQU0sS0FBSyxTQUFTO1lBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDL0MsSUFBSSxZQUFZLEtBQUssU0FBUztZQUFFLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0lBQ25FLENBQUM7SUFBQSxDQUFDO0NBQ0g7QUFFRCxNQUFNLE9BQU8sSUFBSTtJQU1mLFlBQVksUUFBZ0IsRUFBRSxJQUFZLEVBQUUsSUFBd0IsRUFBRSxPQUFxQjs7UUFDekYsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsT0FBTyxhQUFQLE9BQU8sY0FBUCxPQUFPLElBQVAsT0FBTyxHQUFLLEVBQUUsRUFBQztRQUNmLE1BQUEsT0FBTyxDQUFDLE9BQU8sb0NBQWYsT0FBTyxDQUFDLE9BQU8sR0FBSyxnQkFBZ0IsRUFBQztRQUNyQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLEdBQXVCLEVBQUU7WUFDbkMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFPLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTs7Z0JBQzNDLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztnQkFDaEIsSUFBSTtvQkFDRixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUzt3QkFDbkIsUUFBUSxDQUFDO29CQUVYLElBQUksR0FBRyxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7b0JBQ3ZCLElBQUk7d0JBQ0YsTUFBTSxHQUFHLE1BQUEsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLFFBQVEsRUFBRSxtQ0FBSSxFQUFFLENBQUM7cUJBQ2hDO29CQUNELE9BQU8sQ0FBQyxFQUFFO3dCQUNSLE1BQU0sR0FBRyx5Q0FBeUMsQ0FBQzt3QkFDbkQsT0FBTyxDQUFDLEtBQUssQ0FBQyxrREFBa0QsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQztxQkFDcEc7aUJBQ0Y7Z0JBQUMsT0FBTyxDQUFNLEVBQUU7b0JBQ2YsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNYO2dCQUNELE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNsQixDQUFDLENBQUEsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFBLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sUUFBUTtDQWFwQjtBQUVELE1BQU0sT0FBTyx3QkFBd0I7Q0FFcEM7QUFFRCxNQUFNLE9BQU8sb0JBQW9CO0NBWWhDO0FBRUQsTUFBTSxVQUFnQixTQUFTLENBQUksS0FBb0IsRUFDckQsT0FBMEIsRUFBRSxPQUFtQixFQUFFLEtBQWEsQ0FBQyxFQUFFLFNBQWlCLFNBQVM7O1FBRTNGLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQU8sRUFBRSxFQUFFO2dCQUN0QyxJQUFJO29CQUNGLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDZCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ2Y7Z0JBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQ1YsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNYO3dCQUFTO29CQUNSLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDbEIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUN2QjtZQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDOUIsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNsQix3REFBd0Q7Z0JBQ3hELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDUCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUFBO0FBRUQsTUFBTSxVQUFnQixjQUFjLENBQUksS0FBb0IsRUFDMUQsT0FBbUMsRUFBRSxPQUFtQixFQUFFLEtBQWEsQ0FBQyxFQUFFLFNBQWlCLFNBQVM7O1FBRXBHLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQU8sRUFBRSxFQUFFO2dCQUN0QyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtvQkFDdEIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtvQkFDYixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ1osQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRTtvQkFDZCxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQ2xCLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDeEIsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUNILE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQzlCLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDbEIsd0RBQXdEO2dCQUN4RCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDakIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ1AsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FBQTtBQUVELE1BQU0sVUFBVSxJQUFJLENBQUMsSUFBWSxFQUFFLElBQXdCLEVBQUUsT0FBcUI7SUFDaEYsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksU0FBUztRQUNyQyxLQUFLLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQzlCLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEtBQUssSUFBSSxTQUFTO1FBQzNDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ3BDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxLQUFNLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDckYsQ0FBQztBQUVELGdGQUFnRjtBQUNoRixNQUFNLFVBQVUsTUFBTSxDQUFDLE1BQVcsRUFBRSxXQUFnQixJQUFJLEVBQUUsS0FBYztJQUN0RSxJQUFJLEtBQUs7UUFDUCxLQUFLLEdBQUcsR0FBRyxLQUFLLElBQUksQ0FBQzs7UUFDbEIsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNoQixJQUFJLE1BQU0sS0FBSyxRQUFRO1FBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLGFBQWEsUUFBUSxXQUFXLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDdkUsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsTUFBYyxFQUFFLFFBQWdCLEVBQUUsU0FBUyxHQUFHLEtBQUssRUFBRSxLQUFjO0lBQzdGLElBQUksQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLGlCQUFpQixJQUFJLFFBQVEsS0FBSyxNQUFNLENBQUMsaUJBQWlCLENBQUM7UUFDaEYsQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLGlCQUFpQixJQUFJLFFBQVEsS0FBSyxNQUFNLENBQUMsaUJBQWlCLENBQUM7UUFDOUUsQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLEdBQUcsSUFBSSxRQUFRLEtBQUssTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4RixPQUFPO0lBQ1QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsU0FBUyxDQUFDO0lBQ3pELE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLEdBQUcsS0FBSyxhQUFMLEtBQUssY0FBTCxLQUFLLEdBQUksRUFBRSxpQkFBaUIsU0FBUyxTQUFTLE1BQU0sU0FBUyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBQ3BHLElBQUksQ0FBQyxRQUFRO1FBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQyxZQUFZLFFBQVEsU0FBUyxNQUFNLGlCQUFpQixTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQ3RGLENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFDLE1BQXFCLEVBQUUsUUFBdUIsRUFBRSxLQUFjO0lBQ3hGLE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztJQUMzQyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxLQUFLLGFBQUwsS0FBSyxjQUFMLEtBQUssR0FBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBRXRFLEtBQUssTUFBTSxNQUFNLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRTtRQUNyQyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEQsSUFBSSxZQUFZLElBQUksSUFBSTtZQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLFVBQVUsTUFBTSxDQUFDLElBQUksWUFBWSxDQUFDLENBQUM7UUFDckQsSUFBSSxZQUFZLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJO1lBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxNQUFNLENBQUMsSUFBSSxrQkFBa0IsTUFBTSxDQUFDLElBQUksUUFBUSxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNqRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDekMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QixNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUs7Z0JBQzlCLFdBQVcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztpQkFDNUMsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUztnQkFDdkMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDOztnQkFFL0MsTUFBTSxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDckM7S0FDRjtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLE1BQThCLEVBQUUsUUFBZ0M7SUFDM0YsS0FBSyxNQUFNLENBQUMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7UUFDbkUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDO1lBQ3JDLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLFdBQVcsYUFBYSxDQUFDLENBQUM7UUFFbEUsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3hDLElBQUksV0FBVyxZQUFZLEtBQUssSUFBSSxhQUFhLFlBQVksS0FBSztZQUNoRSxXQUFXLENBQUMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxDQUFDO2FBQ3JDLElBQUksV0FBVyxZQUFZLE1BQU0sSUFBSSxhQUFhLFlBQVksTUFBTTtZQUN2RSxZQUFZLENBQUMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxDQUFDO2FBQ3RDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztZQUNyRSxXQUFXLENBQUMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxDQUFDO2FBQ3JDLElBQUksV0FBVyxJQUFJLGFBQWE7WUFDbkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxhQUFhLGFBQWEsY0FBYyxXQUFXLFdBQVcsV0FBVyxHQUFHLENBQUMsQ0FBQztLQUNqRztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFDLE1BQXNCLEVBQUUsUUFBd0I7SUFDMUUsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNuQyxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO0lBRXZDLElBQUksWUFBWSxJQUFJLGNBQWMsRUFBRTtRQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLDBEQUEwRCxZQUFZLEdBQUc7WUFDdkYsZ0NBQWdDLGNBQWMsRUFBRSxDQUFDLENBQUM7S0FDckQ7SUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3JDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxZQUFZLEtBQUssSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLFlBQVksS0FBSztZQUM1RCxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2pDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxZQUFZLE1BQU0sSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLFlBQVksTUFBTTtZQUNuRSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2xDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDL0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxZQUFZLFFBQVEsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ2pGO0FBQ0gsQ0FBQztBQUVELDJCQUEyQjtBQUMzQixNQUFNLFVBQVUsUUFBUSxDQUFDLFFBQWdCLEVBQUUsTUFBa0IsRUFBRSxPQUF5Qjs7SUFDdEYsZUFBZSxHQUFHLFFBQVEsQ0FBQztJQUMzQixNQUFNLEVBQUUsQ0FBQztJQUNULElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFO1FBQzFCLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxLQUFLLEdBQUcsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsS0FBSyxtQ0FBSSxJQUFJLENBQUM7UUFDdEQsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsT0FBTyxDQUFDO1FBQ2xELEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxVQUFVLEdBQUcsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFVBQVUsQ0FBQztRQUN4RCxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUMsV0FBVyxHQUFHLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxXQUFXLENBQUM7UUFDMUQsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEtBQUssR0FBRyxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsS0FBSyxDQUFDO0tBQy9DO0FBQ0gsQ0FBQztBQUVELHVGQUF1RjtBQUN2RixNQUFNLFVBQVUsTUFBTSxDQUFDLE1BQTJCO0lBQ2hELElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLFNBQVM7UUFDckMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUM5QixLQUFLLENBQUMsZUFBZSxDQUFDLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUN6QyxDQUFDO0FBRUQsc0ZBQXNGO0FBQ3RGLE1BQU0sVUFBVSxLQUFLLENBQUMsS0FBMEI7SUFDOUMsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksU0FBUztRQUNyQyxLQUFLLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQzlCLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3ZDLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxDQUFTLEVBQUUsQ0FBVztJQUMxQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdkQsQ0FBQztBQUVELE1BQU0sVUFBZ0IsYUFBYSxDQUFDLFFBQXFCLEVBQUUsTUFBWTs7O1FBQ3JFLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDOUIsSUFBSSxhQUFhLENBQUMsU0FBUyxDQUFDO1lBQUUsT0FBTztRQUNyQyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUNsRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssVUFBVSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsRUFBRTtZQUNyRixLQUFLLE1BQU0sQ0FBQyxJQUFVLE1BQU8sQ0FBQyxTQUFTLEVBQUU7Z0JBQ3ZDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLElBQUksR0FBRyxNQUFBLEdBQUcsQ0FBQyxHQUFHLEVBQUUsbUNBQUksQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDL0IsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7Z0JBQ3pFLElBQUksUUFBUSxHQUFhLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzNDLElBQUksR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDckMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdEIsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNmLEdBQUcsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMxQixJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTO29CQUNoQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztnQkFDaEQsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBQSxNQUFBLENBQUMsQ0FBQyxPQUFPLDBDQUFFLE9BQU8sbUNBQUksZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLE1BQUEsQ0FBQyxDQUFDLE9BQU8sMENBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFBLENBQUMsQ0FBQyxPQUFPLDBDQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBQSxNQUFBLENBQUMsQ0FBQyxPQUFPLDBDQUFFLFNBQVMsbUNBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQzFPO1NBQ0Y7UUFDRCxNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDM0IsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMzQixNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM3RixNQUFNLEdBQUcsR0FBRyxJQUFJLE1BQU0sQ0FBQyxvRUFBb0UsQ0FBQyxDQUFDO1FBQzdGLEtBQUssTUFBTSxDQUFDLElBQUksYUFBYSxFQUFFO1lBQzdCLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNuRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDckMsTUFBTSxHQUFHLEdBQUksS0FBSyxDQUFDLENBQUMsQ0FBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDL0MsTUFBTSxHQUFHLEdBQWdHLEVBQUUsQ0FBQztvQkFDNUcsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTt3QkFDOUIsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQzs0QkFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOzZCQUMvQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDOzRCQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7NkJBQzlELElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7NEJBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs2QkFDbEQsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQzs0QkFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUMzRSxDQUFDLENBQUMsQ0FBQztvQkFDSCxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFBLEdBQUcsQ0FBQyxHQUFHLG1DQUFJLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQVMsRUFBRTt3QkFDaEgsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ2pFLElBQUksR0FBRyxDQUFDLElBQUk7NEJBQUUsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNwQyw0Q0FBNEM7d0JBQzVDLElBQUksT0FBTyxHQUFHLEtBQUssU0FBUyxJQUFJLENBQUMsR0FBRzs0QkFBRSxNQUFNLFdBQVcsS0FBSyxDQUFDLENBQUMsQ0FBQyx3QkFBd0IsR0FBRyxFQUFFLENBQUM7b0JBQy9GLENBQUMsQ0FBQSxFQUFFLEVBQUUsVUFBVSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxNQUFBLEdBQUcsQ0FBQyxnQkFBZ0IsbUNBQUksaUJBQWlCLENBQUMsQ0FBQyxDQUFDLE1BQUEsR0FBRyxDQUFDLE9BQU8sbUNBQUksZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO29CQUMzSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUU7d0JBQ1gsTUFBTSxHQUFHLEdBQVcsR0FBRyxDQUFDLEdBQUcsQ0FBQzt3QkFDNUIsSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUzs0QkFDaEMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7d0JBRWhELHdFQUF3RTt3QkFDeEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLOzRCQUN6QixXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQzt3QkFDOUIsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7cUJBQ25DOzt3QkFFQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUM5QjthQUNGO1lBQ0QsSUFBSSxJQUFJLEVBQUU7Z0JBQ1IsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO2dCQUNqRixNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLFlBQVksRUFBRSxHQUFTLEVBQUU7b0JBQzVELE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNqQixJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUM1QixNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDaEIsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNoQyxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO29CQUM3QyxJQUFJLFNBQVM7d0JBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDL0IsQ0FBQyxDQUFBLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDdkI7WUFDRCxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsRUFBRTtnQkFDL0IsSUFBSSxpQkFBaUIsR0FBRyxRQUFRLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTtvQkFDekIsaUJBQWlCLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsa0JBQWtCLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ25IO2dCQUVELE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxZQUFZLEVBQUUsR0FBUyxFQUFFO29CQUNqRSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7b0JBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFFMUUsS0FBSyxNQUFNLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLEVBQUU7d0JBQ25ELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7d0JBQ2pDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztxQkFDOUI7b0JBQ0QsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3BDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUV6QixJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUM7d0JBQ2pDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7Z0JBRXZELENBQUMsQ0FBQSxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUMxQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzVCO1NBQ0Y7UUFDRCxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLElBQUksZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQzVCLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDMUUsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDdkIsV0FBVyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDaEUsSUFBSSxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDNUIsV0FBVyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQzs7Q0FDNUU7QUFFRCxTQUFTLGVBQWU7SUFDdEIsTUFBTSxJQUFJLEdBQVUsRUFBRSxDQUFDO0lBQ3ZCLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFO1FBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNuQixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUNsQixDQUFDLENBQUM7SUFDRixPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRTtRQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDbkIsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDbkIsQ0FBQyxDQUFDO0lBQ0YsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUU7UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ25CLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ25CLENBQUMsQ0FBQztJQUNGLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNuQixRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUNwQixDQUFDLENBQUM7SUFDRixPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCxTQUFTLFlBQVk7SUFDbkIsT0FBTyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7SUFDckIsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7SUFDdkIsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7SUFDdkIsT0FBTyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7QUFDM0IsQ0FBQztBQUVELE1BQU0sVUFBZ0IsUUFBUSxDQUFDLE9BQThCOzs7O1FBRTNELE1BQU0sUUFBUSxHQUFnQixDQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxXQUFXLEVBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDaEksSUFBSSxDQUFDLFFBQVE7WUFDWCxNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7UUFDN0QsTUFBTSxLQUFLLEdBQUcsTUFBQSxRQUFRLENBQUMsWUFBWSwwQ0FBRSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDeEQsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMzQyxJQUFJLFFBQVEsSUFBSSxTQUFTO1lBQ3ZCLE1BQU0sYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sT0FBTyxHQUF3QixFQUFFLENBQUM7UUFDeEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckIsT0FBTyxhQUFQLE9BQU8sY0FBUCxPQUFPLElBQVAsT0FBTyxHQUFLLEVBQUUsRUFBQztRQUNmLFlBQUEsT0FBUSxFQUFDLFdBQVcsdUNBQVgsV0FBVyxHQUFLLElBQUksV0FBVyxFQUFFLEVBQUM7UUFDM0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUM1QixNQUFNLElBQUksR0FBRyxlQUFlLEVBQUUsQ0FBQztRQUUvQixNQUFNLFdBQVcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFbEMsS0FBSyxJQUFJLENBQUMsSUFBSSxPQUFPLEVBQUU7WUFDckIsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLFNBQVM7Z0JBQ3JCLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ25EO1FBQ0QsT0FBTyxPQUFPLENBQUM7UUFFZixTQUFlLG9CQUFvQixDQUFDLE1BQXlDLEVBQUUsUUFBZ0I7O2dCQUM3RixJQUFJLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztnQkFDakMsSUFBSTtvQkFDRixJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUU7d0JBQ3hCLE1BQU0sT0FBTyxDQUFDLEdBQVMsRUFBRTs0QkFDdkIsTUFBTSxNQUFNLEVBQUUsQ0FBQzt3QkFDakIsQ0FBQyxDQUFBLEVBQUUsTUFBTSxFQUFFLFVBQVUsUUFBUSxpQkFBaUIsQ0FBQyxDQUFDO3FCQUNqRDtpQkFDRjtnQkFBQyxPQUFPLENBQU0sRUFBRTtvQkFDZixnQkFBZ0IsR0FBRyxNQUFNLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDdkM7Z0JBQ0QsT0FBTyxnQkFBZ0IsQ0FBQTtZQUN6QixDQUFDO1NBQUE7UUFFRCxTQUFlLHFCQUFxQixDQUFDLFFBQWtCLEVBQUUsT0FBNkIsRUFBRSxnQkFBeUI7OztnQkFDL0csSUFBSSxDQUFDLEdBQUcsTUFBQSxRQUFRLENBQUMsS0FBSyxtQ0FBSSxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sR0FBRyxHQUEwQixFQUFFLENBQUM7Z0JBQ3RDLGdGQUFnRjtnQkFDaEYsTUFBTSxhQUFhLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztnQkFFNUMsSUFBSSxRQUFRLENBQUMsS0FBSyxFQUFFO29CQUNoQixJQUFJLGFBQWEsR0FBRyxnQkFBZ0IsSUFBSSxPQUFPLENBQUMsVUFBVSxJQUFJLFNBQVMsQ0FBQztvQkFDMUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7d0JBRWpDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRTs0QkFDaEIsSUFBSSxDQUFBLE1BQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sMENBQUUsU0FBUyxNQUFLLFNBQVMsRUFBRTtnQ0FDekMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPO29DQUNmLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFBO2dDQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBUSxDQUFDLFNBQVMsR0FBRyxNQUFBLFFBQVEsQ0FBQyxVQUFVLG1DQUFJLEtBQUssQ0FBQzs2QkFDeEQ7eUJBQ0Y7d0JBQ0QsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNoQixJQUFJLE9BQU8sQ0FBQyxJQUFJOzRCQUNkLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtnQ0FDeEQsU0FBUzt3QkFDYixJQUFJLGFBQWEsRUFBRTs0QkFDakIsSUFBSSxDQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxVQUFVLEtBQUksU0FBUyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQUssT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFVBQVUsQ0FBQyxXQUFXLEdBQUcsSUFBSSxFQUFFLENBQUEsRUFBRTtnQ0FDbkgsc0RBQXNEO2dDQUN0RCxhQUFhLEdBQUcsS0FBSyxDQUFDOzZCQUN2Qjs7Z0NBQ0QsU0FBUzt5QkFDVjt3QkFDRCxJQUFJLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxPQUFPLEVBQUU7NEJBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLE1BQUEsTUFBQSxNQUFBLE1BQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sMENBQUUsS0FBSyxtQ0FBSSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsS0FBSyxtQ0FBSSxZQUFZLG1DQUFJLEVBQUUsQ0FBQzt5QkFDbkY7d0JBQ0QsZ0ZBQWdGO3dCQUNoRix3Q0FBd0M7d0JBQ3hDLGtCQUFrQjt3QkFDbEIsZ0NBQWdDO3dCQUNoQyw0RUFBNEU7d0JBQzVFLElBQUksT0FBTyxHQUFHLE1BQU0sUUFBUSxDQUN4QixJQUFJLEVBQ0osT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLElBQUksRUFDYixJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE1BQUEsTUFBQSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTywwQ0FBRSxnQkFBZ0IsbUNBQUksaUJBQWlCLENBQUMsQ0FBQyxDQUFDLE1BQUEsTUFBQSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTywwQ0FBRSxPQUFPLG1DQUFJLGdCQUFnQixFQUM3SCxRQUFRLENBQUMsSUFBSSxFQUNiLE9BQU8sQ0FBQyxPQUFPLENBQ2xCLENBQUM7d0JBRUYsa0JBQWtCO3dCQUNsQixnQ0FBZ0M7d0JBQ2hDLElBQUksT0FBTyxFQUFFOzRCQUNYLEdBQUcsQ0FBQyxJQUFJLGlDQUFNLE9BQU8sS0FBRyxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxHQUFHLGFBQWEsSUFBRyxDQUFDOzRCQUNwRiwwR0FBMEc7NEJBQzFHLElBQUksT0FBTyxDQUFDLFlBQVksSUFBSSxPQUFPLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU87Z0NBQ2xHLE9BQU8sR0FBRyxDQUFDO3lCQUNkO3dCQUNELHdLQUF3Szt3QkFFeEssSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUU7NEJBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7NEJBQ3RCLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7eUJBQ3ZCO3FCQUNGO2lCQUNGO3FCQUFNO29CQUNMLElBQUksYUFBYSxHQUFHLGdCQUFnQixJQUFJLE9BQU8sQ0FBQyxVQUFVLElBQUksU0FBUyxDQUFDO29CQUN4RSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTt3QkFDakMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNoQixJQUFJLE9BQU8sQ0FBQyxJQUFJOzRCQUNkLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtnQ0FDeEQsU0FBUzt3QkFDYixJQUFJLGFBQWEsRUFBRTs0QkFDakIsSUFBSSxDQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxVQUFVLEtBQUksU0FBUyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQUssT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFVBQVUsQ0FBQyxXQUFXLEdBQUcsSUFBSSxFQUFFLENBQUEsRUFBRTtnQ0FDbkgsc0RBQXNEO2dDQUN0RCxhQUFhLEdBQUcsS0FBSyxDQUFDOzZCQUN2Qjs0QkFDRCxTQUFTLENBQUUsd0NBQXdDO3lCQUNwRDt3QkFFRCxJQUFJLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxPQUFPLEVBQUU7NEJBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLE1BQUEsTUFBQSxNQUFBLE1BQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sMENBQUUsS0FBSyxtQ0FBSSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsS0FBSyxtQ0FBSSxZQUFZLG1DQUFJLEVBQUUsQ0FBQzt5QkFDbkY7d0JBQ0QsZ0ZBQWdGO3dCQUNoRix3Q0FBd0M7d0JBQ3hDLGtCQUFrQjt3QkFDbEIsZ0NBQWdDO3dCQUNoQyw0RUFBNEU7d0JBQzVFLElBQUksT0FBTyxHQUFHLE1BQU0sUUFBUSxDQUN4QixJQUFJLEVBQ0osT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLElBQUksRUFDYixJQUFJLEVBQ0osRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE1BQUEsTUFBQSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTywwQ0FBRSxnQkFBZ0IsbUNBQUksaUJBQWlCLENBQUMsQ0FBQyxDQUFDLE1BQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sMENBQUUsT0FBTyxFQUNuRyxRQUFRLENBQUMsSUFBSSxFQUNiLE9BQU8sQ0FBQyxPQUFPLENBQ2xCLENBQUM7d0JBRUYsa0JBQWtCO3dCQUNsQixnQ0FBZ0M7d0JBRWhDLElBQUksT0FBTyxFQUFFOzRCQUNYLEdBQUcsQ0FBQyxJQUFJLGlDQUFNLE9BQU8sS0FBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxHQUFHLGFBQWEsSUFBRyxDQUFDOzRCQUNuRiwwR0FBMEc7NEJBQzFHLElBQUksT0FBTyxDQUFDLFlBQVksSUFBSSxPQUFPLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU87Z0NBQ2xHLE9BQU8sR0FBRyxDQUFDO3lCQUNkO3dCQUNELDZLQUE2SztxQkFFOUs7aUJBQ0Y7Z0JBQ0QsT0FBTyxHQUFHLENBQUM7O1NBQ1o7UUFFRCxTQUFTLG1CQUFtQjs7WUFDMUIsSUFBSSxPQUFPLE9BQU8sS0FBSyxXQUFXO2dCQUNoQyxPQUFPLENBQUMsQ0FBQztZQUNYLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLElBQUk7Z0JBQ0YsTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDO2FBQ3BDO1lBQUMsT0FBTyxDQUFNLEVBQUU7Z0JBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFBLENBQUMsQ0FBQyxPQUFPLG1DQUFJLENBQUMsQ0FBQyxDQUFDO2FBQzlCO1lBQ0QsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUVELFNBQWUsV0FBVyxDQUFDLGtCQUErQyxFQUFFLE9BQTZCOzs7Z0JBQ3ZHLElBQUk7b0JBQ0YsSUFBSSxrQkFBa0IsR0FBRyxDQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxjQUFjLEtBQUksU0FBUyxDQUFDO29CQUM5RCxJQUFJLGdCQUFnQixHQUFHLEtBQUssQ0FBQztvQkFDN0IsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFBRTt3QkFDM0QsSUFBSSxNQUFBLE9BQU8sQ0FBQyxPQUFPLDBDQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDL0MsU0FBUzt3QkFDYixJQUFJLENBQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFFBQVEsS0FBSSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxRQUFRLENBQUMsV0FBVyxHQUFHLElBQUksRUFBRSxDQUFDOzRCQUNsRyxTQUFTO3dCQUViLElBQUksa0JBQWtCLEVBQUU7NEJBQ3BCLElBQUksZ0JBQWdCO2dDQUNoQixrQkFBa0IsR0FBRyxLQUFLLENBQUM7aUNBQzFCO2dDQUNELElBQUksQ0FBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsY0FBYyxLQUFJLElBQUksSUFBSSxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQUssT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLGNBQWMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxFQUFFLENBQUEsRUFBRTtvQ0FDOUcsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO2lDQUMzQjtxQ0FBTTtvQ0FDSCx1REFBdUQ7b0NBQ3ZELFNBQVM7aUNBQ1o7NkJBQ0o7eUJBQ0o7d0JBQ0QsWUFBWTt3QkFDWixNQUFNLE9BQU8sR0FBRyxNQUFBLEtBQUssQ0FBQyxLQUFLLDBDQUFFLEtBQUssQ0FBQyxDQUFDLENBQU8sRUFBRSxFQUFFOzs0QkFBQyxPQUFBLENBQUEsTUFBQSxDQUFDLENBQUMsT0FBTywwQ0FBRSxVQUFVO21DQUM5RCxDQUFDLENBQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLElBQUksS0FBSSxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUE7eUJBQUEsQ0FBQyxDQUFDO3dCQUV2RixJQUFJLENBQUMsT0FBTyxFQUFFOzRCQUNWLFlBQVk7NEJBQ1osTUFBTSxZQUFZLEdBQUcsQ0FBQyxNQUFBLEtBQUssQ0FBQyxLQUFLLG1DQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQU8sRUFBRSxFQUFFLFdBQzFELE9BQUEsQ0FBQSxNQUFBLENBQUMsQ0FBQyxPQUFPLDBDQUFFLFVBQVUsS0FBSSxDQUFDLENBQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLElBQUksS0FBSSxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUEsRUFBQSxDQUN4RyxDQUFDLE1BQU0sQ0FBQzs0QkFDVCxNQUFNLENBQUMsOEJBQThCLEdBQUcsS0FBSyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDOzRCQUN2RyxLQUFLLENBQUMsWUFBWSxHQUFHLE1BQU0sb0JBQW9CLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQzt5QkFDdEU7d0JBQ0QsSUFBSSxDQUFDLEdBQUcsTUFBQSxLQUFLLENBQUMsS0FBSyxtQ0FBSSxFQUFFLENBQUM7d0JBRTFCLElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRTs0QkFDcEIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxXQUFDLE9BQUEsTUFBQSxDQUFDLENBQUMsT0FBTywwQ0FBRSxVQUFVLENBQUEsRUFBQSxDQUFDLENBQUM7NEJBQzNDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7eUJBQ2xCO3dCQUVELElBQUksQ0FBQyxNQUFBLE1BQUEsT0FBTyxDQUFDLElBQUksMENBQUUsTUFBTSxtQ0FBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7NEJBQ2pDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsZUFDZixPQUFBLE1BQUEsTUFBQSxDQUFDLENBQUMsT0FBTywwQ0FBRSxJQUFJLDBDQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxXQUFDLE9BQUEsQ0FBQyxNQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxJQUFJLG1DQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQSxFQUFBLENBQUMsQ0FBQSxFQUFBLENBQ3BFLENBQUM7eUJBQ0w7d0JBRUQsSUFBSSxHQUF5QixDQUFDO3dCQUM5QixJQUFJLEtBQUssQ0FBQyxZQUFZLEVBQUU7NEJBQ3BCLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQ0FDaEMsT0FBTztvQ0FDSCxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7b0NBQzlCLFFBQVEsRUFBRSxHQUFHO29DQUNiLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSTtvQ0FDbkIsT0FBTyxFQUFFLEtBQUs7b0NBQ2QsTUFBTSxFQUFFLGlCQUFpQjtvQ0FDekIsRUFBRSxFQUFFLENBQUM7b0NBQ0wsT0FBTyxFQUFFLEtBQUs7b0NBQ2QsSUFBSSxFQUFFLEVBQUU7b0NBQ1IsS0FBSyxFQUFFLFlBQVk7b0NBQ25CLE9BQU8sRUFBRSxRQUFRLENBQUMsSUFBSTtvQ0FDdEIsaUJBQWlCLEVBQUUsQ0FBQztvQ0FDcEIsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYTtpQ0FDakMsQ0FBQzs0QkFDTixDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUNKLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBTyxJQUFJLEVBQUUsRUFBRSxnREFBQyxPQUFBLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFBLEdBQUEsQ0FBQyxDQUFDO3lCQUM3RTs7NEJBQ0csR0FBRyxHQUFHLE1BQU0scUJBQXFCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO3dCQUMxRSxNQUFNLElBQUksR0FBeUIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxTQUFTLENBQUMsQ0FBQzt3QkFFNUUsSUFBSSxDQUFDLE9BQU87NEJBQ1IsS0FBSyxDQUFDLFdBQVcsR0FBRyxNQUFNLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7d0JBRXJFLHVCQUF1Qjt3QkFDdkIseUJBQXlCO3dCQUN6Qix5QkFBeUI7d0JBQ3pCLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRTs0QkFDbkIsTUFBTSxDQUFDLHVDQUF1QyxHQUFHLFdBQVcsQ0FBQyxDQUFDOzRCQUM5RCxNQUFNLENBQUMsaUNBQWlDLEdBQUcsYUFBYSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQzs0QkFDN0UsSUFBSSxDQUFDLElBQUksQ0FBQztnQ0FDTixJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7Z0NBQzlCLFFBQVEsRUFBRSxHQUFHO2dDQUNiLElBQUksRUFBRSxPQUFPO2dDQUNiLE9BQU8sRUFBRSxLQUFLO2dDQUNkLE1BQU0sRUFBRSxLQUFLLENBQUMsV0FBVztnQ0FDekIsRUFBRSxFQUFFLENBQUM7Z0NBQ0wsT0FBTyxFQUFFLEtBQUs7Z0NBQ2QsSUFBSSxFQUFFLEVBQUU7Z0NBQ1IsS0FBSyxFQUFFLFlBQVk7Z0NBQ25CLE9BQU8sRUFBRSxRQUFRLENBQUMsSUFBSTtnQ0FDdEIsaUJBQWlCLEVBQUUsQ0FBQztnQ0FDcEIsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYTs2QkFDakMsQ0FBQyxDQUFDO3lCQUNOO3dCQUNELElBQUksS0FBSyxDQUFDLFlBQVksRUFBRTs0QkFDcEIsTUFBTSxDQUFDLHdDQUF3QyxHQUFHLFdBQVcsQ0FBQyxDQUFDOzRCQUMvRCxNQUFNLENBQUMsaUNBQWlDLEdBQUcsY0FBYyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQzs0QkFDL0UsSUFBSSxDQUFDLElBQUksQ0FBQztnQ0FDTixJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7Z0NBQzlCLFFBQVEsRUFBRSxHQUFHO2dDQUNiLElBQUksRUFBRSxRQUFRO2dDQUNkLE9BQU8sRUFBRSxLQUFLO2dDQUNkLE1BQU0sRUFBRSxLQUFLLENBQUMsWUFBWTtnQ0FDMUIsRUFBRSxFQUFFLENBQUM7Z0NBQ0wsT0FBTyxFQUFFLEtBQUs7Z0NBQ2QsSUFBSSxFQUFFLEVBQUU7Z0NBQ1IsS0FBSyxFQUFFLFlBQVk7Z0NBQ25CLE9BQU8sRUFBRSxRQUFRLENBQUMsSUFBSTtnQ0FDdEIsaUJBQWlCLEVBQUUsQ0FBQztnQ0FDcEIsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYTs2QkFDakMsQ0FBQyxDQUFDO3lCQUNOO3dCQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQzt3QkFFdEIsb0dBQW9HO3dCQUNwRyxJQUFJLE9BQU8sQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxVQUFVLENBQUM7NEJBQ25HLE1BQU07cUJBQ2I7aUJBQ0Y7d0JBQVM7b0JBQ1IsWUFBWSxFQUFFLENBQUM7aUJBQ2hCO2dCQUNELElBQUksT0FBTyxDQUFDLFdBQVksQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUU7b0JBQ25FLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNsQixNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO29CQUN6QyxJQUFJLEtBQUssSUFBSSxTQUFTLEVBQUU7d0JBQ3BCLE1BQU0sTUFBTSxHQUFROzRCQUNoQixJQUFJLEVBQUUsRUFBRTs0QkFDUixJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7NEJBQzlCLFFBQVEsRUFBRSxzQkFBc0I7NEJBQ2hDLElBQUksRUFBRSxXQUFXOzRCQUNqQixNQUFNLEVBQUUsS0FBSyxhQUFMLEtBQUssY0FBTCxLQUFLLEdBQUksRUFBRTs0QkFDbkIsT0FBTyxFQUFFLENBQUMsS0FBSzs0QkFDZixFQUFFLEVBQUUsQ0FBQzs0QkFDTCxPQUFPLEVBQUUsS0FBSzs0QkFDZCxLQUFLLEVBQUUsWUFBWSxhQUFaLFlBQVksY0FBWixZQUFZLEdBQUksRUFBRTs0QkFDekIsU0FBUyxFQUFFLFFBQVEsQ0FBQyxJQUFJOzRCQUN4QixpQkFBaUIsRUFBRSxDQUFDO3lCQUN2QixDQUFDO3dCQUNGLE1BQU0sQ0FBQyx5Q0FBeUMsS0FBSyxFQUFFLENBQUMsQ0FBQzt3QkFFekQsT0FBTyxDQUFDLElBQUksaUNBQUssTUFBTSxLQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLEtBQUssSUFBRSxDQUFDO3dCQUNoRSxNQUFPLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7d0JBQ3RDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO3FCQUNsRDtpQkFDRjs7U0FDRjs7Q0FDRjtBQUVELFNBQWUsU0FBUyxDQUFDLENBQU07O1FBQzdCLE9BQU8sR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQzdGLENBQUM7Q0FBQTtBQUVELFNBQWUsUUFBUSxDQUFDLENBQU8sRUFBRSxTQUE2QixFQUFFLElBQVcsRUFDekUsV0FBb0IsRUFBRSxXQUFvQixFQUFFLE9BQWlCOzs7UUFFN0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDaEIsSUFBSSxDQUFhLENBQUM7UUFDbEIsSUFBSSxJQUFJLEdBQVcsU0FBUyxDQUFDO1FBQzdCLE1BQU0sTUFBTSxHQUFHLFNBQVMsSUFBSSxTQUFTLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQzVGLElBQUksSUFBSSxHQUFHLENBQUEsTUFBQSxDQUFDLENBQUMsT0FBTywwQ0FBRSxVQUFVLEtBQUksTUFBTSxDQUFDO1FBQzNDLElBQUksVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFBLENBQUMsQ0FBQyxPQUFPLDBDQUFFLFVBQVUsQ0FBQztRQUU1RCxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQSxNQUFBLENBQUMsQ0FBQyxPQUFPLDBDQUFFLFNBQVMsQ0FBQSxFQUFFO1lBQ2xELE1BQU0sQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLFFBQVEsUUFBUSxDQUFDLENBQUMsSUFBSSx1Q0FBdUMsQ0FBQyxDQUFDO1lBQ3RHLE9BQU8sU0FBUyxDQUFDO1NBQ2xCO1FBRUQsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWE7WUFDaEMsTUFBTSxDQUFDLDhCQUE4QixDQUFDLENBQUMsUUFBUSxRQUFRLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxJQUFJO1lBQ1AsTUFBTSxDQUFDLDhCQUE4QixDQUFDLENBQUMsUUFBUSxRQUFRLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN6QixNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNoRCxJQUFJO1lBQ0YsSUFBSSxJQUFJO2dCQUNOLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBQyxNQUFBLE1BQUEsQ0FBQyxDQUFDLE9BQU8sMENBQUUsS0FBSyxtQ0FBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFVBQVcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFdBQVcsYUFBWCxXQUFXLGNBQVgsV0FBVyxHQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUMsQ0FBQztpQkFDdE47Z0JBQ0gsSUFBSSxRQUFRLEdBQUcsV0FBVyxhQUFYLFdBQVcsY0FBWCxXQUFXLEdBQUksZ0JBQWdCLENBQUM7Z0JBRS9DLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXO29CQUNyQixPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFFOUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFDLE1BQUEsTUFBQSxDQUFDLENBQUMsT0FBTywwQ0FBRSxLQUFLLG1DQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBQSxDQUFDLE1BQU0sT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsbUNBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRyxPQUFPLEVBQUUsV0FBVyxhQUFYLFdBQVcsY0FBWCxXQUFXLEdBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBQyxDQUFDO2dCQUVwUSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO29CQUN2QixPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFDL0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxRQUFRLEtBQUssQ0FBQyxDQUFDLElBQUksd0dBQXdHLENBQUMsQ0FBQztpQkFDaEs7YUFDRjtTQUNGO1FBQUMsT0FBTyxDQUFNLEVBQUU7WUFDZixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDWixDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUMsTUFBQSxNQUFBLENBQUMsQ0FBQyxPQUFPLDBDQUFFLEtBQUssbUNBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFdBQVcsYUFBWCxXQUFXLGNBQVgsV0FBVyxHQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLENBQUM7U0FDbk47UUFDRCxJQUFJLENBQUEsTUFBQSxDQUFDLENBQUMsT0FBTywwQ0FBRSxZQUFZLEtBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEtBQUssRUFBRSxDQUFDLFNBQVMsRUFBRTtZQUNwRSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNwQyxJQUFJLEdBQUc7Z0JBQ0wsQ0FBQyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsTUFBTSxDQUFDO1lBQzNDLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ1osTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztnQkFDcEIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzNCLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQzdDLENBQUMsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO2FBQ2Y7WUFDRCxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDN0I7UUFDRCxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxJQUFJO1lBQ1AsTUFBTSxDQUFDLCtCQUErQixDQUFDLENBQUMsUUFBUSxRQUFRLENBQUMsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLFVBQVUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDakksSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUU7WUFDWixNQUFNLENBQUMsaUNBQWlDLENBQUMsQ0FBQyxRQUFRLFFBQVEsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztTQUN0RjtRQUNELENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUN4QixDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDaEIsQ0FBQyxDQUFDLEtBQUssR0FBRyxNQUFBLE1BQUEsQ0FBQyxDQUFDLE9BQU8sMENBQUUsS0FBSyxtQ0FBSSxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLElBQUksTUFBTSxHQUFHO2dCQUNYLFNBQVMsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsSUFBSTtnQkFDcEUsU0FBUyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFLO2dCQUM5RixTQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDLE9BQU87Z0JBQzdDLFNBQVMsRUFBRSxDQUFDLENBQUMsT0FBTzthQUNyQixDQUFDO1lBQ0YsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsSUFBSSxNQUFNLEVBQUU7Z0JBQ2xDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLGlDQUFNLEdBQUcsS0FBRSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3JHLE1BQU0sbUNBQVEsTUFBTSxHQUFLLEdBQUcsQ0FBRSxDQUFDO2FBQ2hDO1lBRUQsSUFBSSxNQUFNLENBQUMsTUFBTSxZQUFZLEVBQUUsQ0FBQyxTQUFTO2dCQUN2QyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBQSxNQUFNLENBQUMsTUFBTSwwQ0FBRSxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNoRSxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztTQUMzQztRQUNELE9BQU8sQ0FBQyxDQUFDOztDQUNWO0FBRUQsTUFBTSxVQUFVLE9BQU8sQ0FBQyxLQUFZO0lBQ2xDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM3QixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUN2QyxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsNkJBQTZCO0FBQzdCLE1BQU0sVUFBZ0IsS0FBSyxDQUFDLEVBQVU7O1FBQ3BDLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5QyxDQUFDO0NBQUE7QUFFRCxNQUFNLFVBQWdCLFVBQVUsQ0FBQyxZQUEyQixFQUMxRCxRQUFnQixrQkFBa0IsRUFBRSxPQUFlLEdBQUcsRUFBRSxXQUFtQixFQUFFOztRQUM3RSxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUMxQixNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUMzQixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDVCxhQUFhO1lBQ2IsTUFBTSxVQUFVLEdBQVksV0FBVyxDQUFDLEdBQUcsRUFBRTtnQkFDM0MsSUFBSSxZQUFZLEVBQUUsRUFBRTtvQkFDbEIsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUMxQixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ2Y7WUFDSCxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FBQTtBQUVELCtEQUErRDtBQUMvRCxNQUFNLFVBQWdCLE9BQU8sQ0FBQyxJQUF3QixFQUFFLFdBQW1CLEVBQUUsZ0JBQXdCLG1CQUFtQjs7UUFDdEgsSUFBSSxPQUFPLEdBQVEsSUFBSSxDQUFDO1FBQ3hCLE1BQU0sY0FBYyxHQUFHLElBQUksT0FBTyxDQUFNLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3BELE9BQU8sR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUN4Qix3REFBd0Q7Z0JBQ3hELE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN4QixDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJO1lBQ0YsT0FBTyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO1NBQ3JEO2dCQUFTO1lBQ1IsSUFBSSxPQUFPO2dCQUNULFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUN6QjtJQUNILENBQUM7Q0FBQTtBQUVELE1BQU0sVUFBVSxlQUFlLENBQUMsV0FBbUI7SUFDakQsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUMzQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN2QyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksV0FBVztZQUNqQyxPQUFPLElBQUksQ0FBQztLQUNmO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQWdCLG9CQUFvQixDQUFDLE1BQTJCLEVBQ3BFLEtBQW1DOztRQUNuQyxJQUFJLE1BQU0sR0FBWSxLQUFLLENBQUM7UUFDNUIsSUFBSSxPQUFPLEdBQVksS0FBSyxDQUFDO1FBQzdCLElBQUk7WUFDRixNQUFNLE1BQU0sRUFBRSxDQUFDO1NBQ2hCO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ2QsT0FBTyxHQUFHLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM5QjtnQkFBUztZQUNSLElBQUksQ0FBQyxNQUFNO2dCQUNULE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQztZQUM3RCxJQUFJLENBQUMsT0FBTztnQkFDVixNQUFNLElBQUksS0FBSyxDQUFDLHdFQUF3RSxDQUFDLENBQUM7U0FDN0Y7SUFDSCxDQUFDO0NBQUE7QUFFRCxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFakc7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sVUFBZ0IsVUFBVSxDQUFDLENBQVMsRUFBRSxFQUFpQixFQUFFLE9BRzlEOzs7UUFDQyxNQUFNLFdBQVcsR0FBRyxNQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxXQUFXLG1DQUFJLEVBQUUsQ0FBQztRQUMvQyxJQUFJLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxtQkFBbUI7WUFDOUIsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXZDLElBQUk7WUFDRiwrQkFBK0I7WUFDL0IsTUFBTSxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3hFLG1FQUFtRTtZQUNuRSxJQUFJLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxXQUFXO2dCQUN0QixNQUFNLGtCQUFrQixDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLFNBQVMsRUFBRSxPQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFM0csdURBQXVEO1lBQ3ZELElBQUksQ0FBQyxDQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxRQUFRLENBQUEsRUFBRTtnQkFDdEIsTUFBTSxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO2dCQUNuRyxJQUFJLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxXQUFXO29CQUN0QixNQUFNLGtCQUFrQixDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLHlCQUF5QixFQUFFLE9BQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUM1SDtZQUVELHVEQUF1RDtZQUN2RCxJQUFJLGNBQWMsR0FBNEMsSUFBSSxDQUFDO1lBQ25FLGNBQWMsR0FBRyxNQUFNLGtCQUFrQixDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLHVCQUF1QixDQUFDLENBQUM7WUFDbEgsSUFBSSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsV0FBVztnQkFDdEIsY0FBYyxHQUFHLE1BQU0sa0JBQWtCLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQ3JGLHVCQUF1QixFQUFFLE9BQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQTtZQUVsRCxnQkFBZ0I7WUFDaEIsTUFBTSxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsY0FBYyxhQUFkLGNBQWMsdUJBQWQsY0FBYyxDQUFFLE1BQU0sRUFDekgsRUFBRSxVQUFVLEVBQUUsY0FBYyxhQUFkLGNBQWMsdUJBQWQsY0FBYyxDQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDOUMsSUFBSSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsV0FBVztnQkFDdEIsTUFBTSxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxPQUFRLENBQUMsV0FBVyxFQUM1RyxjQUFjLGFBQWQsY0FBYyx1QkFBZCxjQUFjLENBQUUsTUFBTSxFQUFFLEVBQUUsVUFBVSxFQUFFLGNBQWMsYUFBZCxjQUFjLHVCQUFkLGNBQWMsQ0FBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBRXhFLG9DQUFvQztZQUNwQyxJQUFJLENBQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLGVBQWUsTUFBSyxLQUFLLEVBQUU7Z0JBQ3RDLEVBQUUsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO2dCQUNyQixNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDaEIsTUFBTSxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUN4RSxJQUFJLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxXQUFXO29CQUN0QixNQUFNLGtCQUFrQixDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLFNBQVMsRUFBRSxPQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDNUc7WUFFRCw2QkFBNkI7WUFDN0IsTUFBTSxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUNyRixJQUFJLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxXQUFXO2dCQUN0QixNQUFNLGtCQUFrQixDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxPQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7U0FFOUc7Z0JBQVM7WUFDUixpREFBaUQ7WUFDakQseUJBQXlCO1lBQ3pCLHlCQUF5QjtTQUMxQjs7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlICogYXMgX2dyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0IHR5cGUgKiBhcyBfREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmRlY2xhcmUgbGV0IGdyb2s6IHR5cGVvZiBfZ3JvaywgREc6IHR5cGVvZiBfREc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRlc3REYXRhIH0gZnJvbSAnLi9kYXRhZnJhbWUtdXRpbHMnO1xuaW1wb3J0IFRpbWVvdXQgPSBOb2RlSlMuVGltZW91dDtcbmltcG9ydCB7IGNoYW5nZU9wdGlvbnNTYXZlTGF5b3V0LCBmaWx0ZXJBc3luYywgbG9hZExheW91dCwgc2VsZWN0RmlsdGVyQ2hhbmdlQ3VycmVudCwgdGVzdFZpZXdlckludGVybmFsIH0gZnJvbSAnLi90ZXN0LXZpZXdlci11dGlscyc7XG5cbmNvbnN0IFNUQU5EQVJUX1RJTUVPVVQgPSAzMDAwMDtcbmNvbnN0IEJFTkNITUFSS19USU1FT1VUID0gMTA4MDAwMDA7XG5cbmNvbnN0IHN0ZExvZyA9IGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSk7XG5jb25zdCBzdGRJbmZvID0gY29uc29sZS5pbmZvLmJpbmQoY29uc29sZSk7XG5jb25zdCBzdGRXYXJuID0gY29uc29sZS53YXJuLmJpbmQoY29uc29sZSk7XG5jb25zdCBzdGRFcnJvciA9IGNvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlKTtcblxuZXhwb3J0IGNvbnN0IHRlc3RzOiB7XG4gIFtrZXk6IHN0cmluZ106IENhdGVnb3J5XG59ID0ge307XG5cbmNvbnN0IGF1dG9UZXN0c0NhdE5hbWUgPSAnQXV0byBUZXN0cyc7XG5jb25zdCBkZW1vQ2F0TmFtZSA9ICdEZW1vJztcbmNvbnN0IGRldGVjdG9yc0NhdE5hbWUgPSAnRGV0ZWN0b3JzJztcbmNvbnN0IGNvcmVDYXROYW1lID0gJ0NvcmUnO1xuY29uc3Qgd2FzUmVnaXN0ZXJlZDogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gPSB7fTtcbmV4cG9ydCBsZXQgY3VycmVudENhdGVnb3J5OiBzdHJpbmc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgYXNzdXJlIHtcbiAgZXhwb3J0IGZ1bmN0aW9uIG5vdE51bGwodmFsdWU6IGFueSwgbmFtZT86IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke25hbWUgPT0gbnVsbCA/ICdWYWx1ZScgOiBuYW1lfSBub3QgZGVmaW5lZGApO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVzdE9wdGlvbnMge1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICBiZW5jaG1hcmtXYXJuVGltZW91dD86IG51bWJlcjtcbiAgYmVuY2htYXJrVGltZW91dD86IG51bWJlcjtcbiAgdW5oYW5kbGVkRXhjZXB0aW9uVGltZW91dD86IG51bWJlcjtcbiAgc2tpcFJlYXNvbj86IHN0cmluZztcbiAgaXNBZ2dyZWdhdGVkPzogYm9vbGVhbjtcbiAgYmVuY2htYXJrPzogYm9vbGVhbjtcbiAgc3RyZXNzVGVzdD86IGJvb2xlYW47XG4gIG93bmVyPzogc3RyaW5nO1xuICB0YWdzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVzdFJlc3VsdCB7XG4gIGRhdGU6IHN0cmluZztcbiAgY2F0ZWdvcnk6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBzdWNjZXNzOiBib29sZWFuO1xuICByZXN1bHQ6IGFueTtcbiAgbXM6IG51bWJlcjtcbiAgc2tpcHBlZDogYm9vbGVhbjtcbiAgbG9nczogc3RyaW5nO1xuICBvd25lcjogc3RyaW5nO1xuICBwYWNrYWdlOiBzdHJpbmc7XG4gIGZsYWtpbmc6IGJvb2xlYW47XG59XG5cblxuZXhwb3J0IGludGVyZmFjZSBUZXN0UmVzdWx0RXh0ZW5kZWQgZXh0ZW5kcyBUZXN0UmVzdWx0e1xuICB3aWRnZXRzRGlmZmVyZW5jZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhdGVnb3J5T3B0aW9ucyB7XG4gIGNsZWFyPzogYm9vbGVhbjtcbiAgdGltZW91dD86IG51bWJlcjtcbiAgYmVuY2htYXJrcz86IGJvb2xlYW47XG4gIHN0cmVzc1Rlc3RzPzogYm9vbGVhbjtcbiAgb3duZXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBUZXN0Q29udGV4dCB7XG4gIHN0cmVzc1Rlc3Q/OiBib29sZWFuO1xuICBjYXRjaFVuaGFuZGxlZCA9IHRydWU7XG4gIHJlcG9ydCA9IGZhbHNlO1xuICByZXR1cm5PbkZhaWwgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihjYXRjaFVuaGFuZGxlZD86IGJvb2xlYW4sIHJlcG9ydD86IGJvb2xlYW4sIHJldHVybk9uRmFpbD86IGJvb2xlYW4pIHtcbiAgICBpZiAoY2F0Y2hVbmhhbmRsZWQgIT09IHVuZGVmaW5lZCkgdGhpcy5jYXRjaFVuaGFuZGxlZCA9IGNhdGNoVW5oYW5kbGVkO1xuICAgIGlmIChyZXBvcnQgIT09IHVuZGVmaW5lZCkgdGhpcy5yZXBvcnQgPSByZXBvcnQ7XG4gICAgaWYgKHJldHVybk9uRmFpbCAhPT0gdW5kZWZpbmVkKSB0aGlzLnJldHVybk9uRmFpbCA9IHJldHVybk9uRmFpbDtcbiAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIFRlc3Qge1xuICB0ZXN0OiAoKSA9PiBQcm9taXNlPGFueT47XG4gIG5hbWU6IHN0cmluZztcbiAgY2F0ZWdvcnk6IHN0cmluZztcbiAgb3B0aW9ucz86IFRlc3RPcHRpb25zO1xuXG4gIGNvbnN0cnVjdG9yKGNhdGVnb3J5OiBzdHJpbmcsIG5hbWU6IHN0cmluZywgdGVzdDogKCkgPT4gUHJvbWlzZTxhbnk+LCBvcHRpb25zPzogVGVzdE9wdGlvbnMpIHtcbiAgICB0aGlzLmNhdGVnb3J5ID0gY2F0ZWdvcnk7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICBvcHRpb25zID8/PSB7fTtcbiAgICBvcHRpb25zLnRpbWVvdXQgPz89IFNUQU5EQVJUX1RJTUVPVVQ7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLnRlc3QgPSBhc3luYyAoKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoREcuVGVzdC5pc0luRGVidWcpXG4gICAgICAgICAgICBkZWJ1Z2dlcjtcblxuICAgICAgICAgIGxldCByZXMgPSBhd2FpdCB0ZXN0KCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlcz8udG9TdHJpbmcoKSA/PyAnJztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9ICdDYW5cXCd0IGNvbnZlcnQgdGVzdFxcJ3MgcmVzdWx0IHRvIHN0cmluZyc7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBDYW5cXCd0IGNvbnZlcnQgdGVzdFxcJ3MgcmVzdWx0IHRvIHN0cmluZyBpbiB0aGUgJHt0aGlzLmNhdGVnb3J5fToke3RoaXMubmFtZX0gdGVzdGApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENhdGVnb3J5IHtcbiAgdGVzdHM/OiBUZXN0W107XG4gIGJlZm9yZT86ICgpID0+IFByb21pc2U8dm9pZD47XG4gIGFmdGVyPzogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICBiZWZvcmVTdGF0dXM/OiBzdHJpbmc7XG4gIGFmdGVyU3RhdHVzPzogc3RyaW5nO1xuICBjbGVhcj86IGJvb2xlYW47XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIGJlbmNobWFya3M/OiBib29sZWFuO1xuICBiZW5jaG1hcmtUaW1lb3V0PzogbnVtYmVyO1xuICBzdHJlc3NUZXN0cz86IGJvb2xlYW47XG4gIG93bmVyPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgTm9kZVRlc3RFeGVjdXRpb25PcHRpb25zIHtcbiAgcGFja2FnZSE6IF9ERy5QYWNrYWdlO1xufVxuXG5leHBvcnQgY2xhc3MgVGVzdEV4ZWN1dGlvbk9wdGlvbnMge1xuICBjYXRlZ29yeT86IHN0cmluZztcbiAgdGVzdD86IHN0cmluZztcbiAgdGVzdENvbnRleHQ/OiBUZXN0Q29udGV4dDtcbiAgZXhjbHVkZT86IHN0cmluZ1tdO1xuICB2ZXJib3NlPzogYm9vbGVhbjtcbiAgc3RyZXNzVGVzdD86IGJvb2xlYW47XG4gIHRhZ3M/OiBzdHJpbmdbXTtcbiAgbm9kZU9wdGlvbnM/OiBOb2RlVGVzdEV4ZWN1dGlvbk9wdGlvbnM7XG4gIHNraXBUb0NhdGVnb3J5Pzogc3RyaW5nO1xuICBza2lwVG9UZXN0Pzogc3RyaW5nO1xuICByZXR1cm5PbkZhaWw/OiBib29sZWFuO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdEV2ZW50PFQ+KGV2ZW50OiBPYnNlcnZhYmxlPFQ+LFxuICBoYW5kbGVyOiAoYXJnczogVCkgPT4gdm9pZCwgdHJpZ2dlcjogKCkgPT4gdm9pZCwgbXM6IG51bWJlciA9IDAsIHJlYXNvbjogc3RyaW5nID0gYHRpbWVvdXRgXG4pOiBQcm9taXNlPGFueT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHN1YiA9IGV2ZW50LnN1YnNjcmliZSgoYXJnczogVCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaGFuZGxlcihhcmdzKTtcbiAgICAgICAgcmVzb2x2ZSgnT0snKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcHJvbWlzZS1yZWplY3QtZXJyb3JzXG4gICAgICByZWplY3QocmVhc29uKTtcbiAgICB9LCBtcyk7XG4gICAgdHJpZ2dlcigpO1xuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRlc3RFdmVudEFzeW5jPFQ+KGV2ZW50OiBPYnNlcnZhYmxlPFQ+LFxuICBoYW5kbGVyOiAoYXJnczogVCkgPT4gUHJvbWlzZTx2b2lkPiwgdHJpZ2dlcjogKCkgPT4gdm9pZCwgbXM6IG51bWJlciA9IDAsIHJlYXNvbjogc3RyaW5nID0gYHRpbWVvdXRgXG4pOiBQcm9taXNlPGFueT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHN1YiA9IGV2ZW50LnN1YnNjcmliZSgoYXJnczogVCkgPT4ge1xuICAgICAgaGFuZGxlcihhcmdzKS50aGVuKCgpID0+IHtcbiAgICAgICAgcmVzb2x2ZSgnT0snKTtcbiAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXByb21pc2UtcmVqZWN0LWVycm9yc1xuICAgICAgcmVqZWN0KHJlYXNvbik7XG4gICAgfSwgbXMpO1xuICAgIHRyaWdnZXIoKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0KG5hbWU6IHN0cmluZywgdGVzdDogKCkgPT4gUHJvbWlzZTxhbnk+LCBvcHRpb25zPzogVGVzdE9wdGlvbnMpOiB2b2lkIHtcbiAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPT0gdW5kZWZpbmVkKVxuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGVzdHMgPT0gdW5kZWZpbmVkKVxuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGVzdHMgPSBbXTtcbiAgdGVzdHNbY3VycmVudENhdGVnb3J5XS50ZXN0cyEucHVzaChuZXcgVGVzdChjdXJyZW50Q2F0ZWdvcnksIG5hbWUsIHRlc3QsIG9wdGlvbnMpKTtcbn1cblxuLyogVGVzdHMgdHdvIG9iamVjdHMgZm9yIGVxdWFsaXR5LCB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZXkgYXJlIG5vdCBlcXVhbC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3QoYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnkgPSB0cnVlLCBlcnJvcj86IHN0cmluZyk6IHZvaWQge1xuICBpZiAoZXJyb3IpXG4gICAgZXJyb3IgPSBgJHtlcnJvcn0sIGA7XG4gIGVsc2UgZXJyb3IgPSAnJztcbiAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpXG4gICAgdGhyb3cgbmV3IEVycm9yKGAke2Vycm9yfUV4cGVjdGVkIFwiJHtleHBlY3RlZH1cIiwgZ290IFwiJHthY3R1YWx9XCJgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdEZsb2F0KGFjdHVhbDogbnVtYmVyLCBleHBlY3RlZDogbnVtYmVyLCB0b2xlcmFuY2UgPSAwLjAwMSwgZXJyb3I/OiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKChhY3R1YWwgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSAmJiBleHBlY3RlZCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSB8fFxuICAgIChhY3R1YWwgPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSAmJiBleHBlY3RlZCA9PT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKSB8fFxuICAgIChhY3R1YWwgPT09IE51bWJlci5OYU4gJiYgZXhwZWN0ZWQgPT09IE51bWJlci5OYU4pIHx8IChpc05hTihhY3R1YWwpICYmIGlzTmFOKGV4cGVjdGVkKSkpXG4gICAgcmV0dXJuO1xuICBjb25zdCBhcmVFcXVhbCA9IE1hdGguYWJzKGFjdHVhbCAtIGV4cGVjdGVkKSA8IHRvbGVyYW5jZTtcbiAgZXhwZWN0KGFyZUVxdWFsLCB0cnVlLCBgJHtlcnJvciA/PyAnJ30gKHRvbGVyYW5jZSA9ICR7dG9sZXJhbmNlfTsgYSA9ICR7YWN0dWFsfSwgZSA9ICR7ZXhwZWN0ZWR9KWApO1xuICBpZiAoIWFyZUVxdWFsKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtleHBlY3RlZH0sIGdvdCAke2FjdHVhbH0gKHRvbGVyYW5jZSA9ICR7dG9sZXJhbmNlfSlgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdFRhYmxlKGFjdHVhbDogX0RHLkRhdGFGcmFtZSwgZXhwZWN0ZWQ6IF9ERy5EYXRhRnJhbWUsIGVycm9yPzogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IGV4cGVjdGVkUm93Q291bnQgPSBleHBlY3RlZC5yb3dDb3VudDtcbiAgY29uc3QgYWN0dWFsUm93Q291bnQgPSBhY3R1YWwucm93Q291bnQ7XG4gIGV4cGVjdChhY3R1YWxSb3dDb3VudCwgZXhwZWN0ZWRSb3dDb3VudCwgYCR7ZXJyb3IgPz8gJyd9LCByb3cgY291bnRgKTtcblxuICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBleHBlY3RlZC5jb2x1bW5zKSB7XG4gICAgY29uc3QgYWN0dWFsQ29sdW1uID0gYWN0dWFsLmNvbHVtbnMuYnlOYW1lKGNvbHVtbi5uYW1lKTtcbiAgICBpZiAoYWN0dWFsQ29sdW1uID09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbHVtbiAke2NvbHVtbi5uYW1lfSBub3QgZm91bmRgKTtcbiAgICBpZiAoYWN0dWFsQ29sdW1uLnR5cGUgIT0gY29sdW1uLnR5cGUpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbHVtbiAke2NvbHVtbi5uYW1lfSB0eXBlIGV4cGVjdGVkICR7Y29sdW1uLnR5cGV9IGdvdCAke2FjdHVhbENvbHVtbi50eXBlfWApO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXhwZWN0ZWRSb3dDb3VudDsgaSsrKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGNvbHVtbi5nZXQoaSk7XG4gICAgICBjb25zdCBhY3R1YWxWYWx1ZSA9IGFjdHVhbENvbHVtbi5nZXQoaSk7XG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT0gREcuVFlQRS5GTE9BVClcbiAgICAgICAgZXhwZWN0RmxvYXQoYWN0dWFsVmFsdWUsIHZhbHVlLCAwLjAwMDEsIGVycm9yKTtcbiAgICAgIGVsc2UgaWYgKGNvbHVtbi50eXBlID09IERHLlRZUEUuREFURV9USU1FKVxuICAgICAgICBleHBlY3QoYWN0dWFsVmFsdWUuaXNTYW1lKHZhbHVlKSwgdHJ1ZSwgZXJyb3IpO1xuICAgICAgZWxzZVxuICAgICAgICBleHBlY3QoYWN0dWFsVmFsdWUsIHZhbHVlLCBlcnJvcik7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RPYmplY3QoYWN0dWFsOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBleHBlY3RlZDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkge1xuICBmb3IgKGNvbnN0IFtleHBlY3RlZEtleSwgZXhwZWN0ZWRWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZXhwZWN0ZWQpKSB7XG4gICAgaWYgKCFhY3R1YWwuaGFzT3duUHJvcGVydHkoZXhwZWN0ZWRLZXkpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBwcm9wZXJ0eSBcIiR7ZXhwZWN0ZWRLZXl9XCIgbm90IGZvdW5kYCk7XG5cbiAgICBjb25zdCBhY3R1YWxWYWx1ZSA9IGFjdHVhbFtleHBlY3RlZEtleV07XG4gICAgaWYgKGFjdHVhbFZhbHVlIGluc3RhbmNlb2YgQXJyYXkgJiYgZXhwZWN0ZWRWYWx1ZSBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgZXhwZWN0QXJyYXkoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpO1xuICAgIGVsc2UgaWYgKGFjdHVhbFZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICYmIGV4cGVjdGVkVmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpXG4gICAgICBleHBlY3RPYmplY3QoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpO1xuICAgIGVsc2UgaWYgKE51bWJlci5pc0Zpbml0ZShhY3R1YWxWYWx1ZSkgJiYgTnVtYmVyLmlzRmluaXRlKGV4cGVjdGVkVmFsdWUpKVxuICAgICAgZXhwZWN0RmxvYXQoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpO1xuICAgIGVsc2UgaWYgKGFjdHVhbFZhbHVlICE9IGV4cGVjdGVkVmFsdWUpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICgke2V4cGVjdGVkVmFsdWV9KSBmb3Iga2V5ICcke2V4cGVjdGVkS2V5fScsIGdvdCAoJHthY3R1YWxWYWx1ZX0pYCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdEFycmF5KGFjdHVhbDogQXJyYXlMaWtlPGFueT4sIGV4cGVjdGVkOiBBcnJheUxpa2U8YW55Pikge1xuICBjb25zdCBhY3R1YWxMZW5ndGggPSBhY3R1YWwubGVuZ3RoO1xuICBjb25zdCBleHBlY3RlZExlbmd0aCA9IGV4cGVjdGVkLmxlbmd0aDtcblxuICBpZiAoYWN0dWFsTGVuZ3RoICE9IGV4cGVjdGVkTGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheXMgYXJlIG9mIGRpZmZlcmVudCBsZW5ndGg6IGFjdHVhbCBhcnJheSBsZW5ndGggaXMgJHthY3R1YWxMZW5ndGh9IGAgK1xuICAgICAgYGFuZCBleHBlY3RlZCBhcnJheSBsZW5ndGggaXMgJHtleHBlY3RlZExlbmd0aH1gKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0dWFsTGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYWN0dWFsW2ldIGluc3RhbmNlb2YgQXJyYXkgJiYgZXhwZWN0ZWRbaV0gaW5zdGFuY2VvZiBBcnJheSlcbiAgICAgIGV4cGVjdEFycmF5KGFjdHVhbFtpXSwgZXhwZWN0ZWRbaV0pO1xuICAgIGVsc2UgaWYgKGFjdHVhbFtpXSBpbnN0YW5jZW9mIE9iamVjdCAmJiBleHBlY3RlZFtpXSBpbnN0YW5jZW9mIE9iamVjdClcbiAgICAgIGV4cGVjdE9iamVjdChhY3R1YWxbaV0sIGV4cGVjdGVkW2ldKTtcbiAgICBlbHNlIGlmIChhY3R1YWxbaV0gIT0gZXhwZWN0ZWRbaV0pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7ZXhwZWN0ZWRbaV19IGF0IHBvc2l0aW9uICR7aX0sIGdvdCAke2FjdHVhbFtpXX1gKTtcbiAgfVxufVxuXG4vKiBEZWZpbmVzIGEgdGVzdCBzdWl0ZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXRlZ29yeShjYXRlZ29yeTogc3RyaW5nLCB0ZXN0c186ICgpID0+IHZvaWQsIG9wdGlvbnM/OiBDYXRlZ29yeU9wdGlvbnMpOiB2b2lkIHtcbiAgY3VycmVudENhdGVnb3J5ID0gY2F0ZWdvcnk7XG4gIHRlc3RzXygpO1xuICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSkge1xuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0uY2xlYXIgPSBvcHRpb25zPy5jbGVhciA/PyB0cnVlO1xuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGltZW91dCA9IG9wdGlvbnM/LnRpbWVvdXQ7XG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS5iZW5jaG1hcmtzID0gb3B0aW9ucz8uYmVuY2htYXJrcztcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLnN0cmVzc1Rlc3RzID0gb3B0aW9ucz8uc3RyZXNzVGVzdHM7XG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS5vd25lciA9IG9wdGlvbnM/Lm93bmVyO1xuICB9XG59XG5cbi8qIERlZmluZXMgYSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIHRlc3RzIGluIHRoaXMgY2F0ZWdvcnkgYXJlIGV4ZWN1dGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJlZm9yZShiZWZvcmU6ICgpID0+IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcbiAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPT0gdW5kZWZpbmVkKVxuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgdGVzdHNbY3VycmVudENhdGVnb3J5XS5iZWZvcmUgPSBiZWZvcmU7XG59XG5cbi8qIERlZmluZXMgYSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBhZnRlciB0aGUgdGVzdHMgaW4gdGhpcyBjYXRlZ29yeSBhcmUgZXhlY3V0ZWQuICovXG5leHBvcnQgZnVuY3Rpb24gYWZ0ZXIoYWZ0ZXI6ICgpID0+IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcbiAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPT0gdW5kZWZpbmVkKVxuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgdGVzdHNbY3VycmVudENhdGVnb3J5XS5hZnRlciA9IGFmdGVyO1xufVxuXG5mdW5jdGlvbiBhZGROYW1lc3BhY2Uoczogc3RyaW5nLCBmOiBfREcuRnVuYyk6IHN0cmluZyB7XG4gIHJldHVybiBzLnJlcGxhY2UobmV3IFJlZ0V4cChmLm5hbWUsICdnaScpLCBmLm5xTmFtZSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbml0QXV0b1Rlc3RzKHBhY2thZ2VfOiBfREcuUGFja2FnZSwgbW9kdWxlPzogYW55KSB7XG4gIGNvbnN0IHBhY2thZ2VJZCA9IHBhY2thZ2VfLmlkO1xuICBpZiAod2FzUmVnaXN0ZXJlZFtwYWNrYWdlSWRdKSByZXR1cm47XG4gIGNvbnN0IG1vZHVsZVRlc3RzID0gbW9kdWxlID8gbW9kdWxlLnRlc3RzIDogdGVzdHM7XG4gIGlmIChwYWNrYWdlXy5uYW1lID09PSAnRGV2VG9vbHMnIHx8ICghIW1vZHVsZSAmJiBtb2R1bGUuX3BhY2thZ2UubmFtZSA9PT0gJ0RldlRvb2xzJykpIHtcbiAgICBmb3IgKGNvbnN0IGYgb2YgKDxhbnk+d2luZG93KS5kYXJ0VGVzdHMpIHtcbiAgICAgIGNvbnN0IGFyciA9IGYubmFtZS5zcGxpdCgvXFxzKlxcfFxccyohL2cpO1xuICAgICAgbGV0IG5hbWUgPSBhcnIucG9wKCkgPz8gZi5uYW1lO1xuICAgICAgbGV0IGNhdCA9IGFyci5sZW5ndGggPyBjb3JlQ2F0TmFtZSArICc6ICcgKyBhcnIuam9pbignOiAnKSA6IGNvcmVDYXROYW1lO1xuICAgICAgbGV0IGZ1bGxOYW1lOiBzdHJpbmdbXSA9IG5hbWUuc3BsaXQoJyB8ICcpO1xuICAgICAgbmFtZSA9IGZ1bGxOYW1lW2Z1bGxOYW1lLmxlbmd0aCAtIDFdO1xuICAgICAgZnVsbE5hbWUudW5zaGlmdChjYXQpO1xuICAgICAgZnVsbE5hbWUucG9wKCk7XG4gICAgICBjYXQgPSBmdWxsTmFtZS5qb2luKCc6ICcpO1xuICAgICAgaWYgKG1vZHVsZVRlc3RzW2NhdF0gPT09IHVuZGVmaW5lZClcbiAgICAgICAgbW9kdWxlVGVzdHNbY2F0XSA9IHsgdGVzdHM6IFtdLCBjbGVhcjogdHJ1ZSB9O1xuICAgICAgbW9kdWxlVGVzdHNbY2F0XS50ZXN0cy5wdXNoKG5ldyBUZXN0KGNhdCwgbmFtZSwgZi50ZXN0LCB7IGlzQWdncmVnYXRlZDogZmFsc2UsIHRpbWVvdXQ6IGYub3B0aW9ucz8udGltZW91dCA/PyBTVEFOREFSVF9USU1FT1VULCBza2lwUmVhc29uOiBmLm9wdGlvbnM/LnNraXBSZWFzb24sIG93bmVyOiBmLm9wdGlvbnM/Lm93bmVyLCBiZW5jaG1hcms6IGYub3B0aW9ucz8uYmVuY2htYXJrID8/IGZhbHNlIH0pKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgbW9kdWxlQXV0b1Rlc3RzID0gW107XG4gIGNvbnN0IG1vZHVsZURlbW8gPSBbXTtcbiAgY29uc3QgbW9kdWxlRGV0ZWN0b3JzID0gW107XG4gIGNvbnN0IHBhY2tGdW5jdGlvbnMgPSBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmZpbHRlcihgcGFja2FnZS5pZCA9IFwiJHtwYWNrYWdlSWR9XCJgKS5saXN0KCk7XG4gIGNvbnN0IHJlZyA9IG5ldyBSZWdFeHAoL3NraXA6XFxzKihbXixcXHNdKyl8d2FpdDpcXHMqKFxcZCspfGNhdDpcXHMqKFteLFxcc10rKXx0aW1lb3V0OlxccyooXFxkKykvZyk7XG4gIGZvciAoY29uc3QgZiBvZiBwYWNrRnVuY3Rpb25zKSB7XG4gICAgY29uc3QgdGVzdHMgPSBmLm9wdGlvbnNbJ3Rlc3QnXTtcbiAgICBjb25zdCBkZW1vID0gZi5vcHRpb25zWydkZW1vUGF0aCddO1xuICAgIGlmICgodGVzdHMgJiYgQXJyYXkuaXNBcnJheSh0ZXN0cykgJiYgdGVzdHMubGVuZ3RoKSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCByZXMgPSAodGVzdHNbaV0gYXMgc3RyaW5nKS5tYXRjaEFsbChyZWcpO1xuICAgICAgICBjb25zdCBtYXA6IHsgc2tpcD86IHN0cmluZywgd2FpdD86IG51bWJlciwgY2F0Pzogc3RyaW5nLCB0aW1lb3V0PzogbnVtYmVyLCBiZW5jaG1hcmtUaW1lb3V0PzogbnVtYmVyIH0gPSB7fTtcbiAgICAgICAgQXJyYXkuZnJvbShyZXMpLmZvckVhY2goKGFycikgPT4ge1xuICAgICAgICAgIGlmIChhcnJbMF0uc3RhcnRzV2l0aCgnc2tpcCcpKSBtYXBbJ3NraXAnXSA9IGFyclsxXTtcbiAgICAgICAgICBlbHNlIGlmIChhcnJbMF0uc3RhcnRzV2l0aCgnd2FpdCcpKSBtYXBbJ3dhaXQnXSA9IHBhcnNlSW50KGFyclsyXSk7XG4gICAgICAgICAgZWxzZSBpZiAoYXJyWzBdLnN0YXJ0c1dpdGgoJ2NhdCcpKSBtYXBbJ2NhdCddID0gYXJyWzNdO1xuICAgICAgICAgIGVsc2UgaWYgKGFyclswXS5zdGFydHNXaXRoKCd0aW1lb3V0JykpIG1hcFsndGltZW91dCddID0gcGFyc2VJbnQoYXJyWzRdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHRlc3QgPSBuZXcgVGVzdChtYXAuY2F0ID8/IGF1dG9UZXN0c0NhdE5hbWUsIHRlc3RzLmxlbmd0aCA9PT0gMSA/IGYubmFtZSA6IGAke2YubmFtZX0gJHtpICsgMX1gLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZ3Jvay5mdW5jdGlvbnMuZXZhbChhZGROYW1lc3BhY2UodGVzdHNbaV0sIGYpKTtcbiAgICAgICAgICBpZiAobWFwLndhaXQpIGF3YWl0IGRlbGF5KG1hcC53YWl0KTtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdGhyb3ctbGl0ZXJhbFxuICAgICAgICAgIGlmICh0eXBlb2YgcmVzID09PSAnYm9vbGVhbicgJiYgIXJlcykgdGhyb3cgYEZhaWxlZDogJHt0ZXN0c1tpXX0sIGV4cGVjdGVkIHRydWUsIGdvdCAke3Jlc31gO1xuICAgICAgICB9LCB7IHNraXBSZWFzb246IG1hcC5za2lwLCB0aW1lb3V0OiBERy5UZXN0LmlzSW5CZW5jaG1hcmsgPyBtYXAuYmVuY2htYXJrVGltZW91dCA/PyBCRU5DSE1BUktfVElNRU9VVCA6IG1hcC50aW1lb3V0ID8/IFNUQU5EQVJUX1RJTUVPVVQgfSk7XG4gICAgICAgIGlmIChtYXAuY2F0KSB7XG4gICAgICAgICAgY29uc3QgY2F0OiBzdHJpbmcgPSBtYXAuY2F0O1xuICAgICAgICAgIGlmIChtb2R1bGVUZXN0c1tjYXRdID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBtb2R1bGVUZXN0c1tjYXRdID0geyB0ZXN0czogW10sIGNsZWFyOiB0cnVlIH07XG5cbiAgICAgICAgICAvLyBvbmx5IGJlZm9yZS9hZnRlciBjYW4gYmUgZGVmaW5lZCBpbiB0cyBmaWxlcyB0ZXN0cyB1bmRlciB0aGUgY2F0ZWdvcnlcbiAgICAgICAgICBpZiAoIW1vZHVsZVRlc3RzW2NhdF0udGVzdHMpXG4gICAgICAgICAgICBtb2R1bGVUZXN0c1tjYXRdLnRlc3RzID0gW107XG4gICAgICAgICAgbW9kdWxlVGVzdHNbY2F0XS50ZXN0cy5wdXNoKHRlc3QpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBtb2R1bGVBdXRvVGVzdHMucHVzaCh0ZXN0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRlbW8pIHtcbiAgICAgIGNvbnN0IHdhaXQgPSBmLm9wdGlvbnNbJ2RlbW9XYWl0J10gPyBwYXJzZUludChmLm9wdGlvbnNbJ2RlbW9XYWl0J10pIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgdGVzdCA9IG5ldyBUZXN0KGRlbW9DYXROYW1lLCBmLmZyaWVuZGx5TmFtZSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBkZWxheSgzMDApO1xuICAgICAgICBncm9rLnNoZWxsLmNsZWFyTGFzdEVycm9yKCk7XG4gICAgICAgIGF3YWl0IGYuYXBwbHkoKTtcbiAgICAgICAgYXdhaXQgZGVsYXkod2FpdCA/IHdhaXQgOiAyMDAwKTtcbiAgICAgICAgY29uc3QgdW5oYW5kbGVkID0gYXdhaXQgZ3Jvay5zaGVsbC5sYXN0RXJyb3I7XG4gICAgICAgIGlmICh1bmhhbmRsZWQpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHVuaGFuZGxlZCk7XG4gICAgICB9LCB7IHNraXBSZWFzb246IGYub3B0aW9uc1snZGVtb1NraXAnXSB9KTtcbiAgICAgIG1vZHVsZURlbW8ucHVzaCh0ZXN0KTtcbiAgICB9XG4gICAgaWYgKGYuaGFzVGFnKCdzZW1UeXBlRGV0ZWN0b3InKSkge1xuICAgICAgbGV0IGRldGVjdG9yc1Rlc3REYXRhID0gdGVzdERhdGE7XG4gICAgICBpZiAoZi5vcHRpb25zWyd0ZXN0RGF0YSddKSB7XG4gICAgICAgIGRldGVjdG9yc1Rlc3REYXRhID0gYXdhaXQgZ3Jvay5kYXRhLmZpbGVzLm9wZW5UYWJsZShgU3lzdGVtOkFwcERhdGEvJHtwYWNrYWdlXy5ucU5hbWV9LyR7Zi5vcHRpb25zWyd0ZXN0RGF0YSddfWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0ZXN0ID0gbmV3IFRlc3QoZGV0ZWN0b3JzQ2F0TmFtZSwgZi5mcmllbmRseU5hbWUsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgYXJyID0gW107XG4gICAgICAgIGNvbnNvbGUubG9nKGBTeXN0ZW06QXBwRGF0YS8ke3BhY2thZ2VfLm5xTmFtZX0vJHtmLm9wdGlvbnNbJ3Rlc3REYXRhJ119YCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBjb2wgb2YgZGV0ZWN0b3JzVGVzdERhdGEuY2xvbmUoKS5jb2x1bW5zKSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZi5hcHBseShbY29sXSk7XG4gICAgICAgICAgYXJyLnB1c2gocmVzIHx8IGNvbC5zZW1UeXBlKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXNBcnIgPSBhcnIuZmlsdGVyKChpKSA9PiBpKTtcbiAgICAgICAgZXhwZWN0KHJlc0Fyci5sZW5ndGgsIDEpO1xuXG4gICAgICAgIGlmIChmLm9wdGlvbnNbJ3Rlc3REYXRhQ29sdW1uTmFtZSddKVxuICAgICAgICAgIGV4cGVjdChyZXNBcnJbMF0sIGYub3B0aW9uc1sndGVzdERhdGFDb2x1bW5OYW1lJ10pO1xuXG4gICAgICB9LCB7IHNraXBSZWFzb246IGYub3B0aW9uc1snc2tpcFRlc3QnXSB9KTtcbiAgICAgIG1vZHVsZURldGVjdG9ycy5wdXNoKHRlc3QpO1xuICAgIH1cbiAgfVxuICB3YXNSZWdpc3RlcmVkW3BhY2thZ2VJZF0gPSB0cnVlO1xuICBpZiAobW9kdWxlQXV0b1Rlc3RzLmxlbmd0aCA+IDApXG4gICAgbW9kdWxlVGVzdHNbYXV0b1Rlc3RzQ2F0TmFtZV0gPSB7IHRlc3RzOiBtb2R1bGVBdXRvVGVzdHMsIGNsZWFyOiB0cnVlIH07XG4gIGlmIChtb2R1bGVEZW1vLmxlbmd0aCA+IDApXG4gICAgbW9kdWxlVGVzdHNbZGVtb0NhdE5hbWVdID0geyB0ZXN0czogbW9kdWxlRGVtbywgY2xlYXI6IHRydWUgfTtcbiAgaWYgKG1vZHVsZURldGVjdG9ycy5sZW5ndGggPiAwKVxuICAgIG1vZHVsZVRlc3RzW2RldGVjdG9yc0NhdE5hbWVdID0geyB0ZXN0czogbW9kdWxlRGV0ZWN0b3JzLCBjbGVhcjogZmFsc2UgfTtcbn1cblxuZnVuY3Rpb24gcmVkZWZpbmVDb25zb2xlKCk6IGFueVtdIHtcbiAgY29uc3QgbG9nczogYW55W10gPSBbXTtcbiAgY29uc29sZS5sb2cgPSAoLi4uYXJncykgPT4ge1xuICAgIGxvZ3MucHVzaCguLi5hcmdzKTtcbiAgICBzdGRMb2coLi4uYXJncyk7XG4gIH07XG4gIGNvbnNvbGUuaW5mbyA9ICguLi5hcmdzKSA9PiB7XG4gICAgbG9ncy5wdXNoKC4uLmFyZ3MpO1xuICAgIHN0ZEluZm8oLi4uYXJncyk7XG4gIH07XG4gIGNvbnNvbGUud2FybiA9ICguLi5hcmdzKSA9PiB7XG4gICAgbG9ncy5wdXNoKC4uLmFyZ3MpO1xuICAgIHN0ZFdhcm4oLi4uYXJncyk7XG4gIH07XG4gIGNvbnNvbGUuZXJyb3IgPSAoLi4uYXJncykgPT4ge1xuICAgIGxvZ3MucHVzaCguLi5hcmdzKTtcbiAgICBzdGRFcnJvciguLi5hcmdzKTtcbiAgfTtcbiAgcmV0dXJuIGxvZ3M7XG59XG5cbmZ1bmN0aW9uIHJlc2V0Q29uc29sZSgpOiB2b2lkIHtcbiAgY29uc29sZS5sb2cgPSBzdGRMb2c7XG4gIGNvbnNvbGUuaW5mbyA9IHN0ZEluZm87XG4gIGNvbnNvbGUud2FybiA9IHN0ZFdhcm47XG4gIGNvbnNvbGUuZXJyb3IgPSBzdGRFcnJvcjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blRlc3RzKG9wdGlvbnM/OiBUZXN0RXhlY3V0aW9uT3B0aW9ucykgOiBQcm9taXNlPFRlc3RSZXN1bHRFeHRlbmRlZFtdPntcblxuICBjb25zdCBwYWNrYWdlXzogX0RHLlBhY2thZ2UgPSBvcHRpb25zPy5ub2RlT3B0aW9ucyA/IG9wdGlvbnMubm9kZU9wdGlvbnMucGFja2FnZSA6IGdyb2suZnVuY3Rpb25zLmdldEN1cnJlbnRDYWxsKCkuZnVuYy5wYWNrYWdlO1xuICBpZiAoIXBhY2thZ2VfKVxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBydW4gdGVzdHMgb3V0c2lkZSBvZiB0aGUgcGFja2FnZScpO1xuICBjb25zdCBtYXRjaCA9IHBhY2thZ2VfLnBhY2thZ2VPd25lcj8ubWF0Y2goLzwoW14+XSopPi8pO1xuICBjb25zdCBwYWNrYWdlT3duZXIgPSBtYXRjaCA/IG1hdGNoWzFdIDogJyc7XG4gIGlmIChwYWNrYWdlXyAhPSB1bmRlZmluZWQpXG4gICAgYXdhaXQgaW5pdEF1dG9UZXN0cyhwYWNrYWdlXyk7XG4gIGNvbnN0IHJlc3VsdHM6VGVzdFJlc3VsdEV4dGVuZGVkW10gPSBbXTtcbiAgY29uc29sZS5sb2coYFJ1bm5pbmcgdGVzdHMuLi5gKTtcbiAgY29uc29sZS5sb2cob3B0aW9ucyk7XG4gIG9wdGlvbnMgPz89IHt9O1xuICBvcHRpb25zIS50ZXN0Q29udGV4dCA/Pz0gbmV3IFRlc3RDb250ZXh0KCk7XG4gIGdyb2suc2hlbGwuY2xlYXJMYXN0RXJyb3IoKTtcbiAgY29uc3QgbG9ncyA9IHJlZGVmaW5lQ29uc29sZSgpO1xuXG4gIGF3YWl0IGludm9rZVRlc3RzKHRlc3RzLCBvcHRpb25zKTtcblxuICBmb3IgKGxldCByIG9mIHJlc3VsdHMpIHtcbiAgICByLnJlc3VsdCA9IHIucmVzdWx0LnRvU3RyaW5nKCkucmVwbGFjZSgvXCIvZywgJ1xcJycpO1xuICAgIGlmIChyLmxvZ3MgIT0gdW5kZWZpbmVkKVxuICAgICAgci5sb2dzID0gci5sb2dzIS50b1N0cmluZygpLnJlcGxhY2UoL1wiL2csICdcXCcnKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0cztcblxuICBhc3luYyBmdW5jdGlvbiBpbnZva2VDYXRlZ29yeU1ldGhvZChtZXRob2Q6ICgoKSA9PiBQcm9taXNlPHZvaWQ+KSB8IHVuZGVmaW5lZCwgY2F0ZWdvcnk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgbGV0IGludm9rYXRpb25SZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChtZXRob2QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhd2FpdCB0aW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCBtZXRob2QoKTtcbiAgICAgICAgfSwgMTAwMDAwLCBgYmVmb3JlICR7Y2F0ZWdvcnl9OiB0aW1lb3V0IGVycm9yYCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoeDogYW55KSB7XG4gICAgICBpbnZva2F0aW9uUmVzdWx0ID0gYXdhaXQgZ2V0UmVzdWx0KHgpO1xuICAgIH1cbiAgICByZXR1cm4gaW52b2thdGlvblJlc3VsdFxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gaW52b2tlVGVzdHNJbkNhdGVnb3J5KGNhdGVnb3J5OiBDYXRlZ29yeSwgb3B0aW9uczogVGVzdEV4ZWN1dGlvbk9wdGlvbnMsIGlzVGFyZ2V0Q2F0ZWdvcnk6IGJvb2xlYW4pOiBQcm9taXNlPFRlc3RSZXN1bHRFeHRlbmRlZFtdPiB7XG4gICAgbGV0IHQgPSBjYXRlZ29yeS50ZXN0cyA/PyBbXTtcbiAgICBjb25zdCByZXMgOiBUZXN0UmVzdWx0RXh0ZW5kZWRbXSA9IFtdO1xuICAgIC8vIGxldCBtZW1vcnlVc2FnZUJlZm9yZSA9ICh3aW5kb3c/LnBlcmZvcm1hbmNlIGFzIGFueSk/Lm1lbW9yeT8udXNlZEpTSGVhcFNpemU7XG4gICAgY29uc3Qgd2lkZ2V0c0JlZm9yZSA9IGdldFdpZGdldHNDb3VudFNhZmUoKTtcblxuICAgIGlmIChjYXRlZ29yeS5jbGVhcikge1xuICAgICAgICBsZXQgc2tpcHBpbmdUZXN0cyA9IGlzVGFyZ2V0Q2F0ZWdvcnkgJiYgb3B0aW9ucy5za2lwVG9UZXN0ICE9IHVuZGVmaW5lZDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdC5sZW5ndGg7IGkrKykge1xuXG4gICAgICAgIGlmICh0W2ldLm9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAodFtpXS5vcHRpb25zPy5iZW5jaG1hcmsgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKCF0W2ldLm9wdGlvbnMpXG4gICAgICAgICAgICAgIHRbaV0ub3B0aW9ucyA9IHt9XG4gICAgICAgICAgICB0W2ldLm9wdGlvbnMhLmJlbmNobWFyayA9IGNhdGVnb3J5LmJlbmNobWFya3MgPz8gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCB0ZXN0ID0gdFtpXTtcbiAgICAgICAgaWYgKG9wdGlvbnMudGVzdClcbiAgICAgICAgICBpZiAob3B0aW9ucy50ZXN0LnRvTG93ZXJDYXNlKCkgIT09IHRlc3QubmFtZS50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGlmIChza2lwcGluZ1Rlc3RzKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnM/LnNraXBUb1Rlc3QgIT0gdW5kZWZpbmVkICYmIHRlc3QubmFtZS50b0xvd2VyQ2FzZSgpLnRyaW0oKSA9PT0gb3B0aW9ucz8uc2tpcFRvVGVzdC50b0xvd2VyQ2FzZSgpLnRyaW0oKSkge1xuICAgICAgICAgICAgLy8gRm91bmQgdGhlIHRhcmdldCB0ZXN0LCBzdG9wIHNraXBwaW5nIGFmdGVyIHRoaXMgb25lXG4gICAgICAgICAgICBza2lwcGluZ1Rlc3RzID0gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRlc3Q/Lm9wdGlvbnMpIHtcbiAgICAgICAgICB0ZXN0Lm9wdGlvbnMub3duZXIgPSB0W2ldLm9wdGlvbnM/Lm93bmVyID8/IGNhdGVnb3J5Py5vd25lciA/PyBwYWNrYWdlT3duZXIgPz8gJyc7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbGV0IGlzR0JFbmFibGUgPSAod2luZG93IGFzIGFueSkuZ2MgJiYgdGVzdC5vcHRpb25zPy5za2lwUmVhc29uID09IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYCoqKioqKioqJHtpc0dCRW5hYmxlfWApO1xuICAgICAgICAvLyBpZiAoaXNHQkVuYWJsZSlcbiAgICAgICAgLy8gICBhd2FpdCAod2luZG93IGFzIGFueSkuZ2MoKTtcbiAgICAgICAgLy8gbWVtb3J5VXNhZ2VCZWZvcmUgPSAod2luZG93Py5wZXJmb3JtYW5jZSBhcyBhbnkpPy5tZW1vcnk/LnVzZWRKU0hlYXBTaXplO1xuICAgICAgICBsZXQgdGVzdFJ1biA9IGF3YWl0IGV4ZWNUZXN0KFxuICAgICAgICAgICAgdGVzdCxcbiAgICAgICAgICAgIG9wdGlvbnM/LnRlc3QsXG4gICAgICAgICAgICBsb2dzLCBERy5UZXN0LmlzSW5CZW5jaG1hcmsgPyB0W2ldLm9wdGlvbnM/LmJlbmNobWFya1RpbWVvdXQgPz8gQkVOQ0hNQVJLX1RJTUVPVVQgOiB0W2ldLm9wdGlvbnM/LnRpbWVvdXQgPz8gU1RBTkRBUlRfVElNRU9VVCxcbiAgICAgICAgICAgIHBhY2thZ2VfLm5hbWUsXG4gICAgICAgICAgICBvcHRpb25zLnZlcmJvc2VcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBpZiAoaXNHQkVuYWJsZSlcbiAgICAgICAgLy8gICBhd2FpdCAod2luZG93IGFzIGFueSkuZ2MoKTtcbiAgICAgICAgaWYgKHRlc3RSdW4pIHtcbiAgICAgICAgICByZXMucHVzaCh7IC4uLnRlc3RSdW4sICB3aWRnZXRzRGlmZmVyZW5jZTogZ2V0V2lkZ2V0c0NvdW50U2FmZSgpIC0gd2lkZ2V0c0JlZm9yZSB9KTtcbiAgICAgICAgICAvLyBSZXR1cm4gZWFybHkgaWYgcmV0dXJuT25GYWlsIGlzIHNldCBhbmQgdGVzdCBmYWlsZWQgKGJ1dCBpZ25vcmUgZmFpbHVyZSBmb3IgdGhlIHNraXBUb1Rlc3QgdGVzdCBpdHNlbGYpXG4gICAgICAgICAgaWYgKG9wdGlvbnMucmV0dXJuT25GYWlsICYmIG9wdGlvbnMuc2tpcFRvVGVzdCAhPT0gdGVzdC5uYW1lICYmICF0ZXN0UnVuLnN1Y2Nlc3MgJiYgIXRlc3RSdW4uc2tpcHBlZClcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVzLnB1c2goeyAuLi50ZXN0UnVuLCBtZW1vcnlEZWx0YTogKHdpbmRvdz8ucGVyZm9ybWFuY2UgYXMgYW55KT8ubWVtb3J5Py51c2VkSlNIZWFwU2l6ZSAtIG1lbW9yeVVzYWdlQmVmb3JlLCB3aWRnZXRzRGVsdGE6IGdldFdpZGdldHNDb3VudFNhZmUoKSAtIHdpZGdldHNCZWZvcmUgfSk7XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLm5vZGVPcHRpb25zKSB7XG4gICAgICAgICAgZ3Jvay5zaGVsbC5jbG9zZUFsbCgpO1xuICAgICAgICAgIERHLkJhbGxvb24uY2xvc2VBbGwoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgc2tpcHBpbmdUZXN0cyA9IGlzVGFyZ2V0Q2F0ZWdvcnkgJiYgb3B0aW9ucy5za2lwVG9UZXN0ICE9IHVuZGVmaW5lZDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdC5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgdGVzdCA9IHRbaV07XG4gICAgICAgIGlmIChvcHRpb25zLnRlc3QpXG4gICAgICAgICAgaWYgKG9wdGlvbnMudGVzdC50b0xvd2VyQ2FzZSgpICE9PSB0ZXN0Lm5hbWUudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBpZiAoc2tpcHBpbmdUZXN0cykge1xuICAgICAgICAgIGlmIChvcHRpb25zPy5za2lwVG9UZXN0ICE9IHVuZGVmaW5lZCAmJiB0ZXN0Lm5hbWUudG9Mb3dlckNhc2UoKS50cmltKCkgPT09IG9wdGlvbnM/LnNraXBUb1Rlc3QudG9Mb3dlckNhc2UoKS50cmltKCkpIHtcbiAgICAgICAgICAgIC8vIEZvdW5kIHRoZSB0YXJnZXQgdGVzdCwgc3RvcCBza2lwcGluZyBhZnRlciB0aGlzIG9uZVxuICAgICAgICAgICAgc2tpcHBpbmdUZXN0cyA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZTsgIC8vIFNraXAgdGhpcyB0ZXN0IChpbmNsdWRpbmcgdGhlIHRhcmdldClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0ZXN0Py5vcHRpb25zKSB7XG4gICAgICAgICAgdGVzdC5vcHRpb25zLm93bmVyID0gdFtpXS5vcHRpb25zPy5vd25lciA/PyBjYXRlZ29yeT8ub3duZXIgPz8gcGFja2FnZU93bmVyID8/ICcnO1xuICAgICAgICB9XG4gICAgICAgIC8vIGxldCBpc0dCRW5hYmxlID0gKHdpbmRvdyBhcyBhbnkpLmdjICYmIHRlc3Qub3B0aW9ucz8uc2tpcFJlYXNvbiA9PSB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGAqKioqKioqKiR7aXNHQkVuYWJsZX1gKTtcbiAgICAgICAgLy8gaWYgKGlzR0JFbmFibGUpXG4gICAgICAgIC8vICAgYXdhaXQgKHdpbmRvdyBhcyBhbnkpLmdjKCk7XG4gICAgICAgIC8vIG1lbW9yeVVzYWdlQmVmb3JlID0gKHdpbmRvdz8ucGVyZm9ybWFuY2UgYXMgYW55KT8ubWVtb3J5Py51c2VkSlNIZWFwU2l6ZTtcbiAgICAgICAgbGV0IHRlc3RSdW4gPSBhd2FpdCBleGVjVGVzdChcbiAgICAgICAgICAgIHRlc3QsXG4gICAgICAgICAgICBvcHRpb25zPy50ZXN0LFxuICAgICAgICAgICAgbG9ncyxcbiAgICAgICAgICAgIERHLlRlc3QuaXNJbkJlbmNobWFyayA/IHRbaV0ub3B0aW9ucz8uYmVuY2htYXJrVGltZW91dCA/PyBCRU5DSE1BUktfVElNRU9VVCA6IHRbaV0ub3B0aW9ucz8udGltZW91dCxcbiAgICAgICAgICAgIHBhY2thZ2VfLm5hbWUsXG4gICAgICAgICAgICBvcHRpb25zLnZlcmJvc2VcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBpZiAoaXNHQkVuYWJsZSlcbiAgICAgICAgLy8gICBhd2FpdCAod2luZG93IGFzIGFueSkuZ2MoKTtcblxuICAgICAgICBpZiAodGVzdFJ1bikge1xuICAgICAgICAgIHJlcy5wdXNoKHsgLi4udGVzdFJ1biwgd2lkZ2V0c0RpZmZlcmVuY2U6IGdldFdpZGdldHNDb3VudFNhZmUoKSAtIHdpZGdldHNCZWZvcmUgfSk7XG4gICAgICAgICAgLy8gUmV0dXJuIGVhcmx5IGlmIHJldHVybk9uRmFpbCBpcyBzZXQgYW5kIHRlc3QgZmFpbGVkIChidXQgaWdub3JlIGZhaWx1cmUgZm9yIHRoZSBza2lwVG9UZXN0IHRlc3QgaXRzZWxmKVxuICAgICAgICAgIGlmIChvcHRpb25zLnJldHVybk9uRmFpbCAmJiBvcHRpb25zLnNraXBUb1Rlc3QgIT09IHRlc3QubmFtZSAmJiAhdGVzdFJ1bi5zdWNjZXNzICYmICF0ZXN0UnVuLnNraXBwZWQpXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlcy5wdXNoKHsgLi4udGVzdFJ1biwgbWVtb3J5RGVsdGE6ICh3aW5kb3c/LnBlcmZvcm1hbmNlIGFzIGFueSk/Lm1lbW9yeT8udXNlZEpTSGVhcFNpemUgLSBtZW1vcnlVc2FnZUJlZm9yZSwgd2lkZ2V0c0RpZmZlcmVuY2U6IGdldFdpZGdldHNDb3VudFNhZmUoKSAtIHdpZGdldHNCZWZvcmUgfSk7XG5cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFdpZGdldHNDb3VudFNhZmUoKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJylcbiAgICAgIHJldHVybiAwO1xuICAgIGxldCBsZW5ndGggPSAtMTtcbiAgICB0cnkge1xuICAgICAgbGVuZ3RoID0gREcuV2lkZ2V0LmdldEFsbCgpLmxlbmd0aDtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUud2FybihlLm1lc3NhZ2UgPz8gZSk7XG4gICAgfVxuICAgIHJldHVybiBsZW5ndGg7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBpbnZva2VUZXN0cyhjYXRlZ29yaWVzVG9JbnZva2U6IHsgW2tleTogc3RyaW5nXTogQ2F0ZWdvcnkgfSwgb3B0aW9uczogVGVzdEV4ZWN1dGlvbk9wdGlvbnMpIHtcbiAgICB0cnkge1xuICAgICAgbGV0IHNraXBwaW5nQ2F0ZWdvcmllcyA9IG9wdGlvbnM/LnNraXBUb0NhdGVnb3J5ICE9IHVuZGVmaW5lZDtcbiAgICAgIGxldCBpc1RhcmdldENhdGVnb3J5ID0gZmFsc2U7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhjYXRlZ29yaWVzVG9JbnZva2UpKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMuZXhjbHVkZT8uc29tZSgoYykgPT4ga2V5LnN0YXJ0c1dpdGgoYykpKVxuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICBpZiAob3B0aW9ucz8uY2F0ZWdvcnkgIT0gbnVsbCAmJiAha2V5LnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChvcHRpb25zPy5jYXRlZ29yeS50b0xvd2VyQ2FzZSgpLnRyaW0oKSkpXG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgaWYgKHNraXBwaW5nQ2F0ZWdvcmllcykge1xuICAgICAgICAgICAgICBpZiAoaXNUYXJnZXRDYXRlZ29yeSlcbiAgICAgICAgICAgICAgICAgIHNraXBwaW5nQ2F0ZWdvcmllcyA9IGZhbHNlO1xuICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zPy5za2lwVG9DYXRlZ29yeSAhPSBudWxsICYmIGtleS50b0xvd2VyQ2FzZSgpLnRyaW0oKSA9PT0gb3B0aW9ucz8uc2tpcFRvQ2F0ZWdvcnkudG9Mb3dlckNhc2UoKS50cmltKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBpc1RhcmdldENhdGVnb3J5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gSGF2ZW4ndCBmb3VuZCB0aGUgdGFyZ2V0IGNhdGVnb3J5IHlldCwga2VlcCBza2lwcGluZ1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICAgIGNvbnN0IHNraXBwZWQgPSB2YWx1ZS50ZXN0cz8uZXZlcnkoKHQ6IFRlc3QpID0+IHQub3B0aW9ucz8uc2tpcFJlYXNvblxuICAgICAgICAgICAgICB8fCAob3B0aW9ucz8udGVzdCAhPSBudWxsICYmIG9wdGlvbnMudGVzdC50b0xvd2VyQ2FzZSgpICE9PSB0Lm5hbWUudG9Mb3dlckNhc2UoKSkpO1xuXG4gICAgICAgICAgaWYgKCFza2lwcGVkKSB7XG4gICAgICAgICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICAgICAgICBjb25zdCBza2lwcGVkQ291bnQgPSAodmFsdWUudGVzdHMgPz8gW10pLmZpbHRlcigodDogVGVzdCkgPT5cbiAgICAgICAgICAgICAgICB0Lm9wdGlvbnM/LnNraXBSZWFzb24gfHwgKG9wdGlvbnM/LnRlc3QgIT0gbnVsbCAmJiBvcHRpb25zLnRlc3QudG9Mb3dlckNhc2UoKSAhPT0gdC5uYW1lLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICAgICkubGVuZ3RoO1xuICAgICAgICAgICAgICBzdGRMb2coYFBhY2thZ2UgdGVzdGluZzogU3RhcnRlZCB7eyR7a2V5fX19JHtza2lwcGVkQ291bnQgPiAwID8gYCBza2lwcGVkIHt7JHtza2lwcGVkQ291bnR9fX1gIDogJyd9YCk7XG4gICAgICAgICAgICAgIHZhbHVlLmJlZm9yZVN0YXR1cyA9IGF3YWl0IGludm9rZUNhdGVnb3J5TWV0aG9kKHZhbHVlLmJlZm9yZSwga2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IHQgPSB2YWx1ZS50ZXN0cyA/PyBbXTtcblxuICAgICAgICAgIGlmIChvcHRpb25zLnN0cmVzc1Rlc3QpIHtcbiAgICAgICAgICAgICAgdCA9IHQuZmlsdGVyKChlKSA9PiBlLm9wdGlvbnM/LnN0cmVzc1Rlc3QpO1xuICAgICAgICAgICAgICB0ID0gc2h1ZmZsZSh0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoKG9wdGlvbnMudGFncz8ubGVuZ3RoID8/IDApID4gMCkge1xuICAgICAgICAgICAgICB0ID0gdC5maWx0ZXIoKGUpID0+XG4gICAgICAgICAgICAgICAgICBlLm9wdGlvbnM/LnRhZ3M/LnNvbWUodGFnID0+IChvcHRpb25zPy50YWdzID8/IFtdKS5pbmNsdWRlcyh0YWcpKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCByZXM6IFRlc3RSZXN1bHRFeHRlbmRlZFtdO1xuICAgICAgICAgIGlmICh2YWx1ZS5iZWZvcmVTdGF0dXMpIHtcbiAgICAgICAgICAgICAgcmVzID0gQXJyYXkuZnJvbSh0Lm1hcCgodGVzdEVsZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgZGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5OiBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGVzdEVsZW0ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ6ICdiZWZvcmUoKSBmYWlsZWQnLFxuICAgICAgICAgICAgICAgICAgICAgIG1zOiAwLFxuICAgICAgICAgICAgICAgICAgICAgIHNraXBwZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgIGxvZ3M6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgIG93bmVyOiBwYWNrYWdlT3duZXIsXG4gICAgICAgICAgICAgICAgICAgICAgcGFja2FnZTogcGFja2FnZV8ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICB3aWRnZXRzRGlmZmVyZW5jZTogMCxcbiAgICAgICAgICAgICAgICAgICAgICBmbGFraW5nOiBERy5UZXN0LmlzUmVwcm9kdWNpbmdcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgcmVzLmZvckVhY2goYXN5bmMgKHRlc3QpID0+IGF3YWl0IGdyb2suc2hlbGwucmVwb3J0VGVzdCgncGFja2FnZScsIHRlc3QpKTtcbiAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgcmVzID0gYXdhaXQgaW52b2tlVGVzdHNJbkNhdGVnb3J5KHZhbHVlLCBvcHRpb25zLCBza2lwcGluZ0NhdGVnb3JpZXMpO1xuICAgICAgICAgIGNvbnN0IGRhdGE6IFRlc3RSZXN1bHRFeHRlbmRlZFtdID0gcmVzLmZpbHRlcigoZCkgPT4gZC5yZXN1bHQgIT0gJ3NraXBwZWQnKTtcblxuICAgICAgICAgIGlmICghc2tpcHBlZClcbiAgICAgICAgICAgICAgdmFsdWUuYWZ0ZXJTdGF0dXMgPSBhd2FpdCBpbnZva2VDYXRlZ29yeU1ldGhvZCh2YWx1ZS5hZnRlciwga2V5KTtcblxuICAgICAgICAgIC8vIENsZWFyIGFmdGVyIGNhdGVnb3J5XG4gICAgICAgICAgLy8gZ3Jvay5zaGVsbC5jbG9zZUFsbCgpO1xuICAgICAgICAgIC8vIERHLkJhbGxvb24uY2xvc2VBbGwoKTtcbiAgICAgICAgICBpZiAodmFsdWUuYWZ0ZXJTdGF0dXMpIHtcbiAgICAgICAgICAgICAgc3RkTG9nKGBQYWNrYWdlIHRlc3Rpbmc6IENhdGVnb3J5IGFmdGVyKCkge3ske2tleX19fSBmYWlsZWRgKTtcbiAgICAgICAgICAgICAgc3RkTG9nKGBQYWNrYWdlIHRlc3Rpbmc6IFJlc3VsdCBmb3Ige3ske2tleX19fSBhZnRlcjogJHt2YWx1ZS5hZnRlclN0YXR1c31gKTtcbiAgICAgICAgICAgICAgZGF0YS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgIGNhdGVnb3J5OiBrZXksXG4gICAgICAgICAgICAgICAgICBuYW1lOiAnYWZ0ZXInLFxuICAgICAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICByZXN1bHQ6IHZhbHVlLmFmdGVyU3RhdHVzLFxuICAgICAgICAgICAgICAgICAgbXM6IDAsXG4gICAgICAgICAgICAgICAgICBza2lwcGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIGxvZ3M6ICcnLFxuICAgICAgICAgICAgICAgICAgb3duZXI6IHBhY2thZ2VPd25lcixcbiAgICAgICAgICAgICAgICAgIHBhY2thZ2U6IHBhY2thZ2VfLm5hbWUsXG4gICAgICAgICAgICAgICAgICB3aWRnZXRzRGlmZmVyZW5jZTogMCxcbiAgICAgICAgICAgICAgICAgIGZsYWtpbmc6IERHLlRlc3QuaXNSZXByb2R1Y2luZ1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHZhbHVlLmJlZm9yZVN0YXR1cykge1xuICAgICAgICAgICAgICBzdGRMb2coYFBhY2thZ2UgdGVzdGluZzogQ2F0ZWdvcnkgYmVmb3JlKCkge3ske2tleX19fSBmYWlsZWRgKTtcbiAgICAgICAgICAgICAgc3RkTG9nKGBQYWNrYWdlIHRlc3Rpbmc6IFJlc3VsdCBmb3Ige3ske2tleX19fSBiZWZvcmU6ICR7dmFsdWUuYmVmb3JlU3RhdHVzfWApO1xuICAgICAgICAgICAgICBkYXRhLnB1c2goe1xuICAgICAgICAgICAgICAgICAgZGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk6IGtleSxcbiAgICAgICAgICAgICAgICAgIG5hbWU6ICdiZWZvcmUnLFxuICAgICAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICByZXN1bHQ6IHZhbHVlLmJlZm9yZVN0YXR1cyxcbiAgICAgICAgICAgICAgICAgIG1zOiAwLFxuICAgICAgICAgICAgICAgICAgc2tpcHBlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICBsb2dzOiAnJyxcbiAgICAgICAgICAgICAgICAgIG93bmVyOiBwYWNrYWdlT3duZXIsXG4gICAgICAgICAgICAgICAgICBwYWNrYWdlOiBwYWNrYWdlXy5uYW1lLFxuICAgICAgICAgICAgICAgICAgd2lkZ2V0c0RpZmZlcmVuY2U6IDAsXG4gICAgICAgICAgICAgICAgICBmbGFraW5nOiBERy5UZXN0LmlzUmVwcm9kdWNpbmdcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc3VsdHMucHVzaCguLi5kYXRhKTtcblxuICAgICAgICAgIC8vIElmIHJldHVybk9uRmFpbCBpcyBzZXQgYW5kIGEgdGVzdCBmYWlsZWQgKG90aGVyIHRoYW4gc2tpcFRvVGVzdCksIHN0b3AgcHJvY2Vzc2luZyBtb3JlIGNhdGVnb3JpZXNcbiAgICAgICAgICBpZiAob3B0aW9ucy5yZXR1cm5PbkZhaWwgJiYgZGF0YS5zb21lKChkKSA9PiAhZC5zdWNjZXNzICYmICFkLnNraXBwZWQgJiYgZC5uYW1lICE9PSBvcHRpb25zLnNraXBUb1Rlc3QpKVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgcmVzZXRDb25zb2xlKCk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnRlc3RDb250ZXh0IS5jYXRjaFVuaGFuZGxlZCAmJiAoIURHLlRlc3QuaXNJbkJlbmNobWFyaykpIHtcbiAgICAgIGF3YWl0IGRlbGF5KDEwMDApO1xuICAgICAgY29uc3QgZXJyb3IgPSBhd2FpdCBncm9rLnNoZWxsLmxhc3RFcnJvcjtcbiAgICAgIGlmIChlcnJvciAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCBwYXJhbXM6IGFueSA9IHtcbiAgICAgICAgICAgICAgbG9nczogJycsXG4gICAgICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgICAgY2F0ZWdvcnk6ICdVbmhhbmRsZWQgZXhjZXB0aW9ucycsXG4gICAgICAgICAgICAgIG5hbWU6ICdFeGNlcHRpb24nLFxuICAgICAgICAgICAgICByZXN1bHQ6IGVycm9yID8/ICcnLFxuICAgICAgICAgICAgICBzdWNjZXNzOiAhZXJyb3IsXG4gICAgICAgICAgICAgIG1zOiAwLFxuICAgICAgICAgICAgICBza2lwcGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgb3duZXI6IHBhY2thZ2VPd25lciA/PyAnJyxcbiAgICAgICAgICAgICAgJ3BhY2thZ2UnOiBwYWNrYWdlXy5uYW1lLFxuICAgICAgICAgICAgICB3aWRnZXRzRGlmZmVyZW5jZTogMFxuICAgICAgICAgIH07XG4gICAgICAgICAgc3RkTG9nKGBQYWNrYWdlIHRlc3Rpbmc6IFVuaGFuZGxlZCBFeGNlcHRpb246ICR7ZXJyb3J9YCk7XG5cbiAgICAgICAgICByZXN1bHRzLnB1c2goey4uLnBhcmFtcywgJ2ZsYWtpbmcnOiBERy5UZXN0LmlzUmVwcm9kdWNpbmcgJiYgIWVycm9yfSk7XG4gICAgICAgICAgKDxhbnk+cGFyYW1zKS5wYWNrYWdlID0gcGFja2FnZV8ubmFtZTtcbiAgICAgICAgICBhd2FpdCBncm9rLnNoZWxsLnJlcG9ydFRlc3QoJ3BhY2thZ2UnLCBwYXJhbXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRSZXN1bHQoeDogYW55KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIGAke3gudG9TdHJpbmcoKX1cXG4ke3guc3RhY2sgPyAoYXdhaXQgREcuTG9nZ2VyLnRyYW5zbGF0ZVN0YWNrVHJhY2UoeC5zdGFjaykpIDogJyd9YDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhlY1Rlc3QodDogVGVzdCwgcHJlZGljYXRlOiBzdHJpbmcgfCB1bmRlZmluZWQsIGxvZ3M6IGFueVtdLFxuICB0ZXN0VGltZW91dD86IG51bWJlciwgcGFja2FnZU5hbWU/OiBzdHJpbmcsIHZlcmJvc2U/OiBib29sZWFuXG4pOiBQcm9taXNlPFRlc3RSZXN1bHQgfCB1bmRlZmluZWQ+IHtcbiAgbG9ncy5sZW5ndGggPSAwO1xuICBsZXQgcjogVGVzdFJlc3VsdDtcbiAgbGV0IHR5cGU6IHN0cmluZyA9ICdwYWNrYWdlJztcbiAgY29uc3QgZmlsdGVyID0gcHJlZGljYXRlICE9IHVuZGVmaW5lZCAmJiAodC5uYW1lLnRvTG93ZXJDYXNlKCkgIT09IHByZWRpY2F0ZS50b0xvd2VyQ2FzZSgpKTtcbiAgbGV0IHNraXAgPSB0Lm9wdGlvbnM/LnNraXBSZWFzb24gfHwgZmlsdGVyO1xuICBsZXQgc2tpcFJlYXNvbiA9IGZpbHRlciA/ICdza2lwcGVkJyA6IHQub3B0aW9ucz8uc2tpcFJlYXNvbjtcblxuICBpZiAoREcuVGVzdC5pc0luQmVuY2htYXJrICYmICF0Lm9wdGlvbnM/LmJlbmNobWFyaykge1xuICAgIHN0ZExvZyhgUGFja2FnZSB0ZXN0aW5nOiBTa2lwcGVkIHt7JHt0LmNhdGVnb3J5fX19IHt7JHt0Lm5hbWV9fX0gZG9lc250IGF2YWlsYWJsZSBpbiBiZW5jaG1hcmsgbW9kZWApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoc2tpcCAmJiAhREcuVGVzdC5pc0luQmVuY2htYXJrKVxuICAgIHN0ZExvZyhgUGFja2FnZSB0ZXN0aW5nOiBTa2lwcGVkIHt7JHt0LmNhdGVnb3J5fX19IHt7JHt0Lm5hbWV9fX1gKTtcbiAgaWYgKCFza2lwKVxuICAgIHN0ZExvZyhgUGFja2FnZSB0ZXN0aW5nOiBTdGFydGVkIHt7JHt0LmNhdGVnb3J5fX19IHt7JHt0Lm5hbWV9fX1gKTtcbiAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICBjb25zdCBzdGFydERhdGUgPSBuZXcgRGF0ZShzdGFydCkudG9JU09TdHJpbmcoKTtcbiAgdHJ5IHtcbiAgICBpZiAoc2tpcClcbiAgICAgIHIgPSB7IG5hbWU6IHQubmFtZSwgb3duZXI6dC5vcHRpb25zPy5vd25lciA/PyAnJywgY2F0ZWdvcnk6IHQuY2F0ZWdvcnksIGxvZ3M6ICcnLCBkYXRlOiBzdGFydERhdGUsIHN1Y2Nlc3M6IHRydWUsIHJlc3VsdDogc2tpcFJlYXNvbiEsIG1zOiAwLCBza2lwcGVkOiB0cnVlLCBwYWNrYWdlOiBwYWNrYWdlTmFtZSA/PyAnJywgZmxha2luZzogREcuVGVzdC5pc1JlcHJvZHVjaW5nfTtcbiAgICBlbHNlIHtcbiAgICAgIGxldCB0aW1lb3V0XyA9IHRlc3RUaW1lb3V0ID8/IFNUQU5EQVJUX1RJTUVPVVQ7XG5cbiAgICAgIGlmIChERy5UZXN0LmlzUHJvZmlsaW5nKVxuICAgICAgICBjb25zb2xlLnByb2ZpbGUoYCR7dC5jYXRlZ29yeX06ICR7dC5uYW1lfWApO1xuXG4gICAgICByID0geyBuYW1lOiB0Lm5hbWUsIG93bmVyOnQub3B0aW9ucz8ub3duZXIgPz8gJycsIGNhdGVnb3J5OiB0LmNhdGVnb3J5LCBsb2dzOiAnJywgZGF0ZTogc3RhcnREYXRlLCBzdWNjZXNzOiB0cnVlLCByZXN1bHQ6IChhd2FpdCB0aW1lb3V0KHQudGVzdCwgdGltZW91dF8pKS50b1N0cmluZygpID8/ICdPSycsIG1zOiAwLCBza2lwcGVkOiBmYWxzZSAsIHBhY2thZ2U6IHBhY2thZ2VOYW1lID8/ICcnLCBmbGFraW5nOiBERy5UZXN0LmlzUmVwcm9kdWNpbmd9O1xuXG4gICAgICBpZiAoREcuVGVzdC5pc1Byb2ZpbGluZykge1xuICAgICAgICBjb25zb2xlLnByb2ZpbGVFbmQoYCR7dC5jYXRlZ29yeX06ICR7dC5uYW1lfWApO1xuICAgICAgICBncm9rLnNoZWxsLmluZm8oYFByb2ZpbGluZyBvZiAke3QuY2F0ZWdvcnl9OiAke3QubmFtZX0gZmluaXNoZWQgXFxuIFBsZWFzZSBlbnN1cmUgdGhhdCB5b3UgaGF2ZSBvcGVuZWQgRGV2VG9vbHMgKEYxMikgLyBQZXJmb3JtYW5jZSBwYW5lbCBiZWZvcmUgdGVzdCBzdGFydHMuYCk7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoICh4OiBhbnkpIHtcbiAgICBzdGRFcnJvcih4KTtcbiAgICByID0geyBuYW1lOiB0Lm5hbWUsIG93bmVyOnQub3B0aW9ucz8ub3duZXIgPz8gJycsIGNhdGVnb3J5OiB0LmNhdGVnb3J5LCBsb2dzOiAnJywgZGF0ZTogc3RhcnREYXRlLCBzdWNjZXNzOiBmYWxzZSwgcmVzdWx0OiBhd2FpdCBnZXRSZXN1bHQoeCksIG1zOiAwLCBza2lwcGVkOiBmYWxzZSwgcGFja2FnZTogcGFja2FnZU5hbWUgPz8gJycsIGZsYWtpbmc6IGZhbHNlfTtcbiAgfVxuICBpZiAodC5vcHRpb25zPy5pc0FnZ3JlZ2F0ZWQgJiYgci5yZXN1bHQuY29uc3RydWN0b3IgPT09IERHLkRhdGFGcmFtZSkge1xuICAgIGNvbnN0IGNvbCA9IHIucmVzdWx0LmNvbCgnc3VjY2VzcycpO1xuICAgIGlmIChjb2wpXG4gICAgICByLnN1Y2Nlc3MgPSBjb2wuc3RhdHMuc3VtID09PSBjb2wubGVuZ3RoO1xuICAgIGlmICghdmVyYm9zZSkge1xuICAgICAgY29uc3QgZGYgPSByLnJlc3VsdDtcbiAgICAgIGRmLmNvbHVtbnMucmVtb3ZlKCdzdGFjaycpO1xuICAgICAgZGYucm93cy5yZW1vdmVXaGVyZSgocikgPT4gci5nZXQoJ3N1Y2Nlc3MnKSk7XG4gICAgICByLnJlc3VsdCA9IGRmO1xuICAgIH1cbiAgICByLnJlc3VsdCA9IHIucmVzdWx0LnRvQ3N2KCk7XG4gIH1cbiAgci5sb2dzID0gbG9ncy5qb2luKCdcXG4nKTtcbiAgci5tcyA9IERhdGUubm93KCkgLSBzdGFydDtcbiAgaWYgKCFza2lwKVxuICAgIHN0ZExvZyhgUGFja2FnZSB0ZXN0aW5nOiBGaW5pc2hlZCB7eyR7dC5jYXRlZ29yeX19fSB7eyR7dC5uYW1lfX19IHdpdGgge3ske3Iuc3VjY2VzcyA/ICdzdWNjZXNzJyA6ICdlcnJvcid9fX0gZm9yICR7ci5tc30gbXNgKTtcbiAgaWYgKCFyLnN1Y2Nlc3MpIHtcbiAgICAgIHN0ZExvZyhgUGFja2FnZSB0ZXN0aW5nOiBSZXN1bHQgZm9yIHt7JHt0LmNhdGVnb3J5fX19IHt7JHt0Lm5hbWV9fX06ICR7ci5yZXN1bHR9YCk7XG4gIH1cbiAgci5jYXRlZ29yeSA9IHQuY2F0ZWdvcnk7XG4gIHIubmFtZSA9IHQubmFtZTtcbiAgci5vd25lciA9IHQub3B0aW9ucz8ub3duZXIgPz8gJyc7XG4gIGlmICghZmlsdGVyKSB7XG4gICAgbGV0IHBhcmFtcyA9IHtcbiAgICAgICdzdWNjZXNzJzogci5zdWNjZXNzLCAncmVzdWx0Jzogci5yZXN1bHQsICdtcyc6IHIubXMsICdkYXRlJzogci5kYXRlLFxuICAgICAgJ3NraXBwZWQnOiByLnNraXBwZWQsICdjYXRlZ29yeSc6IHQuY2F0ZWdvcnksICduYW1lJzogdC5uYW1lLCAnbG9ncyc6IHIubG9ncywgJ293bmVyJzogci5vd25lcixcbiAgICAgICdmbGFraW5nJzogREcuVGVzdC5pc1JlcHJvZHVjaW5nICYmIHIuc3VjY2VzcyxcbiAgICAgICdwYWNrYWdlJzogci5wYWNrYWdlXG4gICAgfTtcbiAgICBpZiAoci5yZXN1bHQuY29uc3RydWN0b3IgPT0gT2JqZWN0KSB7XG4gICAgICBjb25zdCByZXMgPSBPYmplY3Qua2V5cyhyLnJlc3VsdCkucmVkdWNlKChhY2MsIGspID0+ICh7IC4uLmFjYywgWydyZXN1bHQuJyArIGtdOiByLnJlc3VsdFtrXSB9KSwge30pO1xuICAgICAgcGFyYW1zID0geyAuLi5wYXJhbXMsIC4uLnJlcyB9O1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMucmVzdWx0IGluc3RhbmNlb2YgREcuRGF0YUZyYW1lKVxuICAgICAgcGFyYW1zLnJlc3VsdCA9IEpTT04uc3RyaW5naWZ5KHBhcmFtcy5yZXN1bHQ/LnRvSnNvbigpKSB8fCAnJztcbiAgICBhd2FpdCBncm9rLnNoZWxsLnJlcG9ydFRlc3QodHlwZSwgcGFyYW1zKTtcbiAgfVxuICByZXR1cm4gcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNodWZmbGUoYXJyYXk6IGFueVtdKTogYW55W10ge1xuICBjb25zdCBuZXdBcnIgPSBhcnJheS5zbGljZSgpO1xuICBuZXdBcnIuc29ydCgoKSA9PiBNYXRoLnJhbmRvbSgpIC0gMC41KTtcbiAgcmV0dXJuIG5ld0Fycjtcbn1cblxuLyogV2FpdHMgW21zXSBtaWxsaXNlY29uZHMgKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxheShtczogbnVtYmVyKSB7XG4gIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIG1zKSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhd2FpdENoZWNrKGNoZWNrSGFuZGxlcjogKCkgPT4gYm9vbGVhbixcbiAgZXJyb3I6IHN0cmluZyA9ICdUaW1lb3V0IGV4Y2VlZGVkJywgd2FpdDogbnVtYmVyID0gNTAwLCBpbnRlcnZhbDogbnVtYmVyID0gNTApOiBQcm9taXNlPGFueT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoZXJyb3IpKTtcbiAgICB9LCB3YWl0KTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgaW50ZXJ2YWxJZDogVGltZW91dCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGlmIChjaGVja0hhbmRsZXIoKSkge1xuICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xuICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgfVxuICAgIH0sIGludGVydmFsKTtcbiAgfSk7XG59XG5cbi8vIFJldHVybnMgdGVzdCBleGVjdXRpb24gcmVzdWx0IG9yIGFuIGVycm9yIGluIGNhc2Ugb2YgdGltZW91dFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRpbWVvdXQoZnVuYzogKCkgPT4gUHJvbWlzZTxhbnk+LCB0ZXN0VGltZW91dDogbnVtYmVyLCB0aW1lb3V0UmVhc29uOiBzdHJpbmcgPSAnRVhFQ1VUSU9OIFRJTUVPVVQnKTogUHJvbWlzZTxhbnk+IHtcbiAgbGV0IHRpbWVvdXQ6IGFueSA9IG51bGw7XG4gIGNvbnN0IHRpbWVvdXRQcm9taXNlID0gbmV3IFByb21pc2U8YW55PigoXywgcmVqZWN0KSA9PiB7XG4gICAgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1wcm9taXNlLXJlamVjdC1lcnJvcnNcbiAgICAgIHJlamVjdCh0aW1lb3V0UmVhc29uKTtcbiAgICB9LCB0ZXN0VGltZW91dCk7XG4gIH0pO1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBQcm9taXNlLnJhY2UoW2Z1bmMoKSwgdGltZW91dFByb21pc2VdKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAodGltZW91dClcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEaWFsb2dQcmVzZW50KGRpYWxvZ1RpdGxlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgZGlhbG9ncyA9IERHLkRpYWxvZy5nZXRPcGVuRGlhbG9ncygpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRpYWxvZ3MubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoZGlhbG9nc1tpXS50aXRsZSA9PSBkaWFsb2dUaXRsZSlcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqIEV4cGVjdHMgYW4gYXN5bmNocm9ub3VzIHtAbGluayBhY3Rpb259IHRvIHRocm93IGFuIGV4Y2VwdGlvbi4gVXNlIHtAbGluayBjaGVja30gdG8gcGVyZm9ybVxuICogZGVlcGVyIGluc3BlY3Rpb24gb2YgdGhlIGV4Y2VwdGlvbiBpZiBuZWNlc3NhcnkuXG4gKiBAcGFyYW0gIHtmdW5jdGlvbigpOiBQcm9taXNlPHZvaWQ+fSBhY3Rpb25cbiAqIEBwYXJhbSAge2Z1bmN0aW9uKGFueSk6IGJvb2xlYW59IGNoZWNrXG4gKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhwZWN0RXhjZXB0aW9uQXN5bmMoYWN0aW9uOiAoKSA9PiBQcm9taXNlPHZvaWQ+LFxuICBjaGVjaz86IChleGNlcHRpb246IGFueSkgPT4gYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICBsZXQgY2F1Z2h0OiBib29sZWFuID0gZmFsc2U7XG4gIGxldCBjaGVja2VkOiBib29sZWFuID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgYXdhaXQgYWN0aW9uKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjYXVnaHQgPSB0cnVlO1xuICAgIGNoZWNrZWQgPSAhY2hlY2sgfHwgY2hlY2soZSk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKCFjYXVnaHQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FuIGV4Y2VwdGlvbiBpcyBleHBlY3RlZCBidXQgbm90IHRocm93bicpO1xuICAgIGlmICghY2hlY2tlZClcbiAgICAgIHRocm93IG5ldyBFcnJvcignQW4gZXhwZWN0ZWQgZXhjZXB0aW9uIGlzIHRocm93biwgYnV0IGl0IGRvZXMgbm90IHNhdGlzZnkgdGhlIGNvbmRpdGlvbicpO1xuICB9XG59XG5cbmNvbnN0IGNhdERGID0gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKFtERy5Db2x1bW4uZnJvbVN0cmluZ3MoJ2NvbCcsIFsndmFsMScsICd2YWwyJywgJ3ZhbDMnXSldKTtcblxuLyoqXG4gKiBVbml2ZXJzYWwgdGVzdCBmb3Igdmlld2Vycy4gSXQgc2VhcmNoIHZpZXdlcnMgaW4gRE9NIGJ5IHRhZ3M6IGNhbnZhcywgc3ZnLCBpbWcsIGlucHV0LCBoMSwgYVxuICogQHBhcmFtICB7c3RyaW5nfSB2IFZpZXdlciBuYW1lXG4gKiBAcGFyYW0gIHtfREcuRGF0YUZyYW1lfSBkZiBEYXRhZnJhbWUgdG8gdXNlLiBTaG91bGQgaGF2ZSBhdCBsZWFzdCAzIHJvd3NcbiAqIEBwYXJhbSAge2Jvb2xlYW59IG9wdGlvbnMuZGV0ZWN0U2VtYW50aWNUeXBlcyBTcGVjaWZ5IHdoZXRoZXIgdG8gZGV0ZWN0IHNlbWFudGljIHR5cGVzIG9yIG5vdFxuICogQHBhcmFtICB7Ym9vbGVhbn0gb3B0aW9ucy5yZWFkT25seSBJZiBzZXQgdG8gdHJ1ZSwgdGhlIGRhdGFmcmFtZSB3aWxsIG5vdCBiZSBtb2RpZmllZCBkdXJpbmcgdGhlIHRlc3RcbiAqIEBwYXJhbSAge2Jvb2xlYW59IG9wdGlvbnMuYXJiaXRyYXJ5RGZUZXN0IElmIHNldCB0byBmYWxzZSwgdGVzdCBvbiBhcmJpdHJhcnkgZGF0YWZyYW1lXG4gKiAob25lIGNhdGVnb3JpY2FsIGNvbHVtbikgd2lsbCBub3QgYmUgcGVyZm9ybWVkXG4gKiBAcGFyYW0gIHtvYmplY3R9IG9wdGlvbnMgTGlzdCBvZiBvcHRpb25zIChvcHRpb25hbClcbiAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IFRoZSB0ZXN0IGlzIGNvbnNpZGVyZWQgc3VjY2Vzc2Z1bCBpZiBpdCBjb21wbGV0ZXMgd2l0aG91dCBlcnJvcnNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRlc3RWaWV3ZXIodjogc3RyaW5nLCBkZjogX0RHLkRhdGFGcmFtZSwgb3B0aW9ucz86IHtcbiAgZGV0ZWN0U2VtYW50aWNUeXBlcz86IGJvb2xlYW4sIHJlYWRPbmx5PzogYm9vbGVhbiwgYXJiaXRyYXJ5RGZUZXN0PzogYm9vbGVhbixcbiAgcGFja2FnZU5hbWU/OiBzdHJpbmcsIGF3YWl0Vmlld2VyPzogKHZpZXdlcjogX0RHLlZpZXdlcikgPT4gUHJvbWlzZTx2b2lkPlxufSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwYWNrYWdlTmFtZSA9IG9wdGlvbnM/LnBhY2thZ2VOYW1lID8/ICcnO1xuICBpZiAob3B0aW9ucz8uZGV0ZWN0U2VtYW50aWNUeXBlcylcbiAgICBhd2FpdCBncm9rLmRhdGEuZGV0ZWN0U2VtYW50aWNUeXBlcyhkZik7XG4gIGNvbnN0IHR2ID0gZ3Jvay5zaGVsbC5hZGRUYWJsZVZpZXcoZGYpO1xuXG4gIHRyeSB7XG4gICAgLy8xLiBPcGVuLCBkbyBub3RoaW5nIGFuZCBjbG9zZVxuICAgIGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld2VyQWRkZWQpO1xuICAgIC8vaW4gY2FzZSB2aWV3ZXIgd2l0aCBhc3luYyByZW5kZXJpbmcgLSB3YWl0IGZvciByZW5kZXIgdG8gY29tcGxldGVcbiAgICBpZiAob3B0aW9ucz8uYXdhaXRWaWV3ZXIpXG4gICAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkLCB1bmRlZmluZWQsIG9wdGlvbnMhLmF3YWl0Vmlld2VyKTtcblxuICAgIC8vMi4gT3BlbiB2aWV3ZXIsIHJ1biBzZWxlY3Rpb24sIGZpbHRlciwgZXRjLiBhbmQgY2xvc2VcbiAgICBpZiAoIW9wdGlvbnM/LnJlYWRPbmx5KSB7XG4gICAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkLCBzZWxlY3RGaWx0ZXJDaGFuZ2VDdXJyZW50KTtcbiAgICAgIGlmIChvcHRpb25zPy5hd2FpdFZpZXdlcilcbiAgICAgICAgYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3ZXJBZGRlZCwgc2VsZWN0RmlsdGVyQ2hhbmdlQ3VycmVudCwgb3B0aW9ucyEuYXdhaXRWaWV3ZXIpO1xuICAgIH1cblxuICAgIC8vMi4gT3BlbiB2aWV3ZXIsIGNoYW5nZSBvcHRpb25zLCBzYXZlIGxheW91dCBhbmQgY2xvc2VcbiAgICBsZXQgcHJvcHNBbmRMYXlvdXQ6IHsgbGF5b3V0OiBhbnksIHNhdmVkUHJvcHM6IGFueSB9IHwgbnVsbCA9IG51bGw7XG4gICAgcHJvcHNBbmRMYXlvdXQgPSBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkLCBjaGFuZ2VPcHRpb25zU2F2ZUxheW91dCk7XG4gICAgaWYgKG9wdGlvbnM/LmF3YWl0Vmlld2VyKVxuICAgICAgcHJvcHNBbmRMYXlvdXQgPSBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkLFxuICAgICAgICBjaGFuZ2VPcHRpb25zU2F2ZUxheW91dCwgb3B0aW9ucyEuYXdhaXRWaWV3ZXIpXG5cbiAgICAvLzMuIExvYWQgbGF5b3V0XG4gICAgYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3TGF5b3V0QXBwbGllZCwgbG9hZExheW91dCwgdW5kZWZpbmVkLCBwcm9wc0FuZExheW91dD8ubGF5b3V0LFxuICAgICAgeyBzYXZlZFByb3BzOiBwcm9wc0FuZExheW91dD8uc2F2ZWRQcm9wcyB9KTtcbiAgICBpZiAob3B0aW9ucz8uYXdhaXRWaWV3ZXIpXG4gICAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdMYXlvdXRBcHBsaWVkLCBsb2FkTGF5b3V0LCBvcHRpb25zIS5hd2FpdFZpZXdlcixcbiAgICAgICAgcHJvcHNBbmRMYXlvdXQ/LmxheW91dCwgeyBzYXZlZFByb3BzOiBwcm9wc0FuZExheW91dD8uc2F2ZWRQcm9wcyB9KTtcblxuICAgIC8vNC4gT3BlbiB2aWV3ZXIgb24gYXJiaXRhcnkgZGF0YXNldFxuICAgIGlmIChvcHRpb25zPy5hcmJpdHJhcnlEZlRlc3QgIT09IGZhbHNlKSB7XG4gICAgICB0di5kYXRhRnJhbWUgPSBjYXRERjtcbiAgICAgIGF3YWl0IGRlbGF5KDUwKTtcbiAgICAgIGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld2VyQWRkZWQpO1xuICAgICAgaWYgKG9wdGlvbnM/LmF3YWl0Vmlld2VyKVxuICAgICAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkLCB1bmRlZmluZWQsIG9wdGlvbnMhLmF3YWl0Vmlld2VyKTtcbiAgICB9XG5cbiAgICAvLzUuIENhbGwgcG9zdHBvbmVkIGZpbHRlcmluZ1xuICAgIGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld2VyQWRkZWQsIGZpbHRlckFzeW5jKTtcbiAgICBpZiAob3B0aW9ucz8uYXdhaXRWaWV3ZXIpXG4gICAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkLCBmaWx0ZXJBc3luYywgb3B0aW9ucyEuYXdhaXRWaWV3ZXIpO1xuXG4gIH0gZmluYWxseSB7XG4gICAgLy8gY2xvc2VBbGwoKSBpcyBoYW5kbGluZyBieSBjb21tb24gdGVzdCB3b3JrZmxvd1xuICAgIC8vIGdyb2suc2hlbGwuY2xvc2VBbGwoKTtcbiAgICAvLyBERy5CYWxsb29uLmNsb3NlQWxsKCk7XG4gIH1cbn1cbiJdfQ==","import * as DG from 'datagrok-api/dg';\nimport * as grok from 'datagrok-api/grok';\n\n// Do not import anything from JsDrawLite or HelmWebEditor, only to the main Helm package\n// import {JSDraw2ModuleType} from '@datagrok/js-draw-lite/src/types/jsdraw2';\n// import {HelmType, OrgHelmModuleType} from '@datagrok/helm-web-editor/src/types/org-helm';\n\nimport {runTests, tests, TestContext, initAutoTests as initTests } from '@datagrok-libraries/test/src/test';\n\nexport const _package = new DG.Package();\nexport {tests};\n\n//name: test\n//input: string category {optional: true}\n//input: string test {optional: true}\n//input: object testContext {optional: true}\n//output: dataframe result\nexport async function test(category: string, test: string, testContext: TestContext): Promise<DG.DataFrame> {\n // verbose: true - for tests returning dataframe\n const data = await runTests({category, test, testContext});\n return DG.DataFrame.fromObjects(data)!;\n}\n\n//name: initAutoTests\nexport async function initAutoTests() {\n await initTests(_package, _package.getModule('package-test.js'));\n}\n"],"names":["exports","__esModule","digestLength","blockSize","K","Uint32Array","hashBlocks","w","v","p","pos","len","a","b","c","d","e","f","g","h","u","i","j","t1","t2","Hash","this","state","Int32Array","temp","buffer","Uint8Array","bufferLength","bytesHashed","finished","reset","prototype","clean","length","update","data","dataLength","Error","dataPos","finish","out","left","bitLenHi","bitLenLo","padLength","digest","_saveState","_restoreState","from","HMAC","key","inner","outer","pad","istate","ostate","hash","hmac","fillBuffer","info","counter","num","hkdfSalt","hkdf","salt","okm","hmac_","bufpos","fill","pbkdf2","password","iterations","dkLen","prf","ctr","t","dk","k","factory","sha256","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","call","definition","o","Object","defineProperty","enumerable","get","obj","prop","hasOwnProperty","r","Symbol","toStringTag","value","DG","testData","DataFrame","fromCsv","columns","add","Column","fromList","TYPE","BYTE_ARRAY","Array","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","next","rejected","result","done","then","apply","STANDART_TIMEOUT","BENCHMARK_TIMEOUT","stdLog","console","log","bind","stdInfo","stdWarn","warn","stdError","error","tests","autoTestsCatName","demoCatName","detectorsCatName","coreCatName","wasRegistered","assure","notNull","name","TestContext","constructor","catchUnhandled","report","returnOnFail","Test","category","test","options","_a","timeout","_b","isInDebug","res","toString","actual","expected","addNamespace","s","replace","RegExp","nqName","initAutoTests","package_","_c","_d","_e","_f","_g","_h","_j","_k","packageId","id","moduleTests","_package","window","dartTests","arr","split","pop","cat","join","fullName","unshift","clear","push","isAggregated","skipReason","owner","benchmark","moduleAutoTests","moduleDemo","moduleDetectors","packFunctions","grok","dapi","functions","filter","list","reg","demo","isArray","matchAll","map","forEach","startsWith","parseInt","eval","wait","skip","isInBenchmark","benchmarkTimeout","friendlyName","shell","clearLastError","unhandled","lastError","hasTag","detectorsTestData","files","openTable","col","clone","semType","resArr","getResult","x","stack","Logger","translateStackTrace","execTest","predicate","logs","testTimeout","packageName","verbose","_l","_m","_o","_p","toLowerCase","start","Date","now","startDate","toISOString","date","success","ms","skipped","package","flaking","isReproducing","timeout_","isProfiling","profile","profileEnd","stats","sum","df","remove","rows","removeWhere","toCsv","params","keys","reduce","acc","assign","JSON","stringify","toJson","reportTest","shuffle","array","newArr","slice","sort","Math","random","setTimeout","func","timeoutReason","timeoutPromise","_","race","clearTimeout","fromColumns","fromStrings","testContext","nodeOptions","getCurrentCall","match","packageOwner","results","args","redefineConsole","categoriesToInvoke","skippingCategories","skipToCategory","isTargetCategory","entries","exclude","some","trim","every","skippedCount","beforeStatus","invokeCategoryMethod","before","stressTest","tags","tag","includes","testElem","widgetsDifference","invokeTestsInCategory","afterStatus","after","skipToTest","invokeTests","method","invokationResult","_q","_r","_s","_t","widgetsBefore","getWidgetsCountSafe","skippingTests","benchmarks","testRun","closeAll","Balloon","process","Widget","getAll","message","runTests","fromObjects","getModule"],"sourceRoot":""}
1
+ {"version":3,"file":"package-test.js","mappings":"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","sources":["webpack://hittriage/./node_modules/fast-sha256/sha256.js","webpack://hittriage/webpack/bootstrap","webpack://hittriage/webpack/runtime/define property getters","webpack://hittriage/webpack/runtime/hasOwnProperty shorthand","webpack://hittriage/webpack/runtime/make namespace object","webpack://hittriage/external var \"DG\"","webpack://hittriage/./node_modules/@datagrok-libraries/test/src/dataframe-utils.js","webpack://hittriage/./node_modules/@datagrok-libraries/test/src/test.js","webpack://hittriage/./src/package-test.ts"],"sourcesContent":["(function (root, factory) {\n // Hack to make all exports of this module sha256 function object properties.\n var exports = {};\n factory(exports);\n var sha256 = exports[\"default\"];\n for (var k in exports) {\n sha256[k] = exports[k];\n }\n \n if (typeof module === 'object' && typeof module.exports === 'object') {\n module.exports = sha256;\n } else if (typeof define === 'function' && define.amd) {\n define(function() { return sha256; }); \n } else {\n root.sha256 = sha256;\n }\n})(this, function(exports) {\n\"use strict\";\nexports.__esModule = true;\n// SHA-256 (+ HMAC and PBKDF2) for JavaScript.\n//\n// Written in 2014-2016 by Dmitry Chestnykh.\n// Public domain, no warranty.\n//\n// Functions (accept and return Uint8Arrays):\n//\n// sha256(message) -> hash\n// sha256.hmac(key, message) -> mac\n// sha256.pbkdf2(password, salt, rounds, dkLen) -> dk\n//\n// Classes:\n//\n// new sha256.Hash()\n// new sha256.HMAC(key)\n//\nexports.digestLength = 32;\nexports.blockSize = 64;\n// SHA-256 constants\nvar K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,\n 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,\n 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,\n 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,\n 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,\n 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,\n 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,\n 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\nfunction hashBlocks(w, v, p, pos, len) {\n var a, b, c, d, e, f, g, h, u, i, j, t1, t2;\n while (len >= 64) {\n a = v[0];\n b = v[1];\n c = v[2];\n d = v[3];\n e = v[4];\n f = v[5];\n g = v[6];\n h = v[7];\n for (i = 0; i < 16; i++) {\n j = pos + i * 4;\n w[i] = (((p[j] & 0xff) << 24) | ((p[j + 1] & 0xff) << 16) |\n ((p[j + 2] & 0xff) << 8) | (p[j + 3] & 0xff));\n }\n for (i = 16; i < 64; i++) {\n u = w[i - 2];\n t1 = (u >>> 17 | u << (32 - 17)) ^ (u >>> 19 | u << (32 - 19)) ^ (u >>> 10);\n u = w[i - 15];\n t2 = (u >>> 7 | u << (32 - 7)) ^ (u >>> 18 | u << (32 - 18)) ^ (u >>> 3);\n w[i] = (t1 + w[i - 7] | 0) + (t2 + w[i - 16] | 0);\n }\n for (i = 0; i < 64; i++) {\n t1 = (((((e >>> 6 | e << (32 - 6)) ^ (e >>> 11 | e << (32 - 11)) ^\n (e >>> 25 | e << (32 - 25))) + ((e & f) ^ (~e & g))) | 0) +\n ((h + ((K[i] + w[i]) | 0)) | 0)) | 0;\n t2 = (((a >>> 2 | a << (32 - 2)) ^ (a >>> 13 | a << (32 - 13)) ^\n (a >>> 22 | a << (32 - 22))) + ((a & b) ^ (a & c) ^ (b & c))) | 0;\n h = g;\n g = f;\n f = e;\n e = (d + t1) | 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) | 0;\n }\n v[0] += a;\n v[1] += b;\n v[2] += c;\n v[3] += d;\n v[4] += e;\n v[5] += f;\n v[6] += g;\n v[7] += h;\n pos += 64;\n len -= 64;\n }\n return pos;\n}\n// Hash implements SHA256 hash algorithm.\nvar Hash = /** @class */ (function () {\n function Hash() {\n this.digestLength = exports.digestLength;\n this.blockSize = exports.blockSize;\n // Note: Int32Array is used instead of Uint32Array for performance reasons.\n this.state = new Int32Array(8); // hash state\n this.temp = new Int32Array(64); // temporary state\n this.buffer = new Uint8Array(128); // buffer for data to hash\n this.bufferLength = 0; // number of bytes in buffer\n this.bytesHashed = 0; // number of total bytes hashed\n this.finished = false; // indicates whether the hash was finalized\n this.reset();\n }\n // Resets hash state making it possible\n // to re-use this instance to hash other data.\n Hash.prototype.reset = function () {\n this.state[0] = 0x6a09e667;\n this.state[1] = 0xbb67ae85;\n this.state[2] = 0x3c6ef372;\n this.state[3] = 0xa54ff53a;\n this.state[4] = 0x510e527f;\n this.state[5] = 0x9b05688c;\n this.state[6] = 0x1f83d9ab;\n this.state[7] = 0x5be0cd19;\n this.bufferLength = 0;\n this.bytesHashed = 0;\n this.finished = false;\n return this;\n };\n // Cleans internal buffers and re-initializes hash state.\n Hash.prototype.clean = function () {\n for (var i = 0; i < this.buffer.length; i++) {\n this.buffer[i] = 0;\n }\n for (var i = 0; i < this.temp.length; i++) {\n this.temp[i] = 0;\n }\n this.reset();\n };\n // Updates hash state with the given data.\n //\n // Optionally, length of the data can be specified to hash\n // fewer bytes than data.length.\n //\n // Throws error when trying to update already finalized hash:\n // instance must be reset to use it again.\n Hash.prototype.update = function (data, dataLength) {\n if (dataLength === void 0) { dataLength = data.length; }\n if (this.finished) {\n throw new Error(\"SHA256: can't update because hash was finished.\");\n }\n var dataPos = 0;\n this.bytesHashed += dataLength;\n if (this.bufferLength > 0) {\n while (this.bufferLength < 64 && dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n if (this.bufferLength === 64) {\n hashBlocks(this.temp, this.state, this.buffer, 0, 64);\n this.bufferLength = 0;\n }\n }\n if (dataLength >= 64) {\n dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength);\n dataLength %= 64;\n }\n while (dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n return this;\n };\n // Finalizes hash state and puts hash into out.\n //\n // If hash was already finalized, puts the same value.\n Hash.prototype.finish = function (out) {\n if (!this.finished) {\n var bytesHashed = this.bytesHashed;\n var left = this.bufferLength;\n var bitLenHi = (bytesHashed / 0x20000000) | 0;\n var bitLenLo = bytesHashed << 3;\n var padLength = (bytesHashed % 64 < 56) ? 64 : 128;\n this.buffer[left] = 0x80;\n for (var i = left + 1; i < padLength - 8; i++) {\n this.buffer[i] = 0;\n }\n this.buffer[padLength - 8] = (bitLenHi >>> 24) & 0xff;\n this.buffer[padLength - 7] = (bitLenHi >>> 16) & 0xff;\n this.buffer[padLength - 6] = (bitLenHi >>> 8) & 0xff;\n this.buffer[padLength - 5] = (bitLenHi >>> 0) & 0xff;\n this.buffer[padLength - 4] = (bitLenLo >>> 24) & 0xff;\n this.buffer[padLength - 3] = (bitLenLo >>> 16) & 0xff;\n this.buffer[padLength - 2] = (bitLenLo >>> 8) & 0xff;\n this.buffer[padLength - 1] = (bitLenLo >>> 0) & 0xff;\n hashBlocks(this.temp, this.state, this.buffer, 0, padLength);\n this.finished = true;\n }\n for (var i = 0; i < 8; i++) {\n out[i * 4 + 0] = (this.state[i] >>> 24) & 0xff;\n out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n }\n return this;\n };\n // Returns the final hash digest.\n Hash.prototype.digest = function () {\n var out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._saveState = function (out) {\n for (var i = 0; i < this.state.length; i++) {\n out[i] = this.state[i];\n }\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._restoreState = function (from, bytesHashed) {\n for (var i = 0; i < this.state.length; i++) {\n this.state[i] = from[i];\n }\n this.bytesHashed = bytesHashed;\n this.finished = false;\n this.bufferLength = 0;\n };\n return Hash;\n}());\nexports.Hash = Hash;\n// HMAC implements HMAC-SHA256 message authentication algorithm.\nvar HMAC = /** @class */ (function () {\n function HMAC(key) {\n this.inner = new Hash();\n this.outer = new Hash();\n this.blockSize = this.inner.blockSize;\n this.digestLength = this.inner.digestLength;\n var pad = new Uint8Array(this.blockSize);\n if (key.length > this.blockSize) {\n (new Hash()).update(key).finish(pad).clean();\n }\n else {\n for (var i = 0; i < key.length; i++) {\n pad[i] = key[i];\n }\n }\n for (var i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36;\n }\n this.inner.update(pad);\n for (var i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36 ^ 0x5c;\n }\n this.outer.update(pad);\n this.istate = new Uint32Array(8);\n this.ostate = new Uint32Array(8);\n this.inner._saveState(this.istate);\n this.outer._saveState(this.ostate);\n for (var i = 0; i < pad.length; i++) {\n pad[i] = 0;\n }\n }\n // Returns HMAC state to the state initialized with key\n // to make it possible to run HMAC over the other data with the same\n // key without creating a new instance.\n HMAC.prototype.reset = function () {\n this.inner._restoreState(this.istate, this.inner.blockSize);\n this.outer._restoreState(this.ostate, this.outer.blockSize);\n return this;\n };\n // Cleans HMAC state.\n HMAC.prototype.clean = function () {\n for (var i = 0; i < this.istate.length; i++) {\n this.ostate[i] = this.istate[i] = 0;\n }\n this.inner.clean();\n this.outer.clean();\n };\n // Updates state with provided data.\n HMAC.prototype.update = function (data) {\n this.inner.update(data);\n return this;\n };\n // Finalizes HMAC and puts the result in out.\n HMAC.prototype.finish = function (out) {\n if (this.outer.finished) {\n this.outer.finish(out);\n }\n else {\n this.inner.finish(out);\n this.outer.update(out, this.digestLength).finish(out);\n }\n return this;\n };\n // Returns message authentication code.\n HMAC.prototype.digest = function () {\n var out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n return HMAC;\n}());\nexports.HMAC = HMAC;\n// Returns SHA256 hash of data.\nfunction hash(data) {\n var h = (new Hash()).update(data);\n var digest = h.digest();\n h.clean();\n return digest;\n}\nexports.hash = hash;\n// Function hash is both available as module.hash and as default export.\nexports[\"default\"] = hash;\n// Returns HMAC-SHA256 of data under the key.\nfunction hmac(key, data) {\n var h = (new HMAC(key)).update(data);\n var digest = h.digest();\n h.clean();\n return digest;\n}\nexports.hmac = hmac;\n// Fills hkdf buffer like this:\n// T(1) = HMAC-Hash(PRK, T(0) | info | 0x01)\nfunction fillBuffer(buffer, hmac, info, counter) {\n // Counter is a byte value: check if it overflowed.\n var num = counter[0];\n if (num === 0) {\n throw new Error(\"hkdf: cannot expand more\");\n }\n // Prepare HMAC instance for new data with old key.\n hmac.reset();\n // Hash in previous output if it was generated\n // (i.e. counter is greater than 1).\n if (num > 1) {\n hmac.update(buffer);\n }\n // Hash in info if it exists.\n if (info) {\n hmac.update(info);\n }\n // Hash in the counter.\n hmac.update(counter);\n // Output result to buffer and clean HMAC instance.\n hmac.finish(buffer);\n // Increment counter inside typed array, this works properly.\n counter[0]++;\n}\nvar hkdfSalt = new Uint8Array(exports.digestLength); // Filled with zeroes.\nfunction hkdf(key, salt, info, length) {\n if (salt === void 0) { salt = hkdfSalt; }\n if (length === void 0) { length = 32; }\n var counter = new Uint8Array([1]);\n // HKDF-Extract uses salt as HMAC key, and key as data.\n var okm = hmac(salt, key);\n // Initialize HMAC for expanding with extracted key.\n // Ensure no collisions with `hmac` function.\n var hmac_ = new HMAC(okm);\n // Allocate buffer.\n var buffer = new Uint8Array(hmac_.digestLength);\n var bufpos = buffer.length;\n var out = new Uint8Array(length);\n for (var i = 0; i < length; i++) {\n if (bufpos === buffer.length) {\n fillBuffer(buffer, hmac_, info, counter);\n bufpos = 0;\n }\n out[i] = buffer[bufpos++];\n }\n hmac_.clean();\n buffer.fill(0);\n counter.fill(0);\n return out;\n}\nexports.hkdf = hkdf;\n// Derives a key from password and salt using PBKDF2-HMAC-SHA256\n// with the given number of iterations.\n//\n// The number of bytes returned is equal to dkLen.\n//\n// (For better security, avoid dkLen greater than hash length - 32 bytes).\nfunction pbkdf2(password, salt, iterations, dkLen) {\n var prf = new HMAC(password);\n var len = prf.digestLength;\n var ctr = new Uint8Array(4);\n var t = new Uint8Array(len);\n var u = new Uint8Array(len);\n var dk = new Uint8Array(dkLen);\n for (var i = 0; i * len < dkLen; i++) {\n var c = i + 1;\n ctr[0] = (c >>> 24) & 0xff;\n ctr[1] = (c >>> 16) & 0xff;\n ctr[2] = (c >>> 8) & 0xff;\n ctr[3] = (c >>> 0) & 0xff;\n prf.reset();\n prf.update(salt);\n prf.update(ctr);\n prf.finish(u);\n for (var j = 0; j < len; j++) {\n t[j] = u[j];\n }\n for (var j = 2; j <= iterations; j++) {\n prf.reset();\n prf.update(u).finish(u);\n for (var k = 0; k < len; k++) {\n t[k] ^= u[k];\n }\n }\n for (var j = 0; j < len && i * len + j < dkLen; j++) {\n dk[i * len + j] = t[j];\n }\n }\n for (var i = 0; i < len; i++) {\n t[i] = u[i] = 0;\n }\n for (var i = 0; i < 4; i++) {\n ctr[i] = 0;\n }\n prf.clean();\n return dk;\n}\nexports.pbkdf2 = pbkdf2;\n});\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = DG;","import * as sha256 from 'fast-sha256';\n/**\n * For columns of string type. Checks whether column contains empty values and removes corresponding rows in case user selects to remove.\n *\n */\nexport function removeEmptyStringRows(table, col) {\n const cats = col.categories;\n const emptyRawInd = cats.map((val, ind) => !val ? ind : null).filter((it) => it !== null);\n const rawData = [...col.getRawData()];\n const emptyRawsIndexes = [];\n let removedRowsCounter = 0;\n for (let i = 0; i < table.rowCount; i++) {\n if (emptyRawInd.includes(rawData[i])) {\n table.rows.removeAt(i - removedRowsCounter);\n emptyRawsIndexes.push(i);\n removedRowsCounter += 1;\n }\n }\n return emptyRawsIndexes;\n}\nexport function hashDataFrame(table, names) {\n names !== null && names !== void 0 ? names : (names = table.columns.names());\n const hasher = new sha256.Hash();\n const order = table.getSortedOrder(names);\n const encoder = new TextEncoder();\n for (const name of names) {\n const column = table.columns.byName(name);\n const dataArray = column.getRawData();\n const isString = column.type == DG.TYPE.STRING;\n const cats = column.categories;\n for (let i = 0; i < dataArray.length; i++) {\n if (isString) {\n const data = cats[dataArray[order[i]]];\n hasher.update(encoder.encode(data));\n }\n else {\n const data = dataArray[order[i]];\n hasher.update(Uint8Array.from([data]));\n }\n }\n }\n return hasher.digest();\n}\nexport const testData = DG.DataFrame.fromCsv(`countries,fasta,smiles,molregno,LON,Zip Code,Street Address Line 1,ImageUrl,user_id,error_message,xray,flag,magnitude,CS-id,pdb_id,accel_a,time_offset,chart,fit,Questions,empty_number,empty_string\nBelgium,MSNFHNEHVMQFYRNNLKTKGVFGRQ,CC(C(=O)OCCCc1cccnc1)c2cccc(c2)C(=O)c3ccccc3,1480014,36.276729583740234,995042300,14016 ROUTE 31W,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,\"COMPND \nATOM \nEND\",flag,1,1,1QBS,1,1.23,<chart></chart>,\"{\"\"series\"\":[{\"\"name\"\":\"\"Run:2023-08-08\"\",\"\"fitFunction\"\":\"\"sigmoid\"\",\"\"fitLineColor\"\":\"\"#1f77b4\"\",\"\"pointColor\"\":\"\"#1f77b4\"\",\"\"showPoints\"\":\"\"points\"\",\"\"parameters\"\":[2.497360340644872, 1.7058694986686864, 5.278052678195135, 0.16000320889028383],\"\"points\"\":[{\"\"x\"\":0.10000000149011612,\"\"y\"\":2.374499797821045},{\"\"x\"\":0.6000000238418579,\"\"y\"\":2.6242473125457764},{\"\"x\"\":1.100000023841858,\"\"y\"\":2.367267608642578},{\"\"x\"\":1.600000023841858,\"\"y\"\":2.6723148822784424},{\"\"x\"\":2.0999999046325684,\"\"y\"\":2.6537344455718994},{\"\"x\"\":2.5999999046325684,\"\"y\"\":2.3651671409606934},{\"\"x\"\":3.0999999046325684,\"\"y\"\":2.5654284954071045},{\"\"x\"\":3.5999999046325684,\"\"y\"\":2.4160959720611572},{\"\"x\"\":4.099999904632568,\"\"y\"\":2.286726713180542},{\"\"x\"\":4.599999904632568,\"\"y\"\":2.5100042819976807},{\"\"x\"\":5.099999904632568,\"\"y\"\":1.6676985025405884},{\"\"x\"\":5.599999904632568,\"\"y\"\":0.680136501789093},{\"\"x\"\":6.099999904632568,\"\"y\"\":0.3391543924808502},{\"\"x\"\":6.599999904632568,\"\"y\"\":0.09038983285427094},{\"\"x\"\":7.099999904632568,\"\"y\"\":0.19802775979042053}]},{\"\"name\"\":\"\"Run:2023-08-08\"\",\"\"fitLineColor\"\":\"\"#ffbb78\"\",\"\"pointColor\"\":\"\"#ffbb78\"\",\"\"showPoints\"\":\"\"points\"\",\"\"parameters\"\":[7.525235855508179, 1.3186911876809984, 5.335672608564294, 0.7860743343958098],\"\"points\"\":[{\"\"x\"\":0.10000000149011612,\"\"y\"\":7.988070487976074},{\"\"x\"\":0.6000000238418579,\"\"y\"\":7.018453121185303},{\"\"x\"\":1.100000023841858,\"\"y\"\":8.115279197692871},{\"\"x\"\":1.600000023841858,\"\"y\"\":7.486658096313477},{\"\"x\"\":2.0999999046325684,\"\"y\"\":7.396438121795654},{\"\"x\"\":2.5999999046325684,\"\"y\"\":7.477052211761475},{\"\"x\"\":3.0999999046325684,\"\"y\"\":6.913095474243164},{\"\"x\"\":3.5999999046325684,\"\"y\"\":8.01385498046875},{\"\"x\"\":4.099999904632568,\"\"y\"\":6.985900402069092},{\"\"x\"\":4.599999904632568,\"\"y\"\":6.970335960388184},{\"\"x\"\":5.099999904632568,\"\"y\"\":5.448817253112793},{\"\"x\"\":5.599999904632568,\"\"y\"\":2.5534818172454834},{\"\"x\"\":6.099999904632568,\"\"y\"\":1.893947958946228},{\"\"x\"\":6.599999904632568,\"\"y\"\":0.6340042352676392},{\"\"x\"\":7.099999904632568,\"\"y\"\":0.8403874039649963}]}],\"\"chartOptions\"\":{\"\"xAxisName\"\":\"\"Conc.\"\",\"\"yAxisName\"\":\"\"Activity\"\",\"\"title\"\":\"\"Dose-Response curves\"\"}}\",text,100,abc\nBurundi,MDYKETLLMPKTDFPMRGGLPNKEPQIQEKW,COc1ccc2cc(ccc2c1)C(C)C(=O)Oc3ccc(C)cc3OC,1480015,36.276729583740234,995073444,80 STATE HIGHWAY 310,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,\"COMPND \nATOM \nEND\",flag,2,2,1ZP8,2,1.23,<chart></chart>,\"{\"\"series\"\":[{\"\"name\"\":\"\"Run:2023-08-08\"\",\"\"fitFunction\"\":\"\"sigmoid\"\",\"\"fitLineColor\"\":\"\"#1f77b4\"\",\"\"pointColor\"\":\"\"#1f77b4\"\",\"\"showPoints\"\":\"\"points\"\",\"\"parameters\"\":[4.431460753103398, 2.1691498799246745, 5.266445597102774, 0.7825762827017926],\"\"points\"\":[{\"\"x\"\":0.10000000149011612,\"\"y\"\":4.751083850860596},{\"\"x\"\":0.6000000238418579,\"\"y\"\":4.203000068664551},{\"\"x\"\":1.100000023841858,\"\"y\"\":4.415858745574951},{\"\"x\"\":1.600000023841858,\"\"y\"\":4.68414306640625},{\"\"x\"\":2.0999999046325684,\"\"y\"\":4.198400974273682},{\"\"x\"\":2.5999999046325684,\"\"y\"\":4.179222106933594},{\"\"x\"\":3.0999999046325684,\"\"y\"\":4.638473987579346},{\"\"x\"\":3.5999999046325684,\"\"y\"\":4.708553314208984},{\"\"x\"\":4.099999904632568,\"\"y\"\":4.291589260101318},{\"\"x\"\":4.599999904632568,\"\"y\"\":4.038082599639893},{\"\"x\"\":5.099999904632568,\"\"y\"\":3.4349939823150635},{\"\"x\"\":5.599999904632568,\"\"y\"\":1.2194708585739136},{\"\"x\"\":6.099999904632568,\"\"y\"\":1.1920831203460693},{\"\"x\"\":6.599999904632568,\"\"y\"\":0.5352635979652405},{\"\"x\"\":7.099999904632568,\"\"y\"\":0.3346920311450958}]},{\"\"name\"\":\"\"Run:2023-08-08\"\",\"\"fitLineColor\"\":\"\"#ffbb78\"\",\"\"pointColor\"\":\"\"#ffbb78\"\",\"\"showPoints\"\":\"\"points\"\",\"\"parameters\"\":[2.339458017970126, -1.0734184310171178, 4.746332950550934, 0.2482416857595658],\"\"points\"\":[{\"\"x\"\":0.10000000149011612,\"\"y\"\":0.2139337658882141},{\"\"x\"\":0.6000000238418579,\"\"y\"\":0.4269562065601349},{\"\"x\"\":1.100000023841858,\"\"y\"\":0.2441573292016983},{\"\"x\"\":1.600000023841858,\"\"y\"\":0.146635964512825},{\"\"x\"\":2.0999999046325684,\"\"y\"\":0.08818462491035461},{\"\"x\"\":2.5999999046325684,\"\"y\"\":0.2560656666755676},{\"\"x\"\":3.0999999046325684,\"\"y\"\":0.42434045672416687},{\"\"x\"\":3.5999999046325684,\"\"y\"\":0.37111231684684753},{\"\"x\"\":4.099999904632568,\"\"y\"\":0.5581737160682678},{\"\"x\"\":4.599999904632568,\"\"y\"\":1.183590054512024},{\"\"x\"\":5.099999904632568,\"\"y\"\":1.5629843473434448},{\"\"x\"\":5.599999904632568,\"\"y\"\":2.3211288452148438},{\"\"x\"\":6.099999904632568,\"\"y\"\":2.229961633682251},{\"\"x\"\":6.599999904632568,\"\"y\"\":2.2560226917266846},{\"\"x\"\":7.099999904632568,\"\"y\"\":2.2142398357391357}]}],\"\"chartOptions\"\":{\"\"xAxisName\"\":\"\"Conc.\"\",\"\"yAxisName\"\":\"\"Activity\"\",\"\"title\"\":\"\"Dose-Response curves\"\"}}\",text,,\nCameroon,MIEVFLFGIVLGLIPITLAGLFVTAYLQYRRGDQLDL,COc1ccc2cc(ccc2c1)C(C)C(=O)OCCCc3cccnc3,1480016,36.26095962524414,995153596,30-56 WHITESTONE EXPY,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,\"COMPND \nATOM \nEND\",flag,3,3,2BDJ,3,1.23,<chart></chart>,\"{\"\"series\"\":[{\"\"name\"\":\"\"Run:2023-08-08\"\",\"\"fitFunction\"\":\"\"sigmoid\"\",\"\"fitLineColor\"\":\"\"#1f77b4\"\",\"\"pointColor\"\":\"\"#1f77b4\"\",\"\"showPoints\"\":\"\"points\"\",\"\"parameters\"\":[4.6760652578642325, 0.9046956320756703, 5.651408971856738, 0.07738846012184185],\"\"points\"\":[{\"\"x\"\":0.10000000149011612,\"\"y\"\":4.32425594329834},{\"\"x\"\":0.6000000238418579,\"\"y\"\":4.668442249298096},{\"\"x\"\":1.100000023841858,\"\"y\"\":4.379785060882568},{\"\"x\"\":1.600000023841858,\"\"y\"\":5.0345139503479},{\"\"x\"\":2.0999999046325684,\"\"y\"\":4.878653526306152},{\"\"x\"\":2.5999999046325684,\"\"y\"\":4.3451313972473145},{\"\"x\"\":3.0999999046325684,\"\"y\"\":4.336992263793945},{\"\"x\"\":3.5999999046325684,\"\"y\"\":5.037430286407471},{\"\"x\"\":4.099999904632568,\"\"y\"\":5.0092692375183105},{\"\"x\"\":4.599999904632568,\"\"y\"\":4.151902675628662},{\"\"x\"\":5.099999904632568,\"\"y\"\":3.4066951274871826},{\"\"x\"\":5.599999904632568,\"\"y\"\":2.3732759952545166},{\"\"x\"\":6.099999904632568,\"\"y\"\":1.673728108406067},{\"\"x\"\":6.599999904632568,\"\"y\"\":0.48574790358543396},{\"\"x\"\":7.099999904632568,\"\"y\"\":0.2783052325248718}]},{\"\"name\"\":\"\"Run:2023-08-08\"\",\"\"fitLineColor\"\":\"\"#ffbb78\"\",\"\"pointColor\"\":\"\"#ffbb78\"\",\"\"showPoints\"\":\"\"points\"\",\"\"parameters\"\":[2.938395863010111, -1.4658480661392117, 5.462702751996584, 0.3473139023615039],\"\"points\"\":[{\"\"x\"\":0.10000000149011612,\"\"y\"\":0.4941710829734802},{\"\"x\"\":0.6000000238418579,\"\"y\"\":0.15323974192142487},{\"\"x\"\":1.100000023841858,\"\"y\"\":0.46373432874679565},{\"\"x\"\":1.600000023841858,\"\"y\"\":0.3370431363582611},{\"\"x\"\":2.0999999046325684,\"\"y\"\":0.5179030299186707},{\"\"x\"\":2.5999999046325684,\"\"y\"\":0.27899765968322754},{\"\"x\"\":3.0999999046325684,\"\"y\"\":0.22075064480304718},{\"\"x\"\":3.5999999046325684,\"\"y\"\":0.5789918899536133},{\"\"x\"\":4.099999904632568,\"\"y\"\":0.21169911324977875},{\"\"x\"\":4.599999904632568,\"\"y\"\":0.27857646346092224},{\"\"x\"\":5.099999904632568,\"\"y\"\":1.0906332731246948},{\"\"x\"\":5.599999904632568,\"\"y\"\":1.8520300388336182},{\"\"x\"\":6.099999904632568,\"\"y\"\":2.7177059650421143},{\"\"x\"\":6.599999904632568,\"\"y\"\":2.8680918216705322},{\"\"x\"\":7.099999904632568,\"\"y\"\":3.2413077354431152}]}],\"\"chartOptions\"\":{\"\"xAxisName\"\":\"\"Conc.\"\",\"\"yAxisName\"\":\"\"Activity\"\",\"\"title\"\":\"\"Dose-Response curves\"\"}}\",text,,\nCanada,MMELVLKTIIGPIVVGVVLRIVDKWLNKDK,CC(C(=O)NCCS)c1cccc(c1)C(=O)c2ccccc2,1480017,36.26095962524414,99515,30-56 WHITESTONE EXPY,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,\"COMPND \nATOM \nEND\",flag,4,4,1IAN,4,1.23,<chart></chart>,\"{\"\"series\"\":[{\"\"name\"\":\"\"Run:2023-08-08\"\",\"\"fitFunction\"\":\"\"sigmoid\"\",\"\"fitLineColor\"\":\"\"#1f77b4\"\",\"\"pointColor\"\":\"\"#1f77b4\"\",\"\"showPoints\"\":\"\"points\"\",\"\"parameters\"\":[0.8597390975430008, 1.0957625732481946, 5.260537067987958, 0.07974187998177736],\"\"points\"\":[{\"\"x\"\":0.10000000149011612,\"\"y\"\":0.8190152645111084},{\"\"x\"\":0.6000000238418579,\"\"y\"\":0.8421689867973328},{\"\"x\"\":1.100000023841858,\"\"y\"\":0.8740922212600708},{\"\"x\"\":1.600000023841858,\"\"y\"\":0.8924275040626526},{\"\"x\"\":2.0999999046325684,\"\"y\"\":0.8249067664146423},{\"\"x\"\":2.5999999046325684,\"\"y\"\":0.9327669143676758},{\"\"x\"\":3.0999999046325684,\"\"y\"\":0.8522974252700806},{\"\"x\"\":3.5999999046325684,\"\"y\"\":0.8174492716789246},{\"\"x\"\":4.099999904632568,\"\"y\"\":0.8394647240638733},{\"\"x\"\":4.599999904632568,\"\"y\"\":0.7139387726783752},{\"\"x\"\":5.099999904632568,\"\"y\"\":0.5561167597770691},{\"\"x\"\":5.599999904632568,\"\"y\"\":0.3276226818561554},{\"\"x\"\":6.099999904632568,\"\"y\"\":0.12479474395513535},{\"\"x\"\":6.599999904632568,\"\"y\"\":0.13006797432899475},{\"\"x\"\":7.099999904632568,\"\"y\"\":0.059702079743146896}]},{\"\"name\"\":\"\"Run:2023-08-08\"\",\"\"fitLineColor\"\":\"\"#ffbb78\"\",\"\"pointColor\"\":\"\"#ffbb78\"\",\"\"showPoints\"\":\"\"points\"\",\"\"parameters\"\":[5.760930219582546, 1.6591793293833013, 4.667155929720851, 0.7858109544121652],\"\"points\"\":[{\"\"x\"\":0.10000000149011612,\"\"y\"\":6.156993389129639},{\"\"x\"\":0.6000000238418579,\"\"y\"\":5.236701965332031},{\"\"x\"\":1.100000023841858,\"\"y\"\":6.010560512542725},{\"\"x\"\":1.600000023841858,\"\"y\"\":5.495512962341309},{\"\"x\"\":2.0999999046325684,\"\"y\"\":6.087770462036133},{\"\"x\"\":2.5999999046325684,\"\"y\"\":5.79986572265625},{\"\"x\"\":3.0999999046325684,\"\"y\"\":5.597546577453613},{\"\"x\"\":3.5999999046325684,\"\"y\"\":5.520902156829834},{\"\"x\"\":4.099999904632568,\"\"y\"\":5.360654354095459},{\"\"x\"\":4.599999904632568,\"\"y\"\":3.5539746284484863},{\"\"x\"\":5.099999904632568,\"\"y\"\":1.577236294746399},{\"\"x\"\":5.599999904632568,\"\"y\"\":1.0001264810562134},{\"\"x\"\":6.099999904632568,\"\"y\"\":0.9305797815322876},{\"\"x\"\":6.599999904632568,\"\"y\"\":0.6033638715744019},{\"\"x\"\":7.099999904632568,\"\"y\"\":0.4203685522079468}]}],\"\"chartOptions\"\":{\"\"xAxisName\"\":\"\"Conc.\"\",\"\"yAxisName\"\":\"\"Activity\"\",\"\"title\"\":\"\"Dose-Response curves\"\"}}\",text,,\nColombia,MDRTDEVSNHTHDKPTLTWFEEIFEEYHSPFHN,FC(F)(F)c1ccc(OC2CCNCC2)cc1,1480029,36.3309440612793,995152050,1 COURT HOUSE SQUARE,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,\"COMPND \nATOM \nEND\",flag,5,5,4UJ1,5,1.23,<chart></chart>,\"{\"\"series\"\":[{\"\"name\"\":\"\"Run:2023-08-08\"\",\"\"fitFunction\"\":\"\"sigmoid\"\",\"\"fitLineColor\"\":\"\"#1f77b4\"\",\"\"pointColor\"\":\"\"#1f77b4\"\",\"\"showPoints\"\":\"\"points\"\",\"\"parameters\"\":[6.4995088314153655, 2.4270351004539914, 5.178659535348579, 0.625653346241577],\"\"points\"\":[{\"\"x\"\":0.10000000149011612,\"\"y\"\":6.496231555938721},{\"\"x\"\":0.6000000238418579,\"\"y\"\":6.42543363571167},{\"\"x\"\":1.100000023841858,\"\"y\"\":7.040063858032227},{\"\"x\"\":1.600000023841858,\"\"y\"\":6.1115403175354},{\"\"x\"\":2.0999999046325684,\"\"y\"\":6.680728435516357},{\"\"x\"\":2.5999999046325684,\"\"y\"\":6.406774520874023},{\"\"x\"\":3.0999999046325684,\"\"y\"\":6.611269474029541},{\"\"x\"\":3.5999999046325684,\"\"y\"\":5.889094352722168},{\"\"x\"\":4.099999904632568,\"\"y\"\":6.75344705581665},{\"\"x\"\":4.599999904632568,\"\"y\"\":6.361435890197754},{\"\"x\"\":5.099999904632568,\"\"y\"\":4.1666975021362305},{\"\"x\"\":5.599999904632568,\"\"y\"\":1.172118902206421},{\"\"x\"\":6.099999904632568,\"\"y\"\":0.801048994064331},{\"\"x\"\":6.599999904632568,\"\"y\"\":0.4640021026134491},{\"\"x\"\":7.099999904632568,\"\"y\"\":0.0010357667924836278}]},{\"\"name\"\":\"\"Run:2023-08-08\"\",\"\"fitLineColor\"\":\"\"#ffbb78\"\",\"\"pointColor\"\":\"\"#ffbb78\"\",\"\"showPoints\"\":\"\"points\"\",\"\"parameters\"\":[1.4734381347446401, 1.1649805188074196, 4.82958608866421, 0.09500545496710007],\"\"points\"\":[{\"\"x\"\":0.10000000149011612,\"\"y\"\":1.5279096364974976},{\"\"x\"\":0.6000000238418579,\"\"y\"\":1.3559974431991577},{\"\"x\"\":1.100000023841858,\"\"y\"\":1.5246378183364868},{\"\"x\"\":1.600000023841858,\"\"y\"\":1.5567657947540283},{\"\"x\"\":2.0999999046325684,\"\"y\"\":1.4114240407943726},{\"\"x\"\":2.5999999046325684,\"\"y\"\":1.4045010805130005},{\"\"x\"\":3.0999999046325684,\"\"y\"\":1.4769829511642456},{\"\"x\"\":3.5999999046325684,\"\"y\"\":1.4875500202178955},{\"\"x\"\":4.099999904632568,\"\"y\"\":1.2991987466812134},{\"\"x\"\":4.599999904632568,\"\"y\"\":0.922961413860321},{\"\"x\"\":5.099999904632568,\"\"y\"\":0.6520044803619385},{\"\"x\"\":5.599999904632568,\"\"y\"\":0.15350978076457977},{\"\"x\"\":6.099999904632568,\"\"y\"\":0.1078903079032898},{\"\"x\"\":6.599999904632568,\"\"y\"\":0.17276449501514435},{\"\"x\"\":7.099999904632568,\"\"y\"\":0.14066608250141144}]}],\"\"chartOptions\"\":{\"\"xAxisName\"\":\"\"Conc.\"\",\"\"yAxisName\"\":\"\"Activity\"\",\"\"title\"\":\"\"Dose-Response curves\"\"}}\",text,,\nCosta Rica,MKSTKEEIQTIKTLLKDSRTAKYHKRLQIVL,CC(C)Cc1ccc(cc1)C(C)C(=O)N2CCCC2C(=O)OCCCc3ccccc3,1480018,36.3309440612793,995084218,4041 SOUTHWESTERN BLVD,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,\"COMPND \nATOM \nEND\",flag,6,6,2BPW,6,1.23,<chart></chart>,\"{\"\"series\"\":[{\"\"name\"\":\"\"Run:2023-08-08\"\",\"\"fitFunction\"\":\"\"sigmoid\"\",\"\"fitLineColor\"\":\"\"#1f77b4\"\",\"\"pointColor\"\":\"\"#1f77b4\"\",\"\"showPoints\"\":\"\"points\"\",\"\"parameters\"\":[2.4833641843311227, -1.8945978742090062, 4.671127708092568, 0.24159861311815153],\"\"points\"\":[{\"\"x\"\":0.10000000149011612,\"\"y\"\":0.0969524160027504},{\"\"x\"\":0.6000000238418579,\"\"y\"\":0.028483040630817413},{\"\"x\"\":1.100000023841858,\"\"y\"\":0.22087176144123077},{\"\"x\"\":1.600000023841858,\"\"y\"\":0.0068915546871721745},{\"\"x\"\":2.0999999046325684,\"\"y\"\":0.4305879771709442},{\"\"x\"\":2.5999999046325684,\"\"y\"\":0.44774115085601807},{\"\"x\"\":3.0999999046325684,\"\"y\"\":0.45346319675445557},{\"\"x\"\":3.5999999046325684,\"\"y\"\":0.2370593100786209},{\"\"x\"\":4.099999904632568,\"\"y\"\":0.4657953977584839},{\"\"x\"\":4.599999904632568,\"\"y\"\":1.155200719833374},{\"\"x\"\":5.099999904632568,\"\"y\"\":2.2294070720672607},{\"\"x\"\":5.599999904632568,\"\"y\"\":2.4311530590057373},{\"\"x\"\":6.099999904632568,\"\"y\"\":2.33846116065979},{\"\"x\"\":6.599999904632568,\"\"y\"\":2.608201026916504},{\"\"x\"\":7.099999904632568,\"\"y\"\":2.8136143684387207}]},{\"\"name\"\":\"\"Run:2023-08-08\"\",\"\"fitLineColor\"\":\"\"#ffbb78\"\",\"\"pointColor\"\":\"\"#ffbb78\"\",\"\"showPoints\"\":\"\"points\"\",\"\"parameters\"\":[5.224573521642033, 1.4454033924198528, 5.6014197746076535, 0.2823216054197577],\"\"points\"\":[{\"\"x\"\":0.10000000149011612,\"\"y\"\":4.95027494430542},{\"\"x\"\":0.6000000238418579,\"\"y\"\":5.1754679679870605},{\"\"x\"\":1.100000023841858,\"\"y\"\":5.276752948760986},{\"\"x\"\":1.600000023841858,\"\"y\"\":5.589294910430908},{\"\"x\"\":2.0999999046325684,\"\"y\"\":5.616994857788086},{\"\"x\"\":2.5999999046325684,\"\"y\"\":5.120813846588135},{\"\"x\"\":3.0999999046325684,\"\"y\"\":5.340766906738281},{\"\"x\"\":3.5999999046325684,\"\"y\"\":4.876471042633057},{\"\"x\"\":4.099999904632568,\"\"y\"\":4.94999361038208},{\"\"x\"\":4.599999904632568,\"\"y\"\":5.162564754486084},{\"\"x\"\":5.099999904632568,\"\"y\"\":4.399557590484619},{\"\"x\"\":5.599999904632568,\"\"y\"\":2.7977969646453857},{\"\"x\"\":6.099999904632568,\"\"y\"\":1.0229872465133667},{\"\"x\"\":6.599999904632568,\"\"y\"\":0.48275601863861084},{\"\"x\"\":7.099999904632568,\"\"y\"\":0.10408931970596313}]}],\"\"chartOptions\"\":{\"\"xAxisName\"\":\"\"Conc.\"\",\"\"yAxisName\"\":\"\"Activity\"\",\"\"title\"\":\"\"Dose-Response curves\"\"}}\",text,,\nCuba,MHAILRYFIRRLFYHIFYKIYSLISKKHQSLPSDVRQF,COc1ccc2c(c1)c(CC(=O)N3CCCC3C(=O)Oc4ccc(C)cc4OC)c(C)n2C(=O)c5ccc(Cl)cc5,1480019,36.33115768432617,995081928,1227 US HIGHWAY 11,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,\"COMPND \nATOM \nEND\",flag,7,7,1QBS,7,1.23,<chart></chart>,\"{\"\"series\"\":[{\"\"name\"\":\"\"Run:2023-08-08\"\",\"\"fitFunction\"\":\"\"sigmoid\"\",\"\"fitLineColor\"\":\"\"#1f77b4\"\",\"\"pointColor\"\":\"\"#1f77b4\"\",\"\"showPoints\"\":\"\"points\"\",\"\"parameters\"\":[3.320838679713925, -1.2421619987316728, 4.831325425225256, 0.3236011098403072],\"\"points\"\":[{\"\"x\"\":0.10000000149011612,\"\"y\"\":0.3727470338344574},{\"\"x\"\":0.6000000238418579,\"\"y\"\":0.12365014106035233},{\"\"x\"\":1.100000023841858,\"\"y\"\":0.48422467708587646},{\"\"x\"\":1.600000023841858,\"\"y\"\":0.2264465093612671},{\"\"x\"\":2.0999999046325684,\"\"y\"\":0.16821794211864471},{\"\"x\"\":2.5999999046325684,\"\"y\"\":0.3879014551639557},{\"\"x\"\":3.0999999046325684,\"\"y\"\":0.5470244884490967},{\"\"x\"\":3.5999999046325684,\"\"y\"\":0.3419053554534912},{\"\"x\"\":4.099999904632568,\"\"y\"\":0.7655120491981506},{\"\"x\"\":4.599999904632568,\"\"y\"\":1.2346516847610474},{\"\"x\"\":5.099999904632568,\"\"y\"\":2.453336715698242},{\"\"x\"\":5.599999904632568,\"\"y\"\":2.9565491676330566},{\"\"x\"\":6.099999904632568,\"\"y\"\":3.335299491882324},{\"\"x\"\":6.599999904632568,\"\"y\"\":3.240290880203247},{\"\"x\"\":7.099999904632568,\"\"y\"\":3.1107218265533447}]},{\"\"name\"\":\"\"Run:2023-08-08\"\",\"\"fitLineColor\"\":\"\"#ffbb78\"\",\"\"pointColor\"\":\"\"#ffbb78\"\",\"\"showPoints\"\":\"\"points\"\",\"\"parameters\"\":[3.6401853521511094, 1.26211588875013, 5.399028074402744, 0.5089580830068091],\"\"points\"\":[{\"\"x\"\":0.10000000149011612,\"\"y\"\":3.8585598468780518},{\"\"x\"\":0.6000000238418579,\"\"y\"\":3.6077206134796143},{\"\"x\"\":1.100000023841858,\"\"y\"\":3.855252265930176},{\"\"x\"\":1.600000023841858,\"\"y\"\":3.619039297103882},{\"\"x\"\":2.0999999046325684,\"\"y\"\":3.839388370513916},{\"\"x\"\":2.5999999046325684,\"\"y\"\":3.335283041000366},{\"\"x\"\":3.0999999046325684,\"\"y\"\":3.571141481399536},{\"\"x\"\":3.5999999046325684,\"\"y\"\":3.4155046939849854},{\"\"x\"\":4.099999904632568,\"\"y\"\":3.7316646575927734},{\"\"x\"\":4.599999904632568,\"\"y\"\":3.0680155754089355},{\"\"x\"\":5.099999904632568,\"\"y\"\":2.891066551208496},{\"\"x\"\":5.599999904632568,\"\"y\"\":1.6022753715515137},{\"\"x\"\":6.099999904632568,\"\"y\"\":0.7652576565742493},{\"\"x\"\":6.599999904632568,\"\"y\"\":0.6875326037406921},{\"\"x\"\":7.099999904632568,\"\"y\"\":0.5828871726989746}]}],\"\"chartOptions\"\":{\"\"xAxisName\"\":\"\"Conc.\"\",\"\"yAxisName\"\":\"\"Activity\"\",\"\"title\"\":\"\"Dose-Response curves\"\"}}\",text,,\nItaly,MSNFHNEHVMQFYRNNLKTKGVFGRQ,CC(C)Cc1ccc(cc1)C(C)C(=O)N2CCCC2C(=O)OCCO[N+](=O)[O-],1480020,36.33115768432617,99502,\"168-46 91ST AVE., 2ND FLR\",https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,\"COMPND \nATOM \nEND\",flag,8,8,1ZP8,8,1.23,<chart></chart>,\"{\"\"series\"\":[{\"\"name\"\":\"\"Run:2023-08-08\"\",\"\"fitFunction\"\":\"\"sigmoid\"\",\"\"fitLineColor\"\":\"\"#1f77b4\"\",\"\"pointColor\"\":\"\"#1f77b4\"\",\"\"showPoints\"\":\"\"points\"\",\"\"parameters\"\":[2.293592105923809, 1.3781586549141835, 5.1025898038676605, 0.03493851245291291],\"\"points\"\":[{\"\"x\"\":0.10000000149011612,\"\"y\"\":2.1287283897399902},{\"\"x\"\":0.6000000238418579,\"\"y\"\":2.267972230911255},{\"\"x\"\":1.100000023841858,\"\"y\"\":2.398442506790161},{\"\"x\"\":1.600000023841858,\"\"y\"\":2.5130622386932373},{\"\"x\"\":2.0999999046325684,\"\"y\"\":2.3255116939544678},{\"\"x\"\":2.5999999046325684,\"\"y\"\":2.127340793609619},{\"\"x\"\":3.0999999046325684,\"\"y\"\":2.47259783744812},{\"\"x\"\":3.5999999046325684,\"\"y\"\":2.131181478500366},{\"\"x\"\":4.099999904632568,\"\"y\"\":2.090421438217163},{\"\"x\"\":4.599999904632568,\"\"y\"\":2.02299165725708},{\"\"x\"\":5.099999904632568,\"\"y\"\":1.1105059385299683},{\"\"x\"\":5.599999904632568,\"\"y\"\":0.4494485855102539},{\"\"x\"\":6.099999904632568,\"\"y\"\":0.1375635862350464},{\"\"x\"\":6.599999904632568,\"\"y\"\":0.036351121962070465},{\"\"x\"\":7.099999904632568,\"\"y\"\":0.1619771122932434}]},{\"\"name\"\":\"\"Run:2023-08-08\"\",\"\"fitLineColor\"\":\"\"#ffbb78\"\",\"\"pointColor\"\":\"\"#ffbb78\"\",\"\"showPoints\"\":\"\"points\"\",\"\"parameters\"\":[5.953125499439879, 1.2528620255306528, 5.187637440149802, 0.3110348753260886],\"\"points\"\":[{\"\"x\"\":0.10000000149011612,\"\"y\"\":5.6585283279418945},{\"\"x\"\":0.6000000238418579,\"\"y\"\":5.911152362823486},{\"\"x\"\":1.100000023841858,\"\"y\"\":5.924920082092285},{\"\"x\"\":1.600000023841858,\"\"y\"\":5.8469438552856445},{\"\"x\"\":2.0999999046325684,\"\"y\"\":5.929472923278809},{\"\"x\"\":2.5999999046325684,\"\"y\"\":6.190037727355957},{\"\"x\"\":3.0999999046325684,\"\"y\"\":6.236179828643799},{\"\"x\"\":3.5999999046325684,\"\"y\"\":6.141019344329834},{\"\"x\"\":4.099999904632568,\"\"y\"\":5.295210838317871},{\"\"x\"\":4.599999904632568,\"\"y\"\":5.265801906585693},{\"\"x\"\":5.099999904632568,\"\"y\"\":3.3722851276397705},{\"\"x\"\":5.599999904632568,\"\"y\"\":1.8299226760864258},{\"\"x\"\":6.099999904632568,\"\"y\"\":0.32690900564193726},{\"\"x\"\":6.599999904632568,\"\"y\"\":0.6274543404579163},{\"\"x\"\":7.099999904632568,\"\"y\"\":0.8441857099533081}]}],\"\"chartOptions\"\":{\"\"xAxisName\"\":\"\"Conc.\"\",\"\"yAxisName\"\":\"\"Activity\"\",\"\"title\"\":\"\"Dose-Response curves\"\"}}\",text,,\nRwanda,MPNSEPASLLELFNSIATQGELVRSLKAGNASK,CC(C)Cc1ccc(cc1)C(C)C(=O)N2CCCC2C(=O)OCCO,1480021,36.33137130737305,995037247,\"168-46 91ST AVE., 2ND FLR\",https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,\"COMPND \nATOM \nEND\",flag,9,9,2BDJ,9,1.23,<chart></chart>,\"{\"\"series\"\":[{\"\"name\"\":\"\"Run:2023-08-08\"\",\"\"fitFunction\"\":\"\"sigmoid\"\",\"\"fitLineColor\"\":\"\"#1f77b4\"\",\"\"pointColor\"\":\"\"#1f77b4\"\",\"\"showPoints\"\":\"\"points\"\",\"\"parameters\"\":[3.8209972202654474, 1.3779216716448506, 5.299882228439686, 0.06040645519069608],\"\"points\"\":[{\"\"x\"\":0.10000000149011612,\"\"y\"\":3.7821109294891357},{\"\"x\"\":0.6000000238418579,\"\"y\"\":3.542433023452759},{\"\"x\"\":1.100000023841858,\"\"y\"\":3.7008674144744873},{\"\"x\"\":1.600000023841858,\"\"y\"\":3.717301607131958},{\"\"x\"\":2.0999999046325684,\"\"y\"\":4.024452209472656},{\"\"x\"\":2.5999999046325684,\"\"y\"\":4.013899326324463},{\"\"x\"\":3.0999999046325684,\"\"y\"\":3.945094347000122},{\"\"x\"\":3.5999999046325684,\"\"y\"\":3.866621971130371},{\"\"x\"\":4.099999904632568,\"\"y\"\":3.7461626529693604},{\"\"x\"\":4.599999904632568,\"\"y\"\":3.3454740047454834},{\"\"x\"\":5.099999904632568,\"\"y\"\":2.61944317817688},{\"\"x\"\":5.599999904632568,\"\"y\"\":0.999405026435852},{\"\"x\"\":6.099999904632568,\"\"y\"\":0.46259793639183044},{\"\"x\"\":6.599999904632568,\"\"y\"\":0.054134611040353775},{\"\"x\"\":7.099999904632568,\"\"y\"\":0.05711187422275543}]},{\"\"name\"\":\"\"Run:2023-08-08\"\",\"\"fitLineColor\"\":\"\"#ffbb78\"\",\"\"pointColor\"\":\"\"#ffbb78\"\",\"\"showPoints\"\":\"\"points\"\",\"\"parameters\"\":[5.6318079657726035, 1.8495493770000595, 5.391793312471116, 0.17060707587348442],\"\"points\"\":[{\"\"x\"\":0.10000000149011612,\"\"y\"\":5.458079814910889},{\"\"x\"\":0.6000000238418579,\"\"y\"\":5.554427146911621},{\"\"x\"\":1.100000023841858,\"\"y\"\":5.799983024597168},{\"\"x\"\":1.600000023841858,\"\"y\"\":5.364140033721924},{\"\"x\"\":2.0999999046325684,\"\"y\"\":5.864485740661621},{\"\"x\"\":2.5999999046325684,\"\"y\"\":5.4509806632995605},{\"\"x\"\":3.0999999046325684,\"\"y\"\":5.702574729919434},{\"\"x\"\":3.5999999046325684,\"\"y\"\":5.7314534187316895},{\"\"x\"\":4.099999904632568,\"\"y\"\":5.5123443603515625},{\"\"x\"\":4.599999904632568,\"\"y\"\":5.724395751953125},{\"\"x\"\":5.099999904632568,\"\"y\"\":4.354506969451904},{\"\"x\"\":5.599999904632568,\"\"y\"\":1.7307666540145874},{\"\"x\"\":6.099999904632568,\"\"y\"\":0.6305936574935913},{\"\"x\"\":6.599999904632568,\"\"y\"\":0.035183437168598175},{\"\"x\"\":7.099999904632568,\"\"y\"\":0.7575169205665588}]}],\"\"chartOptions\"\":{\"\"xAxisName\"\":\"\"Conc.\"\",\"\"yAxisName\"\":\"\"Activity\"\",\"\"title\"\":\"\"Dose-Response curves\"\"}}\",text,,\nSwitzerland,IRVVGRYLIEVWKAAGMDMDKVLFLWSSDEI,CN1CCC(CC1)Oc2ccc(cc2)C(F)(F)F,1480028,36.33137130737305,99504,92-11 179TH PLACE,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,\"COMPND \nATOM \nEND\",flag,9,10,1IAN,10,1.23,<chart></chart>,\"{\"\"series\"\":[{\"\"name\"\":\"\"Run:2023-08-08\"\",\"\"fitFunction\"\":\"\"sigmoid\"\",\"\"fitLineColor\"\":\"\"#1f77b4\"\",\"\"pointColor\"\":\"\"#1f77b4\"\",\"\"showPoints\"\":\"\"points\"\",\"\"parameters\"\":[1.1190255865097471, 2.3163895161544437, 5.4968866182279195, 0.2035204047289052],\"\"points\"\":[{\"\"x\"\":0.10000000149011612,\"\"y\"\":1.1057683229446411},{\"\"x\"\":0.6000000238418579,\"\"y\"\":1.1019697189331055},{\"\"x\"\":1.100000023841858,\"\"y\"\":1.0818607807159424},{\"\"x\"\":1.600000023841858,\"\"y\"\":1.062997817993164},{\"\"x\"\":2.0999999046325684,\"\"y\"\":1.046447515487671},{\"\"x\"\":2.5999999046325684,\"\"y\"\":1.1217249631881714},{\"\"x\"\":3.0999999046325684,\"\"y\"\":1.2166996002197266},{\"\"x\"\":3.5999999046325684,\"\"y\"\":1.215477705001831},{\"\"x\"\":4.099999904632568,\"\"y\"\":1.0581893920898438},{\"\"x\"\":4.599999904632568,\"\"y\"\":1.1747995615005493},{\"\"x\"\":5.099999904632568,\"\"y\"\":1.0181127786636353},{\"\"x\"\":5.599999904632568,\"\"y\"\":0.5344523191452026},{\"\"x\"\":6.099999904632568,\"\"y\"\":0.2569526433944702},{\"\"x\"\":6.599999904632568,\"\"y\"\":0.1912207305431366},{\"\"x\"\":7.099999904632568,\"\"y\"\":0.15060538053512573}]},{\"\"name\"\":\"\"Run:2023-08-08\"\",\"\"fitLineColor\"\":\"\"#ffbb78\"\",\"\"pointColor\"\":\"\"#ffbb78\"\",\"\"showPoints\"\":\"\"points\"\",\"\"parameters\"\":[3.1038581025805785, 2.0032224204185245, 5.087602825989163, 0.13277988512492753],\"\"points\"\":[{\"\"x\"\":0.10000000149011612,\"\"y\"\":3.0498509407043457},{\"\"x\"\":0.6000000238418579,\"\"y\"\":2.805217742919922},{\"\"x\"\":1.100000023841858,\"\"y\"\":3.3415253162384033},{\"\"x\"\":1.600000023841858,\"\"y\"\":3.0549843311309814},{\"\"x\"\":2.0999999046325684,\"\"y\"\":3.250074863433838},{\"\"x\"\":2.5999999046325684,\"\"y\"\":3.0432586669921875},{\"\"x\"\":3.0999999046325684,\"\"y\"\":3.265852451324463},{\"\"x\"\":3.5999999046325684,\"\"y\"\":2.9475724697113037},{\"\"x\"\":4.099999904632568,\"\"y\"\":3.1929898262023926},{\"\"x\"\":4.599999904632568,\"\"y\"\":2.7460060119628906},{\"\"x\"\":5.099999904632568,\"\"y\"\":1.6175861358642578},{\"\"x\"\":5.599999904632568,\"\"y\"\":0.3006608486175537},{\"\"x\"\":6.099999904632568,\"\"y\"\":0.3444803059101105},{\"\"x\"\":6.599999904632568,\"\"y\"\":0.015537971630692482},{\"\"x\"\":7.099999904632568,\"\"y\"\":0.5527358055114746}]}],\"\"chartOptions\"\":{\"\"xAxisName\"\":\"\"Conc.\"\",\"\"yAxisName\"\":\"\"Activity\"\",\"\"title\"\":\"\"Dose-Response curves\"\"}}\",text,,\n,,,,,,,,,,,,,,,,,,,,,`);\ntestData.columns.add(DG.Column.fromList(DG.TYPE.BYTE_ARRAY, 'BinaryImage', Array.from(new Uint8Array(11))));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWZyYW1lLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGF0YWZyYW1lLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sS0FBSyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ3RDOzs7R0FHRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxLQUFvQixFQUFFLEdBQWU7SUFDekUsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQztJQUM1QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDMUYsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0lBQzVCLElBQUksa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3ZDLElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNwQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsQ0FBQztZQUM1QyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekIsa0JBQWtCLElBQUksQ0FBQyxDQUFDO1NBQ3pCO0tBQ0Y7SUFDRCxPQUFPLGdCQUFnQixDQUFDO0FBQzFCLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLEtBQW9CLEVBQUUsS0FBZ0I7SUFDbEUsS0FBSyxhQUFMLEtBQUssY0FBTCxLQUFLLElBQUwsS0FBSyxHQUFLLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUM7SUFDaEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDakMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBQ2xDLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFO1FBQ3hCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN0QyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQy9DLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFDL0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDekMsSUFBSSxRQUFRLEVBQUU7Z0JBQ1osTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2QyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUNyQztpQkFBTTtnQkFDTCxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pDLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN4QztTQUNGO0tBQ0Y7SUFDRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN6QixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3NCQStCdkIsQ0FBQyxDQUFDO0FBQ3hCLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLGFBQWEsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuaW1wb3J0IHR5cGUgKiBhcyBfREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmRlY2xhcmUgbGV0IERHOiB0eXBlb2YgX0RHO1xuaW1wb3J0ICogYXMgc2hhMjU2IGZyb20gJ2Zhc3Qtc2hhMjU2Jztcbi8qKlxuICogRm9yIGNvbHVtbnMgb2Ygc3RyaW5nIHR5cGUuIENoZWNrcyB3aGV0aGVyIGNvbHVtbiBjb250YWlucyBlbXB0eSB2YWx1ZXMgYW5kIHJlbW92ZXMgY29ycmVzcG9uZGluZyByb3dzIGluIGNhc2UgdXNlciBzZWxlY3RzIHRvIHJlbW92ZS5cbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVFbXB0eVN0cmluZ1Jvd3ModGFibGU6IF9ERy5EYXRhRnJhbWUsIGNvbDogX0RHLkNvbHVtbik6IG51bWJlcltdIHtcbiAgY29uc3QgY2F0cyA9IGNvbC5jYXRlZ29yaWVzO1xuICBjb25zdCBlbXB0eVJhd0luZCA9IGNhdHMubWFwKCh2YWwsIGluZCkgPT4gIXZhbCA/IGluZCA6IG51bGwpLmZpbHRlcigoaXQpID0+IGl0ICE9PSBudWxsKTtcbiAgY29uc3QgcmF3RGF0YSA9IFsuLi5jb2wuZ2V0UmF3RGF0YSgpXTtcbiAgY29uc3QgZW1wdHlSYXdzSW5kZXhlcyA9IFtdO1xuICBsZXQgcmVtb3ZlZFJvd3NDb3VudGVyID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWJsZS5yb3dDb3VudDsgaSsrKSB7XG4gICAgaWYgKGVtcHR5UmF3SW5kLmluY2x1ZGVzKHJhd0RhdGFbaV0pKSB7XG4gICAgICB0YWJsZS5yb3dzLnJlbW92ZUF0KGkgLSByZW1vdmVkUm93c0NvdW50ZXIpO1xuICAgICAgZW1wdHlSYXdzSW5kZXhlcy5wdXNoKGkpO1xuICAgICAgcmVtb3ZlZFJvd3NDb3VudGVyICs9IDE7XG4gICAgfVxuICB9XG4gIHJldHVybiBlbXB0eVJhd3NJbmRleGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzaERhdGFGcmFtZSh0YWJsZTogX0RHLkRhdGFGcmFtZSwgbmFtZXM/OiBzdHJpbmdbXSk6IFVpbnQ4QXJyYXkge1xuICBuYW1lcyA/Pz0gdGFibGUuY29sdW1ucy5uYW1lcygpO1xuICBjb25zdCBoYXNoZXIgPSBuZXcgc2hhMjU2Lkhhc2goKTtcbiAgY29uc3Qgb3JkZXIgPSB0YWJsZS5nZXRTb3J0ZWRPcmRlcihuYW1lcyk7XG4gIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgZm9yIChjb25zdCBuYW1lIG9mIG5hbWVzKSB7XG4gICAgY29uc3QgY29sdW1uID0gdGFibGUuY29sdW1ucy5ieU5hbWUobmFtZSk7XG4gICAgY29uc3QgZGF0YUFycmF5ID0gY29sdW1uLmdldFJhd0RhdGEoKTtcbiAgICBjb25zdCBpc1N0cmluZyA9IGNvbHVtbi50eXBlID09IERHLlRZUEUuU1RSSU5HO1xuICAgIGNvbnN0IGNhdHMgPSBjb2x1bW4uY2F0ZWdvcmllcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGFBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGlzU3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBjYXRzW2RhdGFBcnJheVtvcmRlcltpXV1dO1xuICAgICAgICBoYXNoZXIudXBkYXRlKGVuY29kZXIuZW5jb2RlKGRhdGEpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBkYXRhQXJyYXlbb3JkZXJbaV1dO1xuICAgICAgICBoYXNoZXIudXBkYXRlKFVpbnQ4QXJyYXkuZnJvbShbZGF0YV0pKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGhhc2hlci5kaWdlc3QoKTtcbn1cblxuZXhwb3J0IGNvbnN0IHRlc3REYXRhID0gREcuRGF0YUZyYW1lLmZyb21Dc3YoYGNvdW50cmllcyxmYXN0YSxzbWlsZXMsbW9scmVnbm8sTE9OLFppcCBDb2RlLFN0cmVldCBBZGRyZXNzIExpbmUgMSxJbWFnZVVybCx1c2VyX2lkLGVycm9yX21lc3NhZ2UseHJheSxmbGFnLG1hZ25pdHVkZSxDUy1pZCxwZGJfaWQsYWNjZWxfYSx0aW1lX29mZnNldCxjaGFydCxmaXQsUXVlc3Rpb25zLGVtcHR5X251bWJlcixlbXB0eV9zdHJpbmdcbkJlbGdpdW0sTVNORkhORUhWTVFGWVJOTkxLVEtHVkZHUlEsQ0MoQyg9TylPQ0NDYzFjY2NuYzEpYzJjY2NjKGMyKUMoPU8pYzNjY2NjYzMsMTQ4MDAxNCwzNi4yNzY3Mjk1ODM3NDAyMzQsOTk1MDQyMzAwLDE0MDE2IFJPVVRFIDMxVyxodHRwczovL2RhdGFncm9rLmFpL2ltZy9zbGlkZXMvYWNjZXNzLWRiLWNvbm5lY3QucG5nLGlkLEVycm9yTWVzc2FnZSxcIkNPTVBORCBcbkFUT00gXG5FTkRcIixmbGFnLDEsMSwxUUJTLDEsMS4yMyw8Y2hhcnQ+PC9jaGFydD4sXCJ7XCJcInNlcmllc1wiXCI6W3tcIlwibmFtZVwiXCI6XCJcIlJ1bjoyMDIzLTA4LTA4XCJcIixcIlwiZml0RnVuY3Rpb25cIlwiOlwiXCJzaWdtb2lkXCJcIixcIlwiZml0TGluZUNvbG9yXCJcIjpcIlwiIzFmNzdiNFwiXCIsXCJcInBvaW50Q29sb3JcIlwiOlwiXCIjMWY3N2I0XCJcIixcIlwic2hvd1BvaW50c1wiXCI6XCJcInBvaW50c1wiXCIsXCJcInBhcmFtZXRlcnNcIlwiOlsyLjQ5NzM2MDM0MDY0NDg3MiwgMS43MDU4Njk0OTg2Njg2ODY0LCA1LjI3ODA1MjY3ODE5NTEzNSwgMC4xNjAwMDMyMDg4OTAyODM4M10sXCJcInBvaW50c1wiXCI6W3tcIlwieFwiXCI6MC4xMDAwMDAwMDE0OTAxMTYxMixcIlwieVwiXCI6Mi4zNzQ0OTk3OTc4MjEwNDV9LHtcIlwieFwiXCI6MC42MDAwMDAwMjM4NDE4NTc5LFwiXCJ5XCJcIjoyLjYyNDI0NzMxMjU0NTc3NjR9LHtcIlwieFwiXCI6MS4xMDAwMDAwMjM4NDE4NTgsXCJcInlcIlwiOjIuMzY3MjY3NjA4NjQyNTc4fSx7XCJcInhcIlwiOjEuNjAwMDAwMDIzODQxODU4LFwiXCJ5XCJcIjoyLjY3MjMxNDg4MjI3ODQ0MjR9LHtcIlwieFwiXCI6Mi4wOTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjoyLjY1MzczNDQ0NTU3MTg5OTR9LHtcIlwieFwiXCI6Mi41OTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjoyLjM2NTE2NzE0MDk2MDY5MzR9LHtcIlwieFwiXCI6My4wOTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjoyLjU2NTQyODQ5NTQwNzEwNDV9LHtcIlwieFwiXCI6My41OTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjoyLjQxNjA5NTk3MjA2MTE1NzJ9LHtcIlwieFwiXCI6NC4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjIuMjg2NzI2NzEzMTgwNTQyfSx7XCJcInhcIlwiOjQuNTk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjoyLjUxMDAwNDI4MTk5NzY4MDd9LHtcIlwieFwiXCI6NS4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjEuNjY3Njk4NTAyNTQwNTg4NH0se1wiXCJ4XCJcIjo1LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC42ODAxMzY1MDE3ODkwOTN9LHtcIlwieFwiXCI6Ni4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuMzM5MTU0MzkyNDgwODUwMn0se1wiXCJ4XCJcIjo2LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC4wOTAzODk4MzI4NTQyNzA5NH0se1wiXCJ4XCJcIjo3LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC4xOTgwMjc3NTk3OTA0MjA1M31dfSx7XCJcIm5hbWVcIlwiOlwiXCJSdW46MjAyMy0wOC0wOFwiXCIsXCJcImZpdExpbmVDb2xvclwiXCI6XCJcIiNmZmJiNzhcIlwiLFwiXCJwb2ludENvbG9yXCJcIjpcIlwiI2ZmYmI3OFwiXCIsXCJcInNob3dQb2ludHNcIlwiOlwiXCJwb2ludHNcIlwiLFwiXCJwYXJhbWV0ZXJzXCJcIjpbNy41MjUyMzU4NTU1MDgxNzksIDEuMzE4NjkxMTg3NjgwOTk4NCwgNS4zMzU2NzI2MDg1NjQyOTQsIDAuNzg2MDc0MzM0Mzk1ODA5OF0sXCJcInBvaW50c1wiXCI6W3tcIlwieFwiXCI6MC4xMDAwMDAwMDE0OTAxMTYxMixcIlwieVwiXCI6Ny45ODgwNzA0ODc5NzYwNzR9LHtcIlwieFwiXCI6MC42MDAwMDAwMjM4NDE4NTc5LFwiXCJ5XCJcIjo3LjAxODQ1MzEyMTE4NTMwM30se1wiXCJ4XCJcIjoxLjEwMDAwMDAyMzg0MTg1OCxcIlwieVwiXCI6OC4xMTUyNzkxOTc2OTI4NzF9LHtcIlwieFwiXCI6MS42MDAwMDAwMjM4NDE4NTgsXCJcInlcIlwiOjcuNDg2NjU4MDk2MzEzNDc3fSx7XCJcInhcIlwiOjIuMDk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6Ny4zOTY0MzgxMjE3OTU2NTR9LHtcIlwieFwiXCI6Mi41OTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjo3LjQ3NzA1MjIxMTc2MTQ3NX0se1wiXCJ4XCJcIjozLjA5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjYuOTEzMDk1NDc0MjQzMTY0fSx7XCJcInhcIlwiOjMuNTk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6OC4wMTM4NTQ5ODA0Njg3NX0se1wiXCJ4XCJcIjo0LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6Ni45ODU5MDA0MDIwNjkwOTJ9LHtcIlwieFwiXCI6NC41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjYuOTcwMzM1OTYwMzg4MTg0fSx7XCJcInhcIlwiOjUuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjo1LjQ0ODgxNzI1MzExMjc5M30se1wiXCJ4XCJcIjo1LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6Mi41NTM0ODE4MTcyNDU0ODM0fSx7XCJcInhcIlwiOjYuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjoxLjg5Mzk0Nzk1ODk0NjIyOH0se1wiXCJ4XCJcIjo2LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC42MzQwMDQyMzUyNjc2MzkyfSx7XCJcInhcIlwiOjcuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjowLjg0MDM4NzQwMzk2NDk5NjN9XX1dLFwiXCJjaGFydE9wdGlvbnNcIlwiOntcIlwieEF4aXNOYW1lXCJcIjpcIlwiQ29uYy5cIlwiLFwiXCJ5QXhpc05hbWVcIlwiOlwiXCJBY3Rpdml0eVwiXCIsXCJcInRpdGxlXCJcIjpcIlwiRG9zZS1SZXNwb25zZSBjdXJ2ZXNcIlwifX1cIix0ZXh0LDEwMCxhYmNcbkJ1cnVuZGksTURZS0VUTExNUEtUREZQTVJHR0xQTktFUFFJUUVLVyxDT2MxY2NjMmNjKGNjYzJjMSlDKEMpQyg9TylPYzNjY2MoQyljYzNPQywxNDgwMDE1LDM2LjI3NjcyOTU4Mzc0MDIzNCw5OTUwNzM0NDQsODAgU1RBVEUgSElHSFdBWSAzMTAsaHR0cHM6Ly9kYXRhZ3Jvay5haS9pbWcvc2xpZGVzL2FjY2Vzcy1kYi1jb25uZWN0LnBuZyxpZCxFcnJvck1lc3NhZ2UsXCJDT01QTkQgXG5BVE9NIFxuRU5EXCIsZmxhZywyLDIsMVpQOCwyLDEuMjMsPGNoYXJ0PjwvY2hhcnQ+LFwie1wiXCJzZXJpZXNcIlwiOlt7XCJcIm5hbWVcIlwiOlwiXCJSdW46MjAyMy0wOC0wOFwiXCIsXCJcImZpdEZ1bmN0aW9uXCJcIjpcIlwic2lnbW9pZFwiXCIsXCJcImZpdExpbmVDb2xvclwiXCI6XCJcIiMxZjc3YjRcIlwiLFwiXCJwb2ludENvbG9yXCJcIjpcIlwiIzFmNzdiNFwiXCIsXCJcInNob3dQb2ludHNcIlwiOlwiXCJwb2ludHNcIlwiLFwiXCJwYXJhbWV0ZXJzXCJcIjpbNC40MzE0NjA3NTMxMDMzOTgsIDIuMTY5MTQ5ODc5OTI0Njc0NSwgNS4yNjY0NDU1OTcxMDI3NzQsIDAuNzgyNTc2MjgyNzAxNzkyNl0sXCJcInBvaW50c1wiXCI6W3tcIlwieFwiXCI6MC4xMDAwMDAwMDE0OTAxMTYxMixcIlwieVwiXCI6NC43NTEwODM4NTA4NjA1OTZ9LHtcIlwieFwiXCI6MC42MDAwMDAwMjM4NDE4NTc5LFwiXCJ5XCJcIjo0LjIwMzAwMDA2ODY2NDU1MX0se1wiXCJ4XCJcIjoxLjEwMDAwMDAyMzg0MTg1OCxcIlwieVwiXCI6NC40MTU4NTg3NDU1NzQ5NTF9LHtcIlwieFwiXCI6MS42MDAwMDAwMjM4NDE4NTgsXCJcInlcIlwiOjQuNjg0MTQzMDY2NDA2MjV9LHtcIlwieFwiXCI6Mi4wOTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjo0LjE5ODQwMDk3NDI3MzY4Mn0se1wiXCJ4XCJcIjoyLjU5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjQuMTc5MjIyMTA2OTMzNTk0fSx7XCJcInhcIlwiOjMuMDk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6NC42Mzg0NzM5ODc1NzkzNDZ9LHtcIlwieFwiXCI6My41OTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjo0LjcwODU1MzMxNDIwODk4NH0se1wiXCJ4XCJcIjo0LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6NC4yOTE1ODkyNjAxMDEzMTh9LHtcIlwieFwiXCI6NC41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjQuMDM4MDgyNTk5NjM5ODkzfSx7XCJcInhcIlwiOjUuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjozLjQzNDk5Mzk4MjMxNTA2MzV9LHtcIlwieFwiXCI6NS41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjEuMjE5NDcwODU4NTczOTEzNn0se1wiXCJ4XCJcIjo2LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MS4xOTIwODMxMjAzNDYwNjkzfSx7XCJcInhcIlwiOjYuNTk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjowLjUzNTI2MzU5Nzk2NTI0MDV9LHtcIlwieFwiXCI6Ny4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuMzM0NjkyMDMxMTQ1MDk1OH1dfSx7XCJcIm5hbWVcIlwiOlwiXCJSdW46MjAyMy0wOC0wOFwiXCIsXCJcImZpdExpbmVDb2xvclwiXCI6XCJcIiNmZmJiNzhcIlwiLFwiXCJwb2ludENvbG9yXCJcIjpcIlwiI2ZmYmI3OFwiXCIsXCJcInNob3dQb2ludHNcIlwiOlwiXCJwb2ludHNcIlwiLFwiXCJwYXJhbWV0ZXJzXCJcIjpbMi4zMzk0NTgwMTc5NzAxMjYsIC0xLjA3MzQxODQzMTAxNzExNzgsIDQuNzQ2MzMyOTUwNTUwOTM0LCAwLjI0ODI0MTY4NTc1OTU2NThdLFwiXCJwb2ludHNcIlwiOlt7XCJcInhcIlwiOjAuMTAwMDAwMDAxNDkwMTE2MTIsXCJcInlcIlwiOjAuMjEzOTMzNzY1ODg4MjE0MX0se1wiXCJ4XCJcIjowLjYwMDAwMDAyMzg0MTg1NzksXCJcInlcIlwiOjAuNDI2OTU2MjA2NTYwMTM0OX0se1wiXCJ4XCJcIjoxLjEwMDAwMDAyMzg0MTg1OCxcIlwieVwiXCI6MC4yNDQxNTczMjkyMDE2OTgzfSx7XCJcInhcIlwiOjEuNjAwMDAwMDIzODQxODU4LFwiXCJ5XCJcIjowLjE0NjYzNTk2NDUxMjgyNX0se1wiXCJ4XCJcIjoyLjA5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjAuMDg4MTg0NjI0OTEwMzU0NjF9LHtcIlwieFwiXCI6Mi41OTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjowLjI1NjA2NTY2NjY3NTU2NzZ9LHtcIlwieFwiXCI6My4wOTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjowLjQyNDM0MDQ1NjcyNDE2Njg3fSx7XCJcInhcIlwiOjMuNTk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6MC4zNzExMTIzMTY4NDY4NDc1M30se1wiXCJ4XCJcIjo0LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC41NTgxNzM3MTYwNjgyNjc4fSx7XCJcInhcIlwiOjQuNTk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjoxLjE4MzU5MDA1NDUxMjAyNH0se1wiXCJ4XCJcIjo1LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MS41NjI5ODQzNDczNDM0NDQ4fSx7XCJcInhcIlwiOjUuNTk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjoyLjMyMTEyODg0NTIxNDg0Mzh9LHtcIlwieFwiXCI6Ni4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjIuMjI5OTYxNjMzNjgyMjUxfSx7XCJcInhcIlwiOjYuNTk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjoyLjI1NjAyMjY5MTcyNjY4NDZ9LHtcIlwieFwiXCI6Ny4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjIuMjE0MjM5ODM1NzM5MTM1N31dfV0sXCJcImNoYXJ0T3B0aW9uc1wiXCI6e1wiXCJ4QXhpc05hbWVcIlwiOlwiXCJDb25jLlwiXCIsXCJcInlBeGlzTmFtZVwiXCI6XCJcIkFjdGl2aXR5XCJcIixcIlwidGl0bGVcIlwiOlwiXCJEb3NlLVJlc3BvbnNlIGN1cnZlc1wiXCJ9fVwiLHRleHQsLFxuQ2FtZXJvb24sTUlFVkZMRkdJVkxHTElQSVRMQUdMRlZUQVlMUVlSUkdEUUxETCxDT2MxY2NjMmNjKGNjYzJjMSlDKEMpQyg9TylPQ0NDYzNjY2NuYzMsMTQ4MDAxNiwzNi4yNjA5NTk2MjUyNDQxNCw5OTUxNTM1OTYsMzAtNTYgV0hJVEVTVE9ORSBFWFBZLGh0dHBzOi8vZGF0YWdyb2suYWkvaW1nL3NsaWRlcy9hY2Nlc3MtZGItY29ubmVjdC5wbmcsaWQsRXJyb3JNZXNzYWdlLFwiQ09NUE5EIFxuQVRPTSBcbkVORFwiLGZsYWcsMywzLDJCREosMywxLjIzLDxjaGFydD48L2NoYXJ0PixcIntcIlwic2VyaWVzXCJcIjpbe1wiXCJuYW1lXCJcIjpcIlwiUnVuOjIwMjMtMDgtMDhcIlwiLFwiXCJmaXRGdW5jdGlvblwiXCI6XCJcInNpZ21vaWRcIlwiLFwiXCJmaXRMaW5lQ29sb3JcIlwiOlwiXCIjMWY3N2I0XCJcIixcIlwicG9pbnRDb2xvclwiXCI6XCJcIiMxZjc3YjRcIlwiLFwiXCJzaG93UG9pbnRzXCJcIjpcIlwicG9pbnRzXCJcIixcIlwicGFyYW1ldGVyc1wiXCI6WzQuNjc2MDY1MjU3ODY0MjMyNSwgMC45MDQ2OTU2MzIwNzU2NzAzLCA1LjY1MTQwODk3MTg1NjczOCwgMC4wNzczODg0NjAxMjE4NDE4NV0sXCJcInBvaW50c1wiXCI6W3tcIlwieFwiXCI6MC4xMDAwMDAwMDE0OTAxMTYxMixcIlwieVwiXCI6NC4zMjQyNTU5NDMyOTgzNH0se1wiXCJ4XCJcIjowLjYwMDAwMDAyMzg0MTg1NzksXCJcInlcIlwiOjQuNjY4NDQyMjQ5Mjk4MDk2fSx7XCJcInhcIlwiOjEuMTAwMDAwMDIzODQxODU4LFwiXCJ5XCJcIjo0LjM3OTc4NTA2MDg4MjU2OH0se1wiXCJ4XCJcIjoxLjYwMDAwMDAyMzg0MTg1OCxcIlwieVwiXCI6NS4wMzQ1MTM5NTAzNDc5fSx7XCJcInhcIlwiOjIuMDk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6NC44Nzg2NTM1MjYzMDYxNTJ9LHtcIlwieFwiXCI6Mi41OTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjo0LjM0NTEzMTM5NzI0NzMxNDV9LHtcIlwieFwiXCI6My4wOTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjo0LjMzNjk5MjI2Mzc5Mzk0NX0se1wiXCJ4XCJcIjozLjU5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjUuMDM3NDMwMjg2NDA3NDcxfSx7XCJcInhcIlwiOjQuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjo1LjAwOTI2OTIzNzUxODMxMDV9LHtcIlwieFwiXCI6NC41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjQuMTUxOTAyNjc1NjI4NjYyfSx7XCJcInhcIlwiOjUuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjozLjQwNjY5NTEyNzQ4NzE4MjZ9LHtcIlwieFwiXCI6NS41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjIuMzczMjc1OTk1MjU0NTE2Nn0se1wiXCJ4XCJcIjo2LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MS42NzM3MjgxMDg0MDYwNjd9LHtcIlwieFwiXCI6Ni41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuNDg1NzQ3OTAzNTg1NDMzOTZ9LHtcIlwieFwiXCI6Ny4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuMjc4MzA1MjMyNTI0ODcxOH1dfSx7XCJcIm5hbWVcIlwiOlwiXCJSdW46MjAyMy0wOC0wOFwiXCIsXCJcImZpdExpbmVDb2xvclwiXCI6XCJcIiNmZmJiNzhcIlwiLFwiXCJwb2ludENvbG9yXCJcIjpcIlwiI2ZmYmI3OFwiXCIsXCJcInNob3dQb2ludHNcIlwiOlwiXCJwb2ludHNcIlwiLFwiXCJwYXJhbWV0ZXJzXCJcIjpbMi45MzgzOTU4NjMwMTAxMTEsIC0xLjQ2NTg0ODA2NjEzOTIxMTcsIDUuNDYyNzAyNzUxOTk2NTg0LCAwLjM0NzMxMzkwMjM2MTUwMzldLFwiXCJwb2ludHNcIlwiOlt7XCJcInhcIlwiOjAuMTAwMDAwMDAxNDkwMTE2MTIsXCJcInlcIlwiOjAuNDk0MTcxMDgyOTczNDgwMn0se1wiXCJ4XCJcIjowLjYwMDAwMDAyMzg0MTg1NzksXCJcInlcIlwiOjAuMTUzMjM5NzQxOTIxNDI0ODd9LHtcIlwieFwiXCI6MS4xMDAwMDAwMjM4NDE4NTgsXCJcInlcIlwiOjAuNDYzNzM0MzI4NzQ2Nzk1NjV9LHtcIlwieFwiXCI6MS42MDAwMDAwMjM4NDE4NTgsXCJcInlcIlwiOjAuMzM3MDQzMTM2MzU4MjYxMX0se1wiXCJ4XCJcIjoyLjA5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjAuNTE3OTAzMDI5OTE4NjcwN30se1wiXCJ4XCJcIjoyLjU5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjAuMjc4OTk3NjU5NjgzMjI3NTR9LHtcIlwieFwiXCI6My4wOTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjowLjIyMDc1MDY0NDgwMzA0NzE4fSx7XCJcInhcIlwiOjMuNTk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6MC41Nzg5OTE4ODk5NTM2MTMzfSx7XCJcInhcIlwiOjQuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjowLjIxMTY5OTExMzI0OTc3ODc1fSx7XCJcInhcIlwiOjQuNTk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjowLjI3ODU3NjQ2MzQ2MDkyMjI0fSx7XCJcInhcIlwiOjUuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjoxLjA5MDYzMzI3MzEyNDY5NDh9LHtcIlwieFwiXCI6NS41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjEuODUyMDMwMDM4ODMzNjE4Mn0se1wiXCJ4XCJcIjo2LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6Mi43MTc3MDU5NjUwNDIxMTQzfSx7XCJcInhcIlwiOjYuNTk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjoyLjg2ODA5MTgyMTY3MDUzMjJ9LHtcIlwieFwiXCI6Ny4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjMuMjQxMzA3NzM1NDQzMTE1Mn1dfV0sXCJcImNoYXJ0T3B0aW9uc1wiXCI6e1wiXCJ4QXhpc05hbWVcIlwiOlwiXCJDb25jLlwiXCIsXCJcInlBeGlzTmFtZVwiXCI6XCJcIkFjdGl2aXR5XCJcIixcIlwidGl0bGVcIlwiOlwiXCJEb3NlLVJlc3BvbnNlIGN1cnZlc1wiXCJ9fVwiLHRleHQsLFxuQ2FuYWRhLE1NRUxWTEtUSUlHUElWVkdWVkxSSVZES1dMTktESyxDQyhDKD1PKU5DQ1MpYzFjY2NjKGMxKUMoPU8pYzJjY2NjYzIsMTQ4MDAxNywzNi4yNjA5NTk2MjUyNDQxNCw5OTUxNSwzMC01NiBXSElURVNUT05FIEVYUFksaHR0cHM6Ly9kYXRhZ3Jvay5haS9pbWcvc2xpZGVzL2FjY2Vzcy1kYi1jb25uZWN0LnBuZyxpZCxFcnJvck1lc3NhZ2UsXCJDT01QTkQgXG5BVE9NIFxuRU5EXCIsZmxhZyw0LDQsMUlBTiw0LDEuMjMsPGNoYXJ0PjwvY2hhcnQ+LFwie1wiXCJzZXJpZXNcIlwiOlt7XCJcIm5hbWVcIlwiOlwiXCJSdW46MjAyMy0wOC0wOFwiXCIsXCJcImZpdEZ1bmN0aW9uXCJcIjpcIlwic2lnbW9pZFwiXCIsXCJcImZpdExpbmVDb2xvclwiXCI6XCJcIiMxZjc3YjRcIlwiLFwiXCJwb2ludENvbG9yXCJcIjpcIlwiIzFmNzdiNFwiXCIsXCJcInNob3dQb2ludHNcIlwiOlwiXCJwb2ludHNcIlwiLFwiXCJwYXJhbWV0ZXJzXCJcIjpbMC44NTk3MzkwOTc1NDMwMDA4LCAxLjA5NTc2MjU3MzI0ODE5NDYsIDUuMjYwNTM3MDY3OTg3OTU4LCAwLjA3OTc0MTg3OTk4MTc3NzM2XSxcIlwicG9pbnRzXCJcIjpbe1wiXCJ4XCJcIjowLjEwMDAwMDAwMTQ5MDExNjEyLFwiXCJ5XCJcIjowLjgxOTAxNTI2NDUxMTEwODR9LHtcIlwieFwiXCI6MC42MDAwMDAwMjM4NDE4NTc5LFwiXCJ5XCJcIjowLjg0MjE2ODk4Njc5NzMzMjh9LHtcIlwieFwiXCI6MS4xMDAwMDAwMjM4NDE4NTgsXCJcInlcIlwiOjAuODc0MDkyMjIxMjYwMDcwOH0se1wiXCJ4XCJcIjoxLjYwMDAwMDAyMzg0MTg1OCxcIlwieVwiXCI6MC44OTI0Mjc1MDQwNjI2NTI2fSx7XCJcInhcIlwiOjIuMDk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6MC44MjQ5MDY3NjY0MTQ2NDIzfSx7XCJcInhcIlwiOjIuNTk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6MC45MzI3NjY5MTQzNjc2NzU4fSx7XCJcInhcIlwiOjMuMDk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6MC44NTIyOTc0MjUyNzAwODA2fSx7XCJcInhcIlwiOjMuNTk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6MC44MTc0NDkyNzE2Nzg5MjQ2fSx7XCJcInhcIlwiOjQuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjowLjgzOTQ2NDcyNDA2Mzg3MzN9LHtcIlwieFwiXCI6NC41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuNzEzOTM4NzcyNjc4Mzc1Mn0se1wiXCJ4XCJcIjo1LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC41NTYxMTY3NTk3NzcwNjkxfSx7XCJcInhcIlwiOjUuNTk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjowLjMyNzYyMjY4MTg1NjE1NTR9LHtcIlwieFwiXCI6Ni4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuMTI0Nzk0NzQzOTU1MTM1MzV9LHtcIlwieFwiXCI6Ni41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuMTMwMDY3OTc0MzI4OTk0NzV9LHtcIlwieFwiXCI6Ny4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuMDU5NzAyMDc5NzQzMTQ2ODk2fV19LHtcIlwibmFtZVwiXCI6XCJcIlJ1bjoyMDIzLTA4LTA4XCJcIixcIlwiZml0TGluZUNvbG9yXCJcIjpcIlwiI2ZmYmI3OFwiXCIsXCJcInBvaW50Q29sb3JcIlwiOlwiXCIjZmZiYjc4XCJcIixcIlwic2hvd1BvaW50c1wiXCI6XCJcInBvaW50c1wiXCIsXCJcInBhcmFtZXRlcnNcIlwiOls1Ljc2MDkzMDIxOTU4MjU0NiwgMS42NTkxNzkzMjkzODMzMDEzLCA0LjY2NzE1NTkyOTcyMDg1MSwgMC43ODU4MTA5NTQ0MTIxNjUyXSxcIlwicG9pbnRzXCJcIjpbe1wiXCJ4XCJcIjowLjEwMDAwMDAwMTQ5MDExNjEyLFwiXCJ5XCJcIjo2LjE1Njk5MzM4OTEyOTYzOX0se1wiXCJ4XCJcIjowLjYwMDAwMDAyMzg0MTg1NzksXCJcInlcIlwiOjUuMjM2NzAxOTY1MzMyMDMxfSx7XCJcInhcIlwiOjEuMTAwMDAwMDIzODQxODU4LFwiXCJ5XCJcIjo2LjAxMDU2MDUxMjU0MjcyNX0se1wiXCJ4XCJcIjoxLjYwMDAwMDAyMzg0MTg1OCxcIlwieVwiXCI6NS40OTU1MTI5NjIzNDEzMDl9LHtcIlwieFwiXCI6Mi4wOTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjo2LjA4Nzc3MDQ2MjAzNjEzM30se1wiXCJ4XCJcIjoyLjU5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjUuNzk5ODY1NzIyNjU2MjV9LHtcIlwieFwiXCI6My4wOTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjo1LjU5NzU0NjU3NzQ1MzYxM30se1wiXCJ4XCJcIjozLjU5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjUuNTIwOTAyMTU2ODI5ODM0fSx7XCJcInhcIlwiOjQuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjo1LjM2MDY1NDM1NDA5NTQ1OX0se1wiXCJ4XCJcIjo0LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6My41NTM5NzQ2Mjg0NDg0ODYzfSx7XCJcInhcIlwiOjUuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjoxLjU3NzIzNjI5NDc0NjM5OX0se1wiXCJ4XCJcIjo1LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MS4wMDAxMjY0ODEwNTYyMTM0fSx7XCJcInhcIlwiOjYuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjowLjkzMDU3OTc4MTUzMjI4NzZ9LHtcIlwieFwiXCI6Ni41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuNjAzMzYzODcxNTc0NDAxOX0se1wiXCJ4XCJcIjo3LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC40MjAzNjg1NTIyMDc5NDY4fV19XSxcIlwiY2hhcnRPcHRpb25zXCJcIjp7XCJcInhBeGlzTmFtZVwiXCI6XCJcIkNvbmMuXCJcIixcIlwieUF4aXNOYW1lXCJcIjpcIlwiQWN0aXZpdHlcIlwiLFwiXCJ0aXRsZVwiXCI6XCJcIkRvc2UtUmVzcG9uc2UgY3VydmVzXCJcIn19XCIsdGV4dCwsXG5Db2xvbWJpYSxNRFJUREVWU05IVEhES1BUTFRXRkVFSUZFRVlIU1BGSE4sRkMoRikoRiljMWNjYyhPQzJDQ05DQzIpY2MxLDE0ODAwMjksMzYuMzMwOTQ0MDYxMjc5Myw5OTUxNTIwNTAsMSBDT1VSVCBIT1VTRSBTUVVBUkUsaHR0cHM6Ly9kYXRhZ3Jvay5haS9pbWcvc2xpZGVzL2FjY2Vzcy1kYi1jb25uZWN0LnBuZyxpZCxFcnJvck1lc3NhZ2UsXCJDT01QTkQgXG5BVE9NIFxuRU5EXCIsZmxhZyw1LDUsNFVKMSw1LDEuMjMsPGNoYXJ0PjwvY2hhcnQ+LFwie1wiXCJzZXJpZXNcIlwiOlt7XCJcIm5hbWVcIlwiOlwiXCJSdW46MjAyMy0wOC0wOFwiXCIsXCJcImZpdEZ1bmN0aW9uXCJcIjpcIlwic2lnbW9pZFwiXCIsXCJcImZpdExpbmVDb2xvclwiXCI6XCJcIiMxZjc3YjRcIlwiLFwiXCJwb2ludENvbG9yXCJcIjpcIlwiIzFmNzdiNFwiXCIsXCJcInNob3dQb2ludHNcIlwiOlwiXCJwb2ludHNcIlwiLFwiXCJwYXJhbWV0ZXJzXCJcIjpbNi40OTk1MDg4MzE0MTUzNjU1LCAyLjQyNzAzNTEwMDQ1Mzk5MTQsIDUuMTc4NjU5NTM1MzQ4NTc5LCAwLjYyNTY1MzM0NjI0MTU3N10sXCJcInBvaW50c1wiXCI6W3tcIlwieFwiXCI6MC4xMDAwMDAwMDE0OTAxMTYxMixcIlwieVwiXCI6Ni40OTYyMzE1NTU5Mzg3MjF9LHtcIlwieFwiXCI6MC42MDAwMDAwMjM4NDE4NTc5LFwiXCJ5XCJcIjo2LjQyNTQzMzYzNTcxMTY3fSx7XCJcInhcIlwiOjEuMTAwMDAwMDIzODQxODU4LFwiXCJ5XCJcIjo3LjA0MDA2Mzg1ODAzMjIyN30se1wiXCJ4XCJcIjoxLjYwMDAwMDAyMzg0MTg1OCxcIlwieVwiXCI6Ni4xMTE1NDAzMTc1MzU0fSx7XCJcInhcIlwiOjIuMDk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6Ni42ODA3Mjg0MzU1MTYzNTd9LHtcIlwieFwiXCI6Mi41OTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjo2LjQwNjc3NDUyMDg3NDAyM30se1wiXCJ4XCJcIjozLjA5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjYuNjExMjY5NDc0MDI5NTQxfSx7XCJcInhcIlwiOjMuNTk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6NS44ODkwOTQzNTI3MjIxNjh9LHtcIlwieFwiXCI6NC4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjYuNzUzNDQ3MDU1ODE2NjV9LHtcIlwieFwiXCI6NC41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjYuMzYxNDM1ODkwMTk3NzU0fSx7XCJcInhcIlwiOjUuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjo0LjE2NjY5NzUwMjEzNjIzMDV9LHtcIlwieFwiXCI6NS41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjEuMTcyMTE4OTAyMjA2NDIxfSx7XCJcInhcIlwiOjYuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjowLjgwMTA0ODk5NDA2NDMzMX0se1wiXCJ4XCJcIjo2LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC40NjQwMDIxMDI2MTM0NDkxfSx7XCJcInhcIlwiOjcuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjowLjAwMTAzNTc2Njc5MjQ4MzYyNzh9XX0se1wiXCJuYW1lXCJcIjpcIlwiUnVuOjIwMjMtMDgtMDhcIlwiLFwiXCJmaXRMaW5lQ29sb3JcIlwiOlwiXCIjZmZiYjc4XCJcIixcIlwicG9pbnRDb2xvclwiXCI6XCJcIiNmZmJiNzhcIlwiLFwiXCJzaG93UG9pbnRzXCJcIjpcIlwicG9pbnRzXCJcIixcIlwicGFyYW1ldGVyc1wiXCI6WzEuNDczNDM4MTM0NzQ0NjQwMSwgMS4xNjQ5ODA1MTg4MDc0MTk2LCA0LjgyOTU4NjA4ODY2NDIxLCAwLjA5NTAwNTQ1NDk2NzEwMDA3XSxcIlwicG9pbnRzXCJcIjpbe1wiXCJ4XCJcIjowLjEwMDAwMDAwMTQ5MDExNjEyLFwiXCJ5XCJcIjoxLjUyNzkwOTYzNjQ5NzQ5NzZ9LHtcIlwieFwiXCI6MC42MDAwMDAwMjM4NDE4NTc5LFwiXCJ5XCJcIjoxLjM1NTk5NzQ0MzE5OTE1Nzd9LHtcIlwieFwiXCI6MS4xMDAwMDAwMjM4NDE4NTgsXCJcInlcIlwiOjEuNTI0NjM3ODE4MzM2NDg2OH0se1wiXCJ4XCJcIjoxLjYwMDAwMDAyMzg0MTg1OCxcIlwieVwiXCI6MS41NTY3NjU3OTQ3NTQwMjgzfSx7XCJcInhcIlwiOjIuMDk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6MS40MTE0MjQwNDA3OTQzNzI2fSx7XCJcInhcIlwiOjIuNTk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6MS40MDQ1MDEwODA1MTMwMDA1fSx7XCJcInhcIlwiOjMuMDk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6MS40NzY5ODI5NTExNjQyNDU2fSx7XCJcInhcIlwiOjMuNTk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6MS40ODc1NTAwMjAyMTc4OTU1fSx7XCJcInhcIlwiOjQuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjoxLjI5OTE5ODc0NjY4MTIxMzR9LHtcIlwieFwiXCI6NC41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuOTIyOTYxNDEzODYwMzIxfSx7XCJcInhcIlwiOjUuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjowLjY1MjAwNDQ4MDM2MTkzODV9LHtcIlwieFwiXCI6NS41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuMTUzNTA5NzgwNzY0NTc5Nzd9LHtcIlwieFwiXCI6Ni4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuMTA3ODkwMzA3OTAzMjg5OH0se1wiXCJ4XCJcIjo2LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC4xNzI3NjQ0OTUwMTUxNDQzNX0se1wiXCJ4XCJcIjo3LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC4xNDA2NjYwODI1MDE0MTE0NH1dfV0sXCJcImNoYXJ0T3B0aW9uc1wiXCI6e1wiXCJ4QXhpc05hbWVcIlwiOlwiXCJDb25jLlwiXCIsXCJcInlBeGlzTmFtZVwiXCI6XCJcIkFjdGl2aXR5XCJcIixcIlwidGl0bGVcIlwiOlwiXCJEb3NlLVJlc3BvbnNlIGN1cnZlc1wiXCJ9fVwiLHRleHQsLFxuQ29zdGEgUmljYSxNS1NUS0VFSVFUSUtUTExLRFNSVEFLWUhLUkxRSVZMLENDKEMpQ2MxY2NjKGNjMSlDKEMpQyg9TylOMkNDQ0MyQyg9TylPQ0NDYzNjY2NjYzMsMTQ4MDAxOCwzNi4zMzA5NDQwNjEyNzkzLDk5NTA4NDIxOCw0MDQxIFNPVVRIV0VTVEVSTiBCTFZELGh0dHBzOi8vZGF0YWdyb2suYWkvaW1nL3NsaWRlcy9hY2Nlc3MtZGItY29ubmVjdC5wbmcsaWQsRXJyb3JNZXNzYWdlLFwiQ09NUE5EIFxuQVRPTSBcbkVORFwiLGZsYWcsNiw2LDJCUFcsNiwxLjIzLDxjaGFydD48L2NoYXJ0PixcIntcIlwic2VyaWVzXCJcIjpbe1wiXCJuYW1lXCJcIjpcIlwiUnVuOjIwMjMtMDgtMDhcIlwiLFwiXCJmaXRGdW5jdGlvblwiXCI6XCJcInNpZ21vaWRcIlwiLFwiXCJmaXRMaW5lQ29sb3JcIlwiOlwiXCIjMWY3N2I0XCJcIixcIlwicG9pbnRDb2xvclwiXCI6XCJcIiMxZjc3YjRcIlwiLFwiXCJzaG93UG9pbnRzXCJcIjpcIlwicG9pbnRzXCJcIixcIlwicGFyYW1ldGVyc1wiXCI6WzIuNDgzMzY0MTg0MzMxMTIyNywgLTEuODk0NTk3ODc0MjA5MDA2MiwgNC42NzExMjc3MDgwOTI1NjgsIDAuMjQxNTk4NjEzMTE4MTUxNTNdLFwiXCJwb2ludHNcIlwiOlt7XCJcInhcIlwiOjAuMTAwMDAwMDAxNDkwMTE2MTIsXCJcInlcIlwiOjAuMDk2OTUyNDE2MDAyNzUwNH0se1wiXCJ4XCJcIjowLjYwMDAwMDAyMzg0MTg1NzksXCJcInlcIlwiOjAuMDI4NDgzMDQwNjMwODE3NDEzfSx7XCJcInhcIlwiOjEuMTAwMDAwMDIzODQxODU4LFwiXCJ5XCJcIjowLjIyMDg3MTc2MTQ0MTIzMDc3fSx7XCJcInhcIlwiOjEuNjAwMDAwMDIzODQxODU4LFwiXCJ5XCJcIjowLjAwNjg5MTU1NDY4NzE3MjE3NDV9LHtcIlwieFwiXCI6Mi4wOTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjowLjQzMDU4Nzk3NzE3MDk0NDJ9LHtcIlwieFwiXCI6Mi41OTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjowLjQ0Nzc0MTE1MDg1NjAxODA3fSx7XCJcInhcIlwiOjMuMDk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6MC40NTM0NjMxOTY3NTQ0NTU1N30se1wiXCJ4XCJcIjozLjU5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjAuMjM3MDU5MzEwMDc4NjIwOX0se1wiXCJ4XCJcIjo0LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC40NjU3OTUzOTc3NTg0ODM5fSx7XCJcInhcIlwiOjQuNTk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjoxLjE1NTIwMDcxOTgzMzM3NH0se1wiXCJ4XCJcIjo1LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6Mi4yMjk0MDcwNzIwNjcyNjA3fSx7XCJcInhcIlwiOjUuNTk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjoyLjQzMTE1MzA1OTAwNTczNzN9LHtcIlwieFwiXCI6Ni4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjIuMzM4NDYxMTYwNjU5Nzl9LHtcIlwieFwiXCI6Ni41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjIuNjA4MjAxMDI2OTE2NTA0fSx7XCJcInhcIlwiOjcuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjoyLjgxMzYxNDM2ODQzODcyMDd9XX0se1wiXCJuYW1lXCJcIjpcIlwiUnVuOjIwMjMtMDgtMDhcIlwiLFwiXCJmaXRMaW5lQ29sb3JcIlwiOlwiXCIjZmZiYjc4XCJcIixcIlwicG9pbnRDb2xvclwiXCI6XCJcIiNmZmJiNzhcIlwiLFwiXCJzaG93UG9pbnRzXCJcIjpcIlwicG9pbnRzXCJcIixcIlwicGFyYW1ldGVyc1wiXCI6WzUuMjI0NTczNTIxNjQyMDMzLCAxLjQ0NTQwMzM5MjQxOTg1MjgsIDUuNjAxNDE5Nzc0NjA3NjUzNSwgMC4yODIzMjE2MDU0MTk3NTc3XSxcIlwicG9pbnRzXCJcIjpbe1wiXCJ4XCJcIjowLjEwMDAwMDAwMTQ5MDExNjEyLFwiXCJ5XCJcIjo0Ljk1MDI3NDk0NDMwNTQyfSx7XCJcInhcIlwiOjAuNjAwMDAwMDIzODQxODU3OSxcIlwieVwiXCI6NS4xNzU0Njc5Njc5ODcwNjA1fSx7XCJcInhcIlwiOjEuMTAwMDAwMDIzODQxODU4LFwiXCJ5XCJcIjo1LjI3Njc1Mjk0ODc2MDk4Nn0se1wiXCJ4XCJcIjoxLjYwMDAwMDAyMzg0MTg1OCxcIlwieVwiXCI6NS41ODkyOTQ5MTA0MzA5MDh9LHtcIlwieFwiXCI6Mi4wOTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjo1LjYxNjk5NDg1Nzc4ODA4Nn0se1wiXCJ4XCJcIjoyLjU5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjUuMTIwODEzODQ2NTg4MTM1fSx7XCJcInhcIlwiOjMuMDk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6NS4zNDA3NjY5MDY3MzgyODF9LHtcIlwieFwiXCI6My41OTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjo0Ljg3NjQ3MTA0MjYzMzA1N30se1wiXCJ4XCJcIjo0LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6NC45NDk5OTM2MTAzODIwOH0se1wiXCJ4XCJcIjo0LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6NS4xNjI1NjQ3NTQ0ODYwODR9LHtcIlwieFwiXCI6NS4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjQuMzk5NTU3NTkwNDg0NjE5fSx7XCJcInhcIlwiOjUuNTk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjoyLjc5Nzc5Njk2NDY0NTM4NTd9LHtcIlwieFwiXCI6Ni4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjEuMDIyOTg3MjQ2NTEzMzY2N30se1wiXCJ4XCJcIjo2LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC40ODI3NTYwMTg2Mzg2MTA4NH0se1wiXCJ4XCJcIjo3LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC4xMDQwODkzMTk3MDU5NjMxM31dfV0sXCJcImNoYXJ0T3B0aW9uc1wiXCI6e1wiXCJ4QXhpc05hbWVcIlwiOlwiXCJDb25jLlwiXCIsXCJcInlBeGlzTmFtZVwiXCI6XCJcIkFjdGl2aXR5XCJcIixcIlwidGl0bGVcIlwiOlwiXCJEb3NlLVJlc3BvbnNlIGN1cnZlc1wiXCJ9fVwiLHRleHQsLFxuQ3ViYSxNSEFJTFJZRklSUkxGWUhJRllLSVlTTElTS0tIUVNMUFNEVlJRRixDT2MxY2NjMmMoYzEpYyhDQyg9TylOM0NDQ0MzQyg9TylPYzRjY2MoQyljYzRPQyljKEMpbjJDKD1PKWM1Y2NjKENsKWNjNSwxNDgwMDE5LDM2LjMzMTE1NzY4NDMyNjE3LDk5NTA4MTkyOCwxMjI3IFVTIEhJR0hXQVkgMTEsaHR0cHM6Ly9kYXRhZ3Jvay5haS9pbWcvc2xpZGVzL2FjY2Vzcy1kYi1jb25uZWN0LnBuZyxpZCxFcnJvck1lc3NhZ2UsXCJDT01QTkQgXG5BVE9NIFxuRU5EXCIsZmxhZyw3LDcsMVFCUyw3LDEuMjMsPGNoYXJ0PjwvY2hhcnQ+LFwie1wiXCJzZXJpZXNcIlwiOlt7XCJcIm5hbWVcIlwiOlwiXCJSdW46MjAyMy0wOC0wOFwiXCIsXCJcImZpdEZ1bmN0aW9uXCJcIjpcIlwic2lnbW9pZFwiXCIsXCJcImZpdExpbmVDb2xvclwiXCI6XCJcIiMxZjc3YjRcIlwiLFwiXCJwb2ludENvbG9yXCJcIjpcIlwiIzFmNzdiNFwiXCIsXCJcInNob3dQb2ludHNcIlwiOlwiXCJwb2ludHNcIlwiLFwiXCJwYXJhbWV0ZXJzXCJcIjpbMy4zMjA4Mzg2Nzk3MTM5MjUsIC0xLjI0MjE2MTk5ODczMTY3MjgsIDQuODMxMzI1NDI1MjI1MjU2LCAwLjMyMzYwMTEwOTg0MDMwNzJdLFwiXCJwb2ludHNcIlwiOlt7XCJcInhcIlwiOjAuMTAwMDAwMDAxNDkwMTE2MTIsXCJcInlcIlwiOjAuMzcyNzQ3MDMzODM0NDU3NH0se1wiXCJ4XCJcIjowLjYwMDAwMDAyMzg0MTg1NzksXCJcInlcIlwiOjAuMTIzNjUwMTQxMDYwMzUyMzN9LHtcIlwieFwiXCI6MS4xMDAwMDAwMjM4NDE4NTgsXCJcInlcIlwiOjAuNDg0MjI0Njc3MDg1ODc2NDZ9LHtcIlwieFwiXCI6MS42MDAwMDAwMjM4NDE4NTgsXCJcInlcIlwiOjAuMjI2NDQ2NTA5MzYxMjY3MX0se1wiXCJ4XCJcIjoyLjA5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjAuMTY4MjE3OTQyMTE4NjQ0NzF9LHtcIlwieFwiXCI6Mi41OTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjowLjM4NzkwMTQ1NTE2Mzk1NTd9LHtcIlwieFwiXCI6My4wOTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjowLjU0NzAyNDQ4ODQ0OTA5Njd9LHtcIlwieFwiXCI6My41OTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjowLjM0MTkwNTM1NTQ1MzQ5MTJ9LHtcIlwieFwiXCI6NC4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuNzY1NTEyMDQ5MTk4MTUwNn0se1wiXCJ4XCJcIjo0LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MS4yMzQ2NTE2ODQ3NjEwNDc0fSx7XCJcInhcIlwiOjUuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjoyLjQ1MzMzNjcxNTY5ODI0Mn0se1wiXCJ4XCJcIjo1LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6Mi45NTY1NDkxNjc2MzMwNTY2fSx7XCJcInhcIlwiOjYuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjozLjMzNTI5OTQ5MTg4MjMyNH0se1wiXCJ4XCJcIjo2LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6My4yNDAyOTA4ODAyMDMyNDd9LHtcIlwieFwiXCI6Ny4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjMuMTEwNzIxODI2NTUzMzQ0N31dfSx7XCJcIm5hbWVcIlwiOlwiXCJSdW46MjAyMy0wOC0wOFwiXCIsXCJcImZpdExpbmVDb2xvclwiXCI6XCJcIiNmZmJiNzhcIlwiLFwiXCJwb2ludENvbG9yXCJcIjpcIlwiI2ZmYmI3OFwiXCIsXCJcInNob3dQb2ludHNcIlwiOlwiXCJwb2ludHNcIlwiLFwiXCJwYXJhbWV0ZXJzXCJcIjpbMy42NDAxODUzNTIxNTExMDk0LCAxLjI2MjExNTg4ODc1MDEzLCA1LjM5OTAyODA3NDQwMjc0NCwgMC41MDg5NTgwODMwMDY4MDkxXSxcIlwicG9pbnRzXCJcIjpbe1wiXCJ4XCJcIjowLjEwMDAwMDAwMTQ5MDExNjEyLFwiXCJ5XCJcIjozLjg1ODU1OTg0Njg3ODA1MTh9LHtcIlwieFwiXCI6MC42MDAwMDAwMjM4NDE4NTc5LFwiXCJ5XCJcIjozLjYwNzcyMDYxMzQ3OTYxNDN9LHtcIlwieFwiXCI6MS4xMDAwMDAwMjM4NDE4NTgsXCJcInlcIlwiOjMuODU1MjUyMjY1OTMwMTc2fSx7XCJcInhcIlwiOjEuNjAwMDAwMDIzODQxODU4LFwiXCJ5XCJcIjozLjYxOTAzOTI5NzEwMzg4Mn0se1wiXCJ4XCJcIjoyLjA5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjMuODM5Mzg4MzcwNTEzOTE2fSx7XCJcInhcIlwiOjIuNTk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6My4zMzUyODMwNDEwMDAzNjZ9LHtcIlwieFwiXCI6My4wOTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjozLjU3MTE0MTQ4MTM5OTUzNn0se1wiXCJ4XCJcIjozLjU5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjMuNDE1NTA0NjkzOTg0OTg1NH0se1wiXCJ4XCJcIjo0LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6My43MzE2NjQ2NTc1OTI3NzM0fSx7XCJcInhcIlwiOjQuNTk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjozLjA2ODAxNTU3NTQwODkzNTV9LHtcIlwieFwiXCI6NS4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjIuODkxMDY2NTUxMjA4NDk2fSx7XCJcInhcIlwiOjUuNTk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjoxLjYwMjI3NTM3MTU1MTUxMzd9LHtcIlwieFwiXCI6Ni4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuNzY1MjU3NjU2NTc0MjQ5M30se1wiXCJ4XCJcIjo2LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC42ODc1MzI2MDM3NDA2OTIxfSx7XCJcInhcIlwiOjcuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjowLjU4Mjg4NzE3MjY5ODk3NDZ9XX1dLFwiXCJjaGFydE9wdGlvbnNcIlwiOntcIlwieEF4aXNOYW1lXCJcIjpcIlwiQ29uYy5cIlwiLFwiXCJ5QXhpc05hbWVcIlwiOlwiXCJBY3Rpdml0eVwiXCIsXCJcInRpdGxlXCJcIjpcIlwiRG9zZS1SZXNwb25zZSBjdXJ2ZXNcIlwifX1cIix0ZXh0LCxcbkl0YWx5LE1TTkZITkVIVk1RRllSTk5MS1RLR1ZGR1JRLENDKEMpQ2MxY2NjKGNjMSlDKEMpQyg9TylOMkNDQ0MyQyg9TylPQ0NPW04rXSg9TylbTy1dLDE0ODAwMjAsMzYuMzMxMTU3Njg0MzI2MTcsOTk1MDIsXCIxNjgtNDYgOTFTVCBBVkUuLCAyTkQgRkxSXCIsaHR0cHM6Ly9kYXRhZ3Jvay5haS9pbWcvc2xpZGVzL2FjY2Vzcy1kYi1jb25uZWN0LnBuZyxpZCxFcnJvck1lc3NhZ2UsXCJDT01QTkQgXG5BVE9NIFxuRU5EXCIsZmxhZyw4LDgsMVpQOCw4LDEuMjMsPGNoYXJ0PjwvY2hhcnQ+LFwie1wiXCJzZXJpZXNcIlwiOlt7XCJcIm5hbWVcIlwiOlwiXCJSdW46MjAyMy0wOC0wOFwiXCIsXCJcImZpdEZ1bmN0aW9uXCJcIjpcIlwic2lnbW9pZFwiXCIsXCJcImZpdExpbmVDb2xvclwiXCI6XCJcIiMxZjc3YjRcIlwiLFwiXCJwb2ludENvbG9yXCJcIjpcIlwiIzFmNzdiNFwiXCIsXCJcInNob3dQb2ludHNcIlwiOlwiXCJwb2ludHNcIlwiLFwiXCJwYXJhbWV0ZXJzXCJcIjpbMi4yOTM1OTIxMDU5MjM4MDksIDEuMzc4MTU4NjU0OTE0MTgzNSwgNS4xMDI1ODk4MDM4Njc2NjA1LCAwLjAzNDkzODUxMjQ1MjkxMjkxXSxcIlwicG9pbnRzXCJcIjpbe1wiXCJ4XCJcIjowLjEwMDAwMDAwMTQ5MDExNjEyLFwiXCJ5XCJcIjoyLjEyODcyODM4OTczOTk5MDJ9LHtcIlwieFwiXCI6MC42MDAwMDAwMjM4NDE4NTc5LFwiXCJ5XCJcIjoyLjI2Nzk3MjIzMDkxMTI1NX0se1wiXCJ4XCJcIjoxLjEwMDAwMDAyMzg0MTg1OCxcIlwieVwiXCI6Mi4zOTg0NDI1MDY3OTAxNjF9LHtcIlwieFwiXCI6MS42MDAwMDAwMjM4NDE4NTgsXCJcInlcIlwiOjIuNTEzMDYyMjM4NjkzMjM3M30se1wiXCJ4XCJcIjoyLjA5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjIuMzI1NTExNjkzOTU0NDY3OH0se1wiXCJ4XCJcIjoyLjU5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjIuMTI3MzQwNzkzNjA5NjE5fSx7XCJcInhcIlwiOjMuMDk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6Mi40NzI1OTc4Mzc0NDgxMn0se1wiXCJ4XCJcIjozLjU5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjIuMTMxMTgxNDc4NTAwMzY2fSx7XCJcInhcIlwiOjQuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjoyLjA5MDQyMTQzODIxNzE2M30se1wiXCJ4XCJcIjo0LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6Mi4wMjI5OTE2NTcyNTcwOH0se1wiXCJ4XCJcIjo1LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MS4xMTA1MDU5Mzg1Mjk5NjgzfSx7XCJcInhcIlwiOjUuNTk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjowLjQ0OTQ0ODU4NTUxMDI1Mzl9LHtcIlwieFwiXCI6Ni4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuMTM3NTYzNTg2MjM1MDQ2NH0se1wiXCJ4XCJcIjo2LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC4wMzYzNTExMjE5NjIwNzA0NjV9LHtcIlwieFwiXCI6Ny4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuMTYxOTc3MTEyMjkzMjQzNH1dfSx7XCJcIm5hbWVcIlwiOlwiXCJSdW46MjAyMy0wOC0wOFwiXCIsXCJcImZpdExpbmVDb2xvclwiXCI6XCJcIiNmZmJiNzhcIlwiLFwiXCJwb2ludENvbG9yXCJcIjpcIlwiI2ZmYmI3OFwiXCIsXCJcInNob3dQb2ludHNcIlwiOlwiXCJwb2ludHNcIlwiLFwiXCJwYXJhbWV0ZXJzXCJcIjpbNS45NTMxMjU0OTk0Mzk4NzksIDEuMjUyODYyMDI1NTMwNjUyOCwgNS4xODc2Mzc0NDAxNDk4MDIsIDAuMzExMDM0ODc1MzI2MDg4Nl0sXCJcInBvaW50c1wiXCI6W3tcIlwieFwiXCI6MC4xMDAwMDAwMDE0OTAxMTYxMixcIlwieVwiXCI6NS42NTg1MjgzMjc5NDE4OTQ1fSx7XCJcInhcIlwiOjAuNjAwMDAwMDIzODQxODU3OSxcIlwieVwiXCI6NS45MTExNTIzNjI4MjM0ODZ9LHtcIlwieFwiXCI6MS4xMDAwMDAwMjM4NDE4NTgsXCJcInlcIlwiOjUuOTI0OTIwMDgyMDkyMjg1fSx7XCJcInhcIlwiOjEuNjAwMDAwMDIzODQxODU4LFwiXCJ5XCJcIjo1Ljg0Njk0Mzg1NTI4NTY0NDV9LHtcIlwieFwiXCI6Mi4wOTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjo1LjkyOTQ3MjkyMzI3ODgwOX0se1wiXCJ4XCJcIjoyLjU5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjYuMTkwMDM3NzI3MzU1OTU3fSx7XCJcInhcIlwiOjMuMDk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6Ni4yMzYxNzk4Mjg2NDM3OTl9LHtcIlwieFwiXCI6My41OTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjo2LjE0MTAxOTM0NDMyOTgzNH0se1wiXCJ4XCJcIjo0LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6NS4yOTUyMTA4MzgzMTc4NzF9LHtcIlwieFwiXCI6NC41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjUuMjY1ODAxOTA2NTg1NjkzfSx7XCJcInhcIlwiOjUuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjozLjM3MjI4NTEyNzYzOTc3MDV9LHtcIlwieFwiXCI6NS41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjEuODI5OTIyNjc2MDg2NDI1OH0se1wiXCJ4XCJcIjo2LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC4zMjY5MDkwMDU2NDE5MzcyNn0se1wiXCJ4XCJcIjo2LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC42Mjc0NTQzNDA0NTc5MTYzfSx7XCJcInhcIlwiOjcuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjowLjg0NDE4NTcwOTk1MzMwODF9XX1dLFwiXCJjaGFydE9wdGlvbnNcIlwiOntcIlwieEF4aXNOYW1lXCJcIjpcIlwiQ29uYy5cIlwiLFwiXCJ5QXhpc05hbWVcIlwiOlwiXCJBY3Rpdml0eVwiXCIsXCJcInRpdGxlXCJcIjpcIlwiRG9zZS1SZXNwb25zZSBjdXJ2ZXNcIlwifX1cIix0ZXh0LCxcblJ3YW5kYSxNUE5TRVBBU0xMRUxGTlNJQVRRR0VMVlJTTEtBR05BU0ssQ0MoQylDYzFjY2MoY2MxKUMoQylDKD1PKU4yQ0NDQzJDKD1PKU9DQ08sMTQ4MDAyMSwzNi4zMzEzNzEzMDczNzMwNSw5OTUwMzcyNDcsXCIxNjgtNDYgOTFTVCBBVkUuLCAyTkQgRkxSXCIsaHR0cHM6Ly9kYXRhZ3Jvay5haS9pbWcvc2xpZGVzL2FjY2Vzcy1kYi1jb25uZWN0LnBuZyxpZCxFcnJvck1lc3NhZ2UsXCJDT01QTkQgXG5BVE9NIFxuRU5EXCIsZmxhZyw5LDksMkJESiw5LDEuMjMsPGNoYXJ0PjwvY2hhcnQ+LFwie1wiXCJzZXJpZXNcIlwiOlt7XCJcIm5hbWVcIlwiOlwiXCJSdW46MjAyMy0wOC0wOFwiXCIsXCJcImZpdEZ1bmN0aW9uXCJcIjpcIlwic2lnbW9pZFwiXCIsXCJcImZpdExpbmVDb2xvclwiXCI6XCJcIiMxZjc3YjRcIlwiLFwiXCJwb2ludENvbG9yXCJcIjpcIlwiIzFmNzdiNFwiXCIsXCJcInNob3dQb2ludHNcIlwiOlwiXCJwb2ludHNcIlwiLFwiXCJwYXJhbWV0ZXJzXCJcIjpbMy44MjA5OTcyMjAyNjU0NDc0LCAxLjM3NzkyMTY3MTY0NDg1MDYsIDUuMjk5ODgyMjI4NDM5Njg2LCAwLjA2MDQwNjQ1NTE5MDY5NjA4XSxcIlwicG9pbnRzXCJcIjpbe1wiXCJ4XCJcIjowLjEwMDAwMDAwMTQ5MDExNjEyLFwiXCJ5XCJcIjozLjc4MjExMDkyOTQ4OTEzNTd9LHtcIlwieFwiXCI6MC42MDAwMDAwMjM4NDE4NTc5LFwiXCJ5XCJcIjozLjU0MjQzMzAyMzQ1Mjc1OX0se1wiXCJ4XCJcIjoxLjEwMDAwMDAyMzg0MTg1OCxcIlwieVwiXCI6My43MDA4Njc0MTQ0NzQ0ODczfSx7XCJcInhcIlwiOjEuNjAwMDAwMDIzODQxODU4LFwiXCJ5XCJcIjozLjcxNzMwMTYwNzEzMTk1OH0se1wiXCJ4XCJcIjoyLjA5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjQuMDI0NDUyMjA5NDcyNjU2fSx7XCJcInhcIlwiOjIuNTk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6NC4wMTM4OTkzMjYzMjQ0NjN9LHtcIlwieFwiXCI6My4wOTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjozLjk0NTA5NDM0NzAwMDEyMn0se1wiXCJ4XCJcIjozLjU5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjMuODY2NjIxOTcxMTMwMzcxfSx7XCJcInhcIlwiOjQuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjozLjc0NjE2MjY1Mjk2OTM2MDR9LHtcIlwieFwiXCI6NC41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjMuMzQ1NDc0MDA0NzQ1NDgzNH0se1wiXCJ4XCJcIjo1LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6Mi42MTk0NDMxNzgxNzY4OH0se1wiXCJ4XCJcIjo1LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC45OTk0MDUwMjY0MzU4NTJ9LHtcIlwieFwiXCI6Ni4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuNDYyNTk3OTM2MzkxODMwNDR9LHtcIlwieFwiXCI6Ni41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuMDU0MTM0NjExMDQwMzUzNzc1fSx7XCJcInhcIlwiOjcuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjowLjA1NzExMTg3NDIyMjc1NTQzfV19LHtcIlwibmFtZVwiXCI6XCJcIlJ1bjoyMDIzLTA4LTA4XCJcIixcIlwiZml0TGluZUNvbG9yXCJcIjpcIlwiI2ZmYmI3OFwiXCIsXCJcInBvaW50Q29sb3JcIlwiOlwiXCIjZmZiYjc4XCJcIixcIlwic2hvd1BvaW50c1wiXCI6XCJcInBvaW50c1wiXCIsXCJcInBhcmFtZXRlcnNcIlwiOls1LjYzMTgwNzk2NTc3MjYwMzUsIDEuODQ5NTQ5Mzc3MDAwMDU5NSwgNS4zOTE3OTMzMTI0NzExMTYsIDAuMTcwNjA3MDc1ODczNDg0NDJdLFwiXCJwb2ludHNcIlwiOlt7XCJcInhcIlwiOjAuMTAwMDAwMDAxNDkwMTE2MTIsXCJcInlcIlwiOjUuNDU4MDc5ODE0OTEwODg5fSx7XCJcInhcIlwiOjAuNjAwMDAwMDIzODQxODU3OSxcIlwieVwiXCI6NS41NTQ0MjcxNDY5MTE2MjF9LHtcIlwieFwiXCI6MS4xMDAwMDAwMjM4NDE4NTgsXCJcInlcIlwiOjUuNzk5OTgzMDI0NTk3MTY4fSx7XCJcInhcIlwiOjEuNjAwMDAwMDIzODQxODU4LFwiXCJ5XCJcIjo1LjM2NDE0MDAzMzcyMTkyNH0se1wiXCJ4XCJcIjoyLjA5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjUuODY0NDg1NzQwNjYxNjIxfSx7XCJcInhcIlwiOjIuNTk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6NS40NTA5ODA2NjMyOTk1NjA1fSx7XCJcInhcIlwiOjMuMDk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6NS43MDI1NzQ3Mjk5MTk0MzR9LHtcIlwieFwiXCI6My41OTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjo1LjczMTQ1MzQxODczMTY4OTV9LHtcIlwieFwiXCI6NC4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjUuNTEyMzQ0MzYwMzUxNTYyNX0se1wiXCJ4XCJcIjo0LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6NS43MjQzOTU3NTE5NTMxMjV9LHtcIlwieFwiXCI6NS4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjQuMzU0NTA2OTY5NDUxOTA0fSx7XCJcInhcIlwiOjUuNTk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjoxLjczMDc2NjY1NDAxNDU4NzR9LHtcIlwieFwiXCI6Ni4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuNjMwNTkzNjU3NDkzNTkxM30se1wiXCJ4XCJcIjo2LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC4wMzUxODM0MzcxNjg1OTgxNzV9LHtcIlwieFwiXCI6Ny4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuNzU3NTE2OTIwNTY2NTU4OH1dfV0sXCJcImNoYXJ0T3B0aW9uc1wiXCI6e1wiXCJ4QXhpc05hbWVcIlwiOlwiXCJDb25jLlwiXCIsXCJcInlBeGlzTmFtZVwiXCI6XCJcIkFjdGl2aXR5XCJcIixcIlwidGl0bGVcIlwiOlwiXCJEb3NlLVJlc3BvbnNlIGN1cnZlc1wiXCJ9fVwiLHRleHQsLFxuU3dpdHplcmxhbmQsSVJWVkdSWUxJRVZXS0FBR01ETURLVkxGTFdTU0RFSSxDTjFDQ0MoQ0MxKU9jMmNjYyhjYzIpQyhGKShGKUYsMTQ4MDAyOCwzNi4zMzEzNzEzMDczNzMwNSw5OTUwNCw5Mi0xMSAxNzlUSCBQTEFDRSxodHRwczovL2RhdGFncm9rLmFpL2ltZy9zbGlkZXMvYWNjZXNzLWRiLWNvbm5lY3QucG5nLGlkLEVycm9yTWVzc2FnZSxcIkNPTVBORCBcbkFUT00gXG5FTkRcIixmbGFnLDksMTAsMUlBTiwxMCwxLjIzLDxjaGFydD48L2NoYXJ0PixcIntcIlwic2VyaWVzXCJcIjpbe1wiXCJuYW1lXCJcIjpcIlwiUnVuOjIwMjMtMDgtMDhcIlwiLFwiXCJmaXRGdW5jdGlvblwiXCI6XCJcInNpZ21vaWRcIlwiLFwiXCJmaXRMaW5lQ29sb3JcIlwiOlwiXCIjMWY3N2I0XCJcIixcIlwicG9pbnRDb2xvclwiXCI6XCJcIiMxZjc3YjRcIlwiLFwiXCJzaG93UG9pbnRzXCJcIjpcIlwicG9pbnRzXCJcIixcIlwicGFyYW1ldGVyc1wiXCI6WzEuMTE5MDI1NTg2NTA5NzQ3MSwgMi4zMTYzODk1MTYxNTQ0NDM3LCA1LjQ5Njg4NjYxODIyNzkxOTUsIDAuMjAzNTIwNDA0NzI4OTA1Ml0sXCJcInBvaW50c1wiXCI6W3tcIlwieFwiXCI6MC4xMDAwMDAwMDE0OTAxMTYxMixcIlwieVwiXCI6MS4xMDU3NjgzMjI5NDQ2NDExfSx7XCJcInhcIlwiOjAuNjAwMDAwMDIzODQxODU3OSxcIlwieVwiXCI6MS4xMDE5Njk3MTg5MzMxMDU1fSx7XCJcInhcIlwiOjEuMTAwMDAwMDIzODQxODU4LFwiXCJ5XCJcIjoxLjA4MTg2MDc4MDcxNTk0MjR9LHtcIlwieFwiXCI6MS42MDAwMDAwMjM4NDE4NTgsXCJcInlcIlwiOjEuMDYyOTk3ODE3OTkzMTY0fSx7XCJcInhcIlwiOjIuMDk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6MS4wNDY0NDc1MTU0ODc2NzF9LHtcIlwieFwiXCI6Mi41OTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjoxLjEyMTcyNDk2MzE4ODE3MTR9LHtcIlwieFwiXCI6My4wOTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjoxLjIxNjY5OTYwMDIxOTcyNjZ9LHtcIlwieFwiXCI6My41OTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjoxLjIxNTQ3NzcwNTAwMTgzMX0se1wiXCJ4XCJcIjo0LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MS4wNTgxODkzOTIwODk4NDM4fSx7XCJcInhcIlwiOjQuNTk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjoxLjE3NDc5OTU2MTUwMDU0OTN9LHtcIlwieFwiXCI6NS4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjEuMDE4MTEyNzc4NjYzNjM1M30se1wiXCJ4XCJcIjo1LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC41MzQ0NTIzMTkxNDUyMDI2fSx7XCJcInhcIlwiOjYuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjowLjI1Njk1MjY0MzM5NDQ3MDJ9LHtcIlwieFwiXCI6Ni41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuMTkxMjIwNzMwNTQzMTM2Nn0se1wiXCJ4XCJcIjo3LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC4xNTA2MDUzODA1MzUxMjU3M31dfSx7XCJcIm5hbWVcIlwiOlwiXCJSdW46MjAyMy0wOC0wOFwiXCIsXCJcImZpdExpbmVDb2xvclwiXCI6XCJcIiNmZmJiNzhcIlwiLFwiXCJwb2ludENvbG9yXCJcIjpcIlwiI2ZmYmI3OFwiXCIsXCJcInNob3dQb2ludHNcIlwiOlwiXCJwb2ludHNcIlwiLFwiXCJwYXJhbWV0ZXJzXCJcIjpbMy4xMDM4NTgxMDI1ODA1Nzg1LCAyLjAwMzIyMjQyMDQxODUyNDUsIDUuMDg3NjAyODI1OTg5MTYzLCAwLjEzMjc3OTg4NTEyNDkyNzUzXSxcIlwicG9pbnRzXCJcIjpbe1wiXCJ4XCJcIjowLjEwMDAwMDAwMTQ5MDExNjEyLFwiXCJ5XCJcIjozLjA0OTg1MDk0MDcwNDM0NTd9LHtcIlwieFwiXCI6MC42MDAwMDAwMjM4NDE4NTc5LFwiXCJ5XCJcIjoyLjgwNTIxNzc0MjkxOTkyMn0se1wiXCJ4XCJcIjoxLjEwMDAwMDAyMzg0MTg1OCxcIlwieVwiXCI6My4zNDE1MjUzMTYyMzg0MDMzfSx7XCJcInhcIlwiOjEuNjAwMDAwMDIzODQxODU4LFwiXCJ5XCJcIjozLjA1NDk4NDMzMTEzMDk4MTR9LHtcIlwieFwiXCI6Mi4wOTk5OTk5MDQ2MzI1Njg0LFwiXCJ5XCJcIjozLjI1MDA3NDg2MzQzMzgzOH0se1wiXCJ4XCJcIjoyLjU5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjMuMDQzMjU4NjY2OTkyMTg3NX0se1wiXCJ4XCJcIjozLjA5OTk5OTkwNDYzMjU2ODQsXCJcInlcIlwiOjMuMjY1ODUyNDUxMzI0NDYzfSx7XCJcInhcIlwiOjMuNTk5OTk5OTA0NjMyNTY4NCxcIlwieVwiXCI6Mi45NDc1NzI0Njk3MTEzMDM3fSx7XCJcInhcIlwiOjQuMDk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjozLjE5Mjk4OTgyNjIwMjM5MjZ9LHtcIlwieFwiXCI6NC41OTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjIuNzQ2MDA2MDExOTYyODkwNn0se1wiXCJ4XCJcIjo1LjA5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MS42MTc1ODYxMzU4NjQyNTc4fSx7XCJcInhcIlwiOjUuNTk5OTk5OTA0NjMyNTY4LFwiXCJ5XCJcIjowLjMwMDY2MDg0ODYxNzU1Mzd9LHtcIlwieFwiXCI6Ni4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuMzQ0NDgwMzA1OTEwMTEwNX0se1wiXCJ4XCJcIjo2LjU5OTk5OTkwNDYzMjU2OCxcIlwieVwiXCI6MC4wMTU1Mzc5NzE2MzA2OTI0ODJ9LHtcIlwieFwiXCI6Ny4wOTk5OTk5MDQ2MzI1NjgsXCJcInlcIlwiOjAuNTUyNzM1ODA1NTExNDc0Nn1dfV0sXCJcImNoYXJ0T3B0aW9uc1wiXCI6e1wiXCJ4QXhpc05hbWVcIlwiOlwiXCJDb25jLlwiXCIsXCJcInlBeGlzTmFtZVwiXCI6XCJcIkFjdGl2aXR5XCJcIixcIlwidGl0bGVcIlwiOlwiXCJEb3NlLVJlc3BvbnNlIGN1cnZlc1wiXCJ9fVwiLHRleHQsLFxuLCwsLCwsLCwsLCwsLCwsLCwsLCwsYCk7XG50ZXN0RGF0YS5jb2x1bW5zLmFkZChERy5Db2x1bW4uZnJvbUxpc3QoREcuVFlQRS5CWVRFX0FSUkFZLCAnQmluYXJ5SW1hZ2UnLCBBcnJheS5mcm9tKG5ldyBVaW50OEFycmF5KDExKSkpKTtcbiJdfQ==","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { testData } from './dataframe-utils';\nimport { changeOptionsSaveLayout, filterAsync, loadLayout, selectFilterChangeCurrent, testViewerInternal } from './test-viewer-utils';\nconst STANDART_TIMEOUT = 30000;\nconst BENCHMARK_TIMEOUT = 10800000;\nconst stdLog = console.log.bind(console);\nconst stdInfo = console.info.bind(console);\nconst stdWarn = console.warn.bind(console);\nconst stdError = console.error.bind(console);\nexport const tests = {};\nconst autoTestsCatName = 'Auto Tests';\nconst demoCatName = 'Demo';\nconst detectorsCatName = 'Detectors';\nconst coreCatName = 'Core';\nconst wasRegistered = {};\nexport let currentCategory;\nexport var assure;\n(function (assure) {\n function notNull(value, name) {\n if (value == null)\n throw new Error(`${name == null ? 'Value' : name} not defined`);\n }\n assure.notNull = notNull;\n})(assure || (assure = {}));\nexport class TestContext {\n constructor(catchUnhandled, report, returnOnFail) {\n this.catchUnhandled = true;\n this.report = false;\n this.returnOnFail = false;\n this.closeAll = true;\n if (catchUnhandled !== undefined)\n this.catchUnhandled = catchUnhandled;\n if (report !== undefined)\n this.report = report;\n if (returnOnFail !== undefined)\n this.returnOnFail = returnOnFail;\n }\n ;\n}\nexport class Test {\n constructor(category, name, test, options) {\n var _a;\n this.category = category;\n this.name = name;\n options !== null && options !== void 0 ? options : (options = {});\n (_a = options.timeout) !== null && _a !== void 0 ? _a : (options.timeout = STANDART_TIMEOUT);\n this.options = options;\n this.test = () => __awaiter(this, void 0, void 0, function* () {\n return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {\n var _b;\n let result = '';\n try {\n if (DG.Test.isInDebug)\n debugger;\n let res = yield test();\n try {\n result = (_b = res === null || res === void 0 ? void 0 : res.toString()) !== null && _b !== void 0 ? _b : '';\n }\n catch (e) {\n result = 'Can\\'t convert test\\'s result to string';\n console.error(`Can\\'t convert test\\'s result to string in the ${this.category}:${this.name} test`);\n }\n }\n catch (e) {\n reject(e);\n }\n resolve(result);\n }));\n });\n }\n}\nexport class Category {\n}\nexport class NodeTestExecutionOptions {\n}\nexport class TestExecutionOptions {\n}\nexport function testEvent(event, handler, trigger, ms = 0, reason = `timeout`) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise((resolve, reject) => {\n const sub = event.subscribe((args) => {\n try {\n handler(args);\n resolve('OK');\n }\n catch (e) {\n reject(e);\n }\n finally {\n sub.unsubscribe();\n clearTimeout(timeout);\n }\n });\n const timeout = setTimeout(() => {\n sub.unsubscribe();\n // eslint-disable-next-line prefer-promise-reject-errors\n reject(reason);\n }, ms);\n trigger();\n });\n });\n}\nexport function testEventAsync(event, handler, trigger, ms = 0, reason = `timeout`) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise((resolve, reject) => {\n const sub = event.subscribe((args) => {\n handler(args).then(() => {\n resolve('OK');\n }).catch((e) => {\n reject(e);\n }).finally(() => {\n sub.unsubscribe();\n clearTimeout(timeout);\n });\n });\n const timeout = setTimeout(() => {\n sub.unsubscribe();\n // eslint-disable-next-line prefer-promise-reject-errors\n reject(reason);\n }, ms);\n trigger();\n });\n });\n}\nexport function test(name, test, options) {\n if (tests[currentCategory] == undefined)\n tests[currentCategory] = {};\n if (tests[currentCategory].tests == undefined)\n tests[currentCategory].tests = [];\n tests[currentCategory].tests.push(new Test(currentCategory, name, test, options));\n}\n/* Tests two objects for equality, throws an exception if they are not equal. */\nexport function expect(actual, expected = true, error) {\n if (error)\n error = `${error}, `;\n else\n error = '';\n if (actual !== expected)\n throw new Error(`${error}Expected \"${expected}\", got \"${actual}\"`);\n}\nexport function expectFloat(actual, expected, tolerance = 0.001, error) {\n if ((actual === Number.POSITIVE_INFINITY && expected === Number.POSITIVE_INFINITY) ||\n (actual === Number.NEGATIVE_INFINITY && expected === Number.NEGATIVE_INFINITY) ||\n (actual === Number.NaN && expected === Number.NaN) || (isNaN(actual) && isNaN(expected)))\n return;\n const areEqual = Math.abs(actual - expected) < tolerance;\n expect(areEqual, true, `${error !== null && error !== void 0 ? error : ''} (tolerance = ${tolerance}; a = ${actual}, e = ${expected})`);\n if (!areEqual)\n throw new Error(`Expected ${expected}, got ${actual} (tolerance = ${tolerance})`);\n}\nexport function expectTable(actual, expected, error) {\n const expectedRowCount = expected.rowCount;\n const actualRowCount = actual.rowCount;\n expect(actualRowCount, expectedRowCount, `${error !== null && error !== void 0 ? error : ''}, row count`);\n for (const column of expected.columns) {\n const actualColumn = actual.columns.byName(column.name);\n if (actualColumn == null)\n throw new Error(`Column ${column.name} not found`);\n if (actualColumn.type != column.type)\n throw new Error(`Column ${column.name} type expected ${column.type} got ${actualColumn.type}`);\n for (let i = 0; i < expectedRowCount; i++) {\n const value = column.get(i);\n const actualValue = actualColumn.get(i);\n if (column.type == DG.TYPE.FLOAT)\n expectFloat(actualValue, value, 0.0001, error);\n else if (column.type == DG.TYPE.DATE_TIME)\n expect(actualValue.isSame(value), true, error);\n else\n expect(actualValue, value, error);\n }\n }\n}\nexport function expectObject(actual, expected) {\n for (const [expectedKey, expectedValue] of Object.entries(expected)) {\n if (!actual.hasOwnProperty(expectedKey))\n throw new Error(`Expected property \"${expectedKey}\" not found`);\n const actualValue = actual[expectedKey];\n if (actualValue instanceof Array && expectedValue instanceof Array)\n expectArray(actualValue, expectedValue);\n else if (actualValue instanceof Object && expectedValue instanceof Object)\n expectObject(actualValue, expectedValue);\n else if (Number.isFinite(actualValue) && Number.isFinite(expectedValue))\n expectFloat(actualValue, expectedValue);\n else if (actualValue != expectedValue)\n throw new Error(`Expected (${expectedValue}) for key '${expectedKey}', got (${actualValue})`);\n }\n}\nexport function expectArray(actual, expected) {\n const actualLength = actual.length;\n const expectedLength = expected.length;\n if (actualLength != expectedLength) {\n throw new Error(`Arrays are of different length: actual array length is ${actualLength} ` +\n `and expected array length is ${expectedLength}`);\n }\n for (let i = 0; i < actualLength; i++) {\n if (actual[i] instanceof Array && expected[i] instanceof Array)\n expectArray(actual[i], expected[i]);\n else if (actual[i] instanceof Object && expected[i] instanceof Object)\n expectObject(actual[i], expected[i]);\n else if (actual[i] != expected[i])\n throw new Error(`Expected ${expected[i]} at position ${i}, got ${actual[i]}`);\n }\n}\n/* Defines a test suite. */\nexport function category(category, tests_, options) {\n var _a;\n currentCategory = category;\n tests_();\n if (tests[currentCategory]) {\n tests[currentCategory].clear = (_a = options === null || options === void 0 ? void 0 : options.clear) !== null && _a !== void 0 ? _a : true;\n tests[currentCategory].timeout = options === null || options === void 0 ? void 0 : options.timeout;\n tests[currentCategory].benchmarks = options === null || options === void 0 ? void 0 : options.benchmarks;\n tests[currentCategory].stressTests = options === null || options === void 0 ? void 0 : options.stressTests;\n tests[currentCategory].owner = options === null || options === void 0 ? void 0 : options.owner;\n }\n}\n/* Defines a function to be executed before the tests in this category are executed. */\nexport function before(before) {\n if (tests[currentCategory] == undefined)\n tests[currentCategory] = {};\n tests[currentCategory].before = before;\n}\n/* Defines a function to be executed after the tests in this category are executed. */\nexport function after(after) {\n if (tests[currentCategory] == undefined)\n tests[currentCategory] = {};\n tests[currentCategory].after = after;\n}\nfunction addNamespace(s, f) {\n return s.replace(new RegExp(f.name, 'gi'), f.nqName);\n}\nexport function initAutoTests(package_, module) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n return __awaiter(this, void 0, void 0, function* () {\n const packageId = package_.id;\n if (wasRegistered[packageId])\n return;\n const moduleTests = module ? module.tests : tests;\n if (package_.name === 'DevTools' || (!!module && module._package.name === 'DevTools')) {\n for (const f of window.dartTests) {\n const arr = f.name.split(/\\s*\\|\\s*!/g);\n let name = (_a = arr.pop()) !== null && _a !== void 0 ? _a : f.name;\n let cat = arr.length ? coreCatName + ': ' + arr.join(': ') : coreCatName;\n let fullName = name.split(' | ');\n name = fullName[fullName.length - 1];\n fullName.unshift(cat);\n fullName.pop();\n cat = fullName.join(': ');\n if (moduleTests[cat] === undefined)\n moduleTests[cat] = { tests: [], clear: true };\n moduleTests[cat].tests.push(new Test(cat, name, f.test, { isAggregated: false, timeout: (_c = (_b = f.options) === null || _b === void 0 ? void 0 : _b.timeout) !== null && _c !== void 0 ? _c : STANDART_TIMEOUT, skipReason: (_d = f.options) === null || _d === void 0 ? void 0 : _d.skipReason, owner: (_e = f.options) === null || _e === void 0 ? void 0 : _e.owner, benchmark: (_g = (_f = f.options) === null || _f === void 0 ? void 0 : _f.benchmark) !== null && _g !== void 0 ? _g : false }));\n }\n }\n const moduleAutoTests = [];\n const moduleDemo = [];\n const moduleDetectors = [];\n const packFunctions = yield grok.dapi.functions.filter(`package.id = \"${packageId}\"`).list();\n const reg = new RegExp(/skip:\\s*([^,\\s]+)|wait:\\s*(\\d+)|cat:\\s*([^,\\s]+)|timeout:\\s*(\\d+)/g);\n for (const f of packFunctions) {\n const tests = f.options['test'];\n const demo = f.options['demoPath'];\n if ((tests && Array.isArray(tests) && tests.length)) {\n for (let i = 0; i < tests.length; i++) {\n const res = tests[i].matchAll(reg);\n const map = {};\n Array.from(res).forEach((arr) => {\n if (arr[0].startsWith('skip'))\n map['skip'] = arr[1];\n else if (arr[0].startsWith('wait'))\n map['wait'] = parseInt(arr[2]);\n else if (arr[0].startsWith('cat'))\n map['cat'] = arr[3];\n else if (arr[0].startsWith('timeout'))\n map['timeout'] = parseInt(arr[4]);\n });\n const test = new Test((_h = map.cat) !== null && _h !== void 0 ? _h : autoTestsCatName, tests.length === 1 ? f.name : `${f.name} ${i + 1}`, () => __awaiter(this, void 0, void 0, function* () {\n const res = yield grok.functions.eval(addNamespace(tests[i], f));\n if (map.wait)\n yield delay(map.wait);\n // eslint-disable-next-line no-throw-literal\n if (typeof res === 'boolean' && !res)\n throw `Failed: ${tests[i]}, expected true, got ${res}`;\n }), { skipReason: map.skip, timeout: DG.Test.isInBenchmark ? (_j = map.benchmarkTimeout) !== null && _j !== void 0 ? _j : BENCHMARK_TIMEOUT : (_k = map.timeout) !== null && _k !== void 0 ? _k : STANDART_TIMEOUT });\n if (map.cat) {\n const cat = map.cat;\n if (moduleTests[cat] === undefined)\n moduleTests[cat] = { tests: [], clear: true };\n // only before/after can be defined in ts files tests under the category\n if (!moduleTests[cat].tests)\n moduleTests[cat].tests = [];\n moduleTests[cat].tests.push(test);\n }\n else\n moduleAutoTests.push(test);\n }\n }\n if (demo) {\n const wait = f.options['demoWait'] ? parseInt(f.options['demoWait']) : undefined;\n const test = new Test(demoCatName, f.friendlyName, () => __awaiter(this, void 0, void 0, function* () {\n yield delay(300);\n grok.shell.clearLastError();\n yield f.apply();\n yield delay(wait ? wait : 2000);\n const unhandled = yield grok.shell.lastError;\n if (unhandled)\n throw new Error(unhandled);\n }), { skipReason: f.options['demoSkip'] });\n moduleDemo.push(test);\n }\n if (f.hasTag('semTypeDetector')) {\n let detectorsTestData = testData;\n if (f.options['testData']) {\n detectorsTestData = yield grok.data.files.openTable(`System:AppData/${package_.nqName}/${f.options['testData']}`);\n }\n const test = new Test(detectorsCatName, f.friendlyName, () => __awaiter(this, void 0, void 0, function* () {\n const arr = [];\n console.log(`System:AppData/${package_.nqName}/${f.options['testData']}`);\n for (const col of detectorsTestData.clone().columns) {\n const res = yield f.apply([col]);\n arr.push(res || col.semType);\n }\n const resArr = arr.filter((i) => i);\n expect(resArr.length, 1);\n if (f.options['testDataColumnName'])\n expect(resArr[0], f.options['testDataColumnName']);\n }), { skipReason: f.options['skipTest'] });\n moduleDetectors.push(test);\n }\n }\n wasRegistered[packageId] = true;\n if (moduleAutoTests.length > 0)\n moduleTests[autoTestsCatName] = { tests: moduleAutoTests, clear: true };\n if (moduleDemo.length > 0)\n moduleTests[demoCatName] = { tests: moduleDemo, clear: true };\n if (moduleDetectors.length > 0)\n moduleTests[detectorsCatName] = { tests: moduleDetectors, clear: false };\n });\n}\nfunction redefineConsole() {\n const logs = [];\n console.log = (...args) => {\n logs.push(...args);\n stdLog(...args);\n };\n console.info = (...args) => {\n logs.push(...args);\n stdInfo(...args);\n };\n console.warn = (...args) => {\n logs.push(...args);\n stdWarn(...args);\n };\n console.error = (...args) => {\n logs.push(...args);\n stdError(...args);\n };\n return logs;\n}\nfunction resetConsole() {\n console.log = stdLog;\n console.info = stdInfo;\n console.warn = stdWarn;\n console.error = stdError;\n}\nexport function runTests(options) {\n var _a, _b;\n var _c;\n return __awaiter(this, void 0, void 0, function* () {\n const package_ = (options === null || options === void 0 ? void 0 : options.nodeOptions) ? options.nodeOptions.package : grok.functions.getCurrentCall().func.package;\n if (!package_)\n throw new Error('Can\\'t run tests outside of the package');\n const match = (_a = package_.packageOwner) === null || _a === void 0 ? void 0 : _a.match(/<([^>]*)>/);\n const packageOwner = match ? match[1] : '';\n if (package_ != undefined)\n yield initAutoTests(package_);\n const results = [];\n console.log(`Running tests...`);\n console.log(options);\n options !== null && options !== void 0 ? options : (options = {});\n (_b = (_c = options).testContext) !== null && _b !== void 0 ? _b : (_c.testContext = new TestContext());\n grok.shell.clearLastError();\n const logs = redefineConsole();\n yield invokeTests(tests, options);\n for (let r of results) {\n r.result = r.result.toString().replace(/\"/g, '\\'');\n if (r.logs != undefined)\n r.logs = r.logs.toString().replace(/\"/g, '\\'');\n }\n return results;\n function invokeCategoryMethod(method, category) {\n return __awaiter(this, void 0, void 0, function* () {\n let invokationResult = undefined;\n try {\n if (method !== undefined) {\n yield timeout(() => __awaiter(this, void 0, void 0, function* () {\n yield method();\n }), 100000, `before ${category}: timeout error`);\n }\n }\n catch (x) {\n invokationResult = yield getResult(x);\n }\n return invokationResult;\n });\n }\n function invokeTestsInCategory(category, options, isTargetCategory) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u;\n return __awaiter(this, void 0, void 0, function* () {\n let t = (_a = category.tests) !== null && _a !== void 0 ? _a : [];\n const res = [];\n // let memoryUsageBefore = (window?.performance as any)?.memory?.usedJSHeapSize;\n const widgetsBefore = getWidgetsCountSafe();\n if (category.clear) {\n let skippingTests = isTargetCategory && options.skipToTest != undefined;\n for (let i = 0; i < t.length; i++) {\n if (t[i].options) {\n if (((_b = t[i].options) === null || _b === void 0 ? void 0 : _b.benchmark) === undefined) {\n if (!t[i].options)\n t[i].options = {};\n t[i].options.benchmark = (_c = category.benchmarks) !== null && _c !== void 0 ? _c : false;\n }\n }\n let test = t[i];\n if (options.test)\n if (options.test.toLowerCase() !== test.name.toLowerCase())\n continue;\n if (skippingTests) {\n if ((options === null || options === void 0 ? void 0 : options.skipToTest) != undefined && test.name.toLowerCase().trim() === (options === null || options === void 0 ? void 0 : options.skipToTest.toLowerCase().trim())) {\n // Found the target test, stop skipping after this one\n skippingTests = false;\n }\n else\n continue;\n }\n if (test === null || test === void 0 ? void 0 : test.options) {\n test.options.owner = (_g = (_f = (_e = (_d = t[i].options) === null || _d === void 0 ? void 0 : _d.owner) !== null && _e !== void 0 ? _e : category === null || category === void 0 ? void 0 : category.owner) !== null && _f !== void 0 ? _f : packageOwner) !== null && _g !== void 0 ? _g : '';\n }\n // let isGBEnable = (window as any).gc && test.options?.skipReason == undefined;\n // console.log(`********${isGBEnable}`);\n // if (isGBEnable)\n // await (window as any).gc();\n // memoryUsageBefore = (window?.performance as any)?.memory?.usedJSHeapSize;\n let testRun = yield execTest(test, options === null || options === void 0 ? void 0 : options.test, logs, DG.Test.isInBenchmark ? (_j = (_h = t[i].options) === null || _h === void 0 ? void 0 : _h.benchmarkTimeout) !== null && _j !== void 0 ? _j : BENCHMARK_TIMEOUT : (_l = (_k = t[i].options) === null || _k === void 0 ? void 0 : _k.timeout) !== null && _l !== void 0 ? _l : STANDART_TIMEOUT, package_.name, options.verbose);\n // if (isGBEnable)\n // await (window as any).gc();\n if (testRun) {\n res.push(Object.assign(Object.assign({}, testRun), { widgetsDifference: getWidgetsCountSafe() - widgetsBefore }));\n // Return early if returnOnFail is set and test failed (but ignore failure for the skipToTest test itself)\n if (options.returnOnFail && options.skipToTest !== test.name && !testRun.success && !testRun.skipped)\n return res;\n }\n // res.push({ ...testRun, memoryDelta: (window?.performance as any)?.memory?.usedJSHeapSize - memoryUsageBefore, widgetsDelta: getWidgetsCountSafe() - widgetsBefore });\n if (!options.nodeOptions && ((_m = options.testContext) === null || _m === void 0 ? void 0 : _m.closeAll) !== false) {\n grok.shell.closeAll();\n DG.Balloon.closeAll();\n }\n }\n }\n else {\n let skippingTests = isTargetCategory && options.skipToTest != undefined;\n for (let i = 0; i < t.length; i++) {\n let test = t[i];\n if (options.test)\n if (options.test.toLowerCase() !== test.name.toLowerCase())\n continue;\n if (skippingTests) {\n if ((options === null || options === void 0 ? void 0 : options.skipToTest) != undefined && test.name.toLowerCase().trim() === (options === null || options === void 0 ? void 0 : options.skipToTest.toLowerCase().trim())) {\n // Found the target test, stop skipping after this one\n skippingTests = false;\n }\n continue; // Skip this test (including the target)\n }\n if (test === null || test === void 0 ? void 0 : test.options) {\n test.options.owner = (_r = (_q = (_p = (_o = t[i].options) === null || _o === void 0 ? void 0 : _o.owner) !== null && _p !== void 0 ? _p : category === null || category === void 0 ? void 0 : category.owner) !== null && _q !== void 0 ? _q : packageOwner) !== null && _r !== void 0 ? _r : '';\n }\n // let isGBEnable = (window as any).gc && test.options?.skipReason == undefined;\n // console.log(`********${isGBEnable}`);\n // if (isGBEnable)\n // await (window as any).gc();\n // memoryUsageBefore = (window?.performance as any)?.memory?.usedJSHeapSize;\n let testRun = yield execTest(test, options === null || options === void 0 ? void 0 : options.test, logs, DG.Test.isInBenchmark ? (_t = (_s = t[i].options) === null || _s === void 0 ? void 0 : _s.benchmarkTimeout) !== null && _t !== void 0 ? _t : BENCHMARK_TIMEOUT : (_u = t[i].options) === null || _u === void 0 ? void 0 : _u.timeout, package_.name, options.verbose);\n // if (isGBEnable)\n // await (window as any).gc();\n if (testRun) {\n res.push(Object.assign(Object.assign({}, testRun), { widgetsDifference: getWidgetsCountSafe() - widgetsBefore }));\n // Return early if returnOnFail is set and test failed (but ignore failure for the skipToTest test itself)\n if (options.returnOnFail && options.skipToTest !== test.name && !testRun.success && !testRun.skipped)\n return res;\n }\n // res.push({ ...testRun, memoryDelta: (window?.performance as any)?.memory?.usedJSHeapSize - memoryUsageBefore, widgetsDifference: getWidgetsCountSafe() - widgetsBefore });\n }\n }\n return res;\n });\n }\n function getWidgetsCountSafe() {\n var _a;\n if (typeof process !== 'undefined')\n return 0;\n let length = -1;\n try {\n length = DG.Widget.getAll().length;\n }\n catch (e) {\n console.warn((_a = e.message) !== null && _a !== void 0 ? _a : e);\n }\n return length;\n }\n function invokeTests(categoriesToInvoke, options) {\n var _a, _b, _c, _d, _e, _f;\n return __awaiter(this, void 0, void 0, function* () {\n try {\n let skippingCategories = (options === null || options === void 0 ? void 0 : options.skipToCategory) != undefined;\n let isTargetCategory = false;\n for (const [key, value] of Object.entries(categoriesToInvoke)) {\n if ((_a = options.exclude) === null || _a === void 0 ? void 0 : _a.some((c) => key.startsWith(c)))\n continue;\n if ((options === null || options === void 0 ? void 0 : options.category) != null && !key.toLowerCase().startsWith(options === null || options === void 0 ? void 0 : options.category.toLowerCase().trim()))\n continue;\n if (skippingCategories) {\n if (isTargetCategory)\n skippingCategories = false;\n else {\n if ((options === null || options === void 0 ? void 0 : options.skipToCategory) != null && key.toLowerCase().trim() === (options === null || options === void 0 ? void 0 : options.skipToCategory.toLowerCase().trim())) {\n isTargetCategory = true;\n }\n else {\n // Haven't found the target category yet, keep skipping\n continue;\n }\n }\n }\n //@ts-ignore\n const skipped = (_b = value.tests) === null || _b === void 0 ? void 0 : _b.every((t) => {\n var _a;\n return ((_a = t.options) === null || _a === void 0 ? void 0 : _a.skipReason)\n || ((options === null || options === void 0 ? void 0 : options.test) != null && options.test.toLowerCase() !== t.name.toLowerCase());\n });\n if (!skipped) {\n //@ts-ignore\n const skippedCount = ((_c = value.tests) !== null && _c !== void 0 ? _c : []).filter((t) => { var _a; return ((_a = t.options) === null || _a === void 0 ? void 0 : _a.skipReason) || ((options === null || options === void 0 ? void 0 : options.test) != null && options.test.toLowerCase() !== t.name.toLowerCase()); }).length;\n stdLog(`Package testing: Started {{${key}}}${skippedCount > 0 ? ` skipped {{${skippedCount}}}` : ''}`);\n value.beforeStatus = yield invokeCategoryMethod(value.before, key);\n }\n let t = (_d = value.tests) !== null && _d !== void 0 ? _d : [];\n if (options.stressTest) {\n t = t.filter((e) => { var _a; return (_a = e.options) === null || _a === void 0 ? void 0 : _a.stressTest; });\n t = shuffle(t);\n }\n if (((_f = (_e = options.tags) === null || _e === void 0 ? void 0 : _e.length) !== null && _f !== void 0 ? _f : 0) > 0) {\n t = t.filter((e) => { var _a, _b; return (_b = (_a = e.options) === null || _a === void 0 ? void 0 : _a.tags) === null || _b === void 0 ? void 0 : _b.some(tag => { var _a; return ((_a = options === null || options === void 0 ? void 0 : options.tags) !== null && _a !== void 0 ? _a : []).includes(tag); }); });\n }\n let res;\n if (value.beforeStatus) {\n res = Array.from(t.map((testElem) => {\n return {\n date: new Date().toISOString(),\n category: key,\n name: testElem.name,\n success: false,\n result: 'before() failed',\n ms: 0,\n skipped: false,\n logs: '',\n owner: packageOwner,\n package: package_.name,\n widgetsDifference: 0,\n flaking: DG.Test.isReproducing\n };\n }));\n res.forEach((test) => __awaiter(this, void 0, void 0, function* () { return yield grok.shell.reportTest('package', test); }));\n }\n else\n res = yield invokeTestsInCategory(value, options, skippingCategories);\n const data = res.filter((d) => d.result != 'skipped');\n if (!skipped)\n value.afterStatus = yield invokeCategoryMethod(value.after, key);\n // Clear after category\n // grok.shell.closeAll();\n // DG.Balloon.closeAll();\n if (value.afterStatus) {\n stdLog(`Package testing: Category after() {{${key}}} failed`);\n stdLog(`Package testing: Result for {{${key}}} after: ${value.afterStatus}`);\n data.push({\n date: new Date().toISOString(),\n category: key,\n name: 'after',\n success: false,\n result: value.afterStatus,\n ms: 0,\n skipped: false,\n logs: '',\n owner: packageOwner,\n package: package_.name,\n widgetsDifference: 0,\n flaking: DG.Test.isReproducing\n });\n }\n if (value.beforeStatus) {\n stdLog(`Package testing: Category before() {{${key}}} failed`);\n stdLog(`Package testing: Result for {{${key}}} before: ${value.beforeStatus}`);\n data.push({\n date: new Date().toISOString(),\n category: key,\n name: 'before',\n success: false,\n result: value.beforeStatus,\n ms: 0,\n skipped: false,\n logs: '',\n owner: packageOwner,\n package: package_.name,\n widgetsDifference: 0,\n flaking: DG.Test.isReproducing\n });\n }\n results.push(...data);\n // If returnOnFail is set and a test failed (other than skipToTest), stop processing more categories\n if (options.returnOnFail && data.some((d) => !d.success && !d.skipped && d.name !== options.skipToTest))\n break;\n }\n }\n finally {\n resetConsole();\n }\n if (options.testContext.catchUnhandled && (!DG.Test.isInBenchmark)) {\n yield delay(1000);\n const error = yield grok.shell.lastError;\n if (error != undefined) {\n const params = {\n logs: '',\n date: new Date().toISOString(),\n category: 'Unhandled exceptions',\n name: 'Exception',\n result: error !== null && error !== void 0 ? error : '',\n success: !error,\n ms: 0,\n skipped: false,\n owner: packageOwner !== null && packageOwner !== void 0 ? packageOwner : '',\n 'package': package_.name,\n widgetsDifference: 0\n };\n stdLog(`Package testing: Unhandled Exception: ${error}`);\n results.push(Object.assign(Object.assign({}, params), { 'flaking': DG.Test.isReproducing && !error }));\n params.package = package_.name;\n yield grok.shell.reportTest('package', params);\n }\n }\n });\n }\n });\n}\nfunction getResult(x) {\n return __awaiter(this, void 0, void 0, function* () {\n return `${x.toString()}\\n${x.stack ? (yield DG.Logger.translateStackTrace(x.stack)) : ''}`;\n });\n}\nfunction execTest(t, predicate, logs, testTimeout, packageName, verbose) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;\n return __awaiter(this, void 0, void 0, function* () {\n logs.length = 0;\n let r;\n let type = 'package';\n const filter = predicate != undefined && (t.name.toLowerCase() !== predicate.toLowerCase());\n let skip = ((_a = t.options) === null || _a === void 0 ? void 0 : _a.skipReason) || filter;\n let skipReason = filter ? 'skipped' : (_b = t.options) === null || _b === void 0 ? void 0 : _b.skipReason;\n if (DG.Test.isInBenchmark && !((_c = t.options) === null || _c === void 0 ? void 0 : _c.benchmark)) {\n stdLog(`Package testing: Skipped {{${t.category}}} {{${t.name}}} doesnt available in benchmark mode`);\n return undefined;\n }\n if (skip && !DG.Test.isInBenchmark)\n stdLog(`Package testing: Skipped {{${t.category}}} {{${t.name}}}`);\n if (!skip)\n stdLog(`Package testing: Started {{${t.category}}} {{${t.name}}}`);\n const start = Date.now();\n const startDate = new Date(start).toISOString();\n try {\n if (skip)\n r = { name: t.name, owner: (_e = (_d = t.options) === null || _d === void 0 ? void 0 : _d.owner) !== null && _e !== void 0 ? _e : '', category: t.category, logs: '', date: startDate, success: true, result: skipReason, ms: 0, skipped: true, package: packageName !== null && packageName !== void 0 ? packageName : '', flaking: DG.Test.isReproducing };\n else {\n let timeout_ = testTimeout !== null && testTimeout !== void 0 ? testTimeout : STANDART_TIMEOUT;\n if (DG.Test.isProfiling)\n console.profile(`${t.category}: ${t.name}`);\n r = { name: t.name, owner: (_g = (_f = t.options) === null || _f === void 0 ? void 0 : _f.owner) !== null && _g !== void 0 ? _g : '', category: t.category, logs: '', date: startDate, success: true, result: (_h = (yield timeout(t.test, timeout_)).toString()) !== null && _h !== void 0 ? _h : 'OK', ms: 0, skipped: false, package: packageName !== null && packageName !== void 0 ? packageName : '', flaking: DG.Test.isReproducing };\n if (DG.Test.isProfiling) {\n console.profileEnd(`${t.category}: ${t.name}`);\n grok.shell.info(`Profiling of ${t.category}: ${t.name} finished \\n Please ensure that you have opened DevTools (F12) / Performance panel before test starts.`);\n }\n }\n }\n catch (x) {\n stdError(x);\n r = { name: t.name, owner: (_k = (_j = t.options) === null || _j === void 0 ? void 0 : _j.owner) !== null && _k !== void 0 ? _k : '', category: t.category, logs: '', date: startDate, success: false, result: yield getResult(x), ms: 0, skipped: false, package: packageName !== null && packageName !== void 0 ? packageName : '', flaking: false };\n }\n if (((_l = t.options) === null || _l === void 0 ? void 0 : _l.isAggregated) && r.result.constructor === DG.DataFrame) {\n const col = r.result.col('success');\n if (col)\n r.success = col.stats.sum === col.length;\n if (!verbose) {\n const df = r.result;\n df.columns.remove('stack');\n df.rows.removeWhere((r) => r.get('success'));\n r.result = df;\n }\n r.result = r.result.toCsv();\n }\n r.logs = logs.join('\\n');\n r.ms = Date.now() - start;\n if (!skip)\n stdLog(`Package testing: Finished {{${t.category}}} {{${t.name}}} with {{${r.success ? 'success' : 'error'}}} for ${r.ms} ms`);\n if (!r.success) {\n stdLog(`Package testing: Result for {{${t.category}}} {{${t.name}}}: ${r.result}`);\n }\n r.category = t.category;\n r.name = t.name;\n r.owner = (_o = (_m = t.options) === null || _m === void 0 ? void 0 : _m.owner) !== null && _o !== void 0 ? _o : '';\n if (!filter) {\n let params = {\n 'success': r.success, 'result': r.result, 'ms': r.ms, 'date': r.date,\n 'skipped': r.skipped, 'category': t.category, 'name': t.name, 'logs': r.logs, 'owner': r.owner,\n 'flaking': DG.Test.isReproducing && r.success,\n 'package': r.package\n };\n if (r.result.constructor == Object) {\n const res = Object.keys(r.result).reduce((acc, k) => (Object.assign(Object.assign({}, acc), { ['result.' + k]: r.result[k] })), {});\n params = Object.assign(Object.assign({}, params), res);\n }\n if (params.result instanceof DG.DataFrame)\n params.result = JSON.stringify((_p = params.result) === null || _p === void 0 ? void 0 : _p.toJson()) || '';\n yield grok.shell.reportTest(type, params);\n }\n return r;\n });\n}\nexport function shuffle(array) {\n const newArr = array.slice();\n newArr.sort(() => Math.random() - 0.5);\n return newArr;\n}\n/* Waits [ms] milliseconds */\nexport function delay(ms) {\n return __awaiter(this, void 0, void 0, function* () {\n yield new Promise((r) => setTimeout(r, ms));\n });\n}\nexport function awaitCheck(checkHandler, error = 'Timeout exceeded', wait = 500, interval = 50) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n clearInterval(intervalId);\n reject(new Error(error));\n }, wait);\n // @ts-ignore\n const intervalId = setInterval(() => {\n if (checkHandler()) {\n clearInterval(intervalId);\n resolve(null);\n }\n }, interval);\n });\n });\n}\n// Returns test execution result or an error in case of timeout\nexport function timeout(func, testTimeout, timeoutReason = 'EXECUTION TIMEOUT') {\n return __awaiter(this, void 0, void 0, function* () {\n let timeout = null;\n const timeoutPromise = new Promise((_, reject) => {\n timeout = setTimeout(() => {\n // eslint-disable-next-line prefer-promise-reject-errors\n reject(timeoutReason);\n }, testTimeout);\n });\n try {\n return yield Promise.race([func(), timeoutPromise]);\n }\n finally {\n if (timeout)\n clearTimeout(timeout);\n }\n });\n}\nexport function isDialogPresent(dialogTitle) {\n const dialogs = DG.Dialog.getOpenDialogs();\n for (let i = 0; i < dialogs.length; i++) {\n if (dialogs[i].title == dialogTitle)\n return true;\n }\n return false;\n}\n/** Expects an asynchronous {@link action} to throw an exception. Use {@link check} to perform\n * deeper inspection of the exception if necessary.\n * @param {function(): Promise<void>} action\n * @param {function(any): boolean} check\n * @return {Promise<void>}\n */\nexport function expectExceptionAsync(action, check) {\n return __awaiter(this, void 0, void 0, function* () {\n let caught = false;\n let checked = false;\n try {\n yield action();\n }\n catch (e) {\n caught = true;\n checked = !check || check(e);\n }\n finally {\n if (!caught)\n throw new Error('An exception is expected but not thrown');\n if (!checked)\n throw new Error('An expected exception is thrown, but it does not satisfy the condition');\n }\n });\n}\nconst catDF = DG.DataFrame.fromColumns([DG.Column.fromStrings('col', ['val1', 'val2', 'val3'])]);\n/**\n * Universal test for viewers. It search viewers in DOM by tags: canvas, svg, img, input, h1, a\n * @param {string} v Viewer name\n * @param {_DG.DataFrame} df Dataframe to use. Should have at least 3 rows\n * @param {boolean} options.detectSemanticTypes Specify whether to detect semantic types or not\n * @param {boolean} options.readOnly If set to true, the dataframe will not be modified during the test\n * @param {boolean} options.arbitraryDfTest If set to false, test on arbitrary dataframe\n * (one categorical column) will not be performed\n * @param {object} options List of options (optional)\n * @return {Promise<void>} The test is considered successful if it completes without errors\n */\nexport function testViewer(v, df, options) {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n const packageName = (_a = options === null || options === void 0 ? void 0 : options.packageName) !== null && _a !== void 0 ? _a : '';\n if (options === null || options === void 0 ? void 0 : options.detectSemanticTypes)\n yield grok.data.detectSemanticTypes(df);\n const tv = grok.shell.addTableView(df);\n try {\n //1. Open, do nothing and close\n yield testViewerInternal(tv, v, packageName, grok.events.onViewerAdded);\n //in case viewer with async rendering - wait for render to complete\n if (options === null || options === void 0 ? void 0 : options.awaitViewer)\n yield testViewerInternal(tv, v, packageName, grok.events.onViewerAdded, undefined, options.awaitViewer);\n //2. Open viewer, run selection, filter, etc. and close\n if (!(options === null || options === void 0 ? void 0 : options.readOnly)) {\n yield testViewerInternal(tv, v, packageName, grok.events.onViewerAdded, selectFilterChangeCurrent);\n if (options === null || options === void 0 ? void 0 : options.awaitViewer)\n yield testViewerInternal(tv, v, packageName, grok.events.onViewerAdded, selectFilterChangeCurrent, options.awaitViewer);\n }\n //2. Open viewer, change options, save layout and close\n let propsAndLayout = null;\n propsAndLayout = yield testViewerInternal(tv, v, packageName, grok.events.onViewerAdded, changeOptionsSaveLayout);\n if (options === null || options === void 0 ? void 0 : options.awaitViewer)\n propsAndLayout = yield testViewerInternal(tv, v, packageName, grok.events.onViewerAdded, changeOptionsSaveLayout, options.awaitViewer);\n //3. Load layout\n yield testViewerInternal(tv, v, packageName, grok.events.onViewLayoutApplied, loadLayout, undefined, propsAndLayout === null || propsAndLayout === void 0 ? void 0 : propsAndLayout.layout, { savedProps: propsAndLayout === null || propsAndLayout === void 0 ? void 0 : propsAndLayout.savedProps });\n if (options === null || options === void 0 ? void 0 : options.awaitViewer)\n yield testViewerInternal(tv, v, packageName, grok.events.onViewLayoutApplied, loadLayout, options.awaitViewer, propsAndLayout === null || propsAndLayout === void 0 ? void 0 : propsAndLayout.layout, { savedProps: propsAndLayout === null || propsAndLayout === void 0 ? void 0 : propsAndLayout.savedProps });\n //4. Open viewer on arbitary dataset\n if ((options === null || options === void 0 ? void 0 : options.arbitraryDfTest) !== false) {\n tv.dataFrame = catDF;\n yield delay(50);\n yield testViewerInternal(tv, v, packageName, grok.events.onViewerAdded);\n if (options === null || options === void 0 ? void 0 : options.awaitViewer)\n yield testViewerInternal(tv, v, packageName, grok.events.onViewerAdded, undefined, options.awaitViewer);\n }\n //5. Call postponed filtering\n yield testViewerInternal(tv, v, packageName, grok.events.onViewerAdded, filterAsync);\n if (options === null || options === void 0 ? void 0 : options.awaitViewer)\n yield testViewerInternal(tv, v, packageName, grok.events.onViewerAdded, filterAsync, options.awaitViewer);\n }\n finally {\n // closeAll() is handling by common test workflow\n // grok.shell.closeAll();\n // DG.Balloon.closeAll();\n }\n });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBS0EsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTdDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLHlCQUF5QixFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdEksTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7QUFDL0IsTUFBTSxpQkFBaUIsR0FBRyxRQUFRLENBQUM7QUFFbkMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDekMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDM0MsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDM0MsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFFN0MsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUVkLEVBQUUsQ0FBQztBQUVQLE1BQU0sZ0JBQWdCLEdBQUcsWUFBWSxDQUFDO0FBQ3RDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUMzQixNQUFNLGdCQUFnQixHQUFHLFdBQVcsQ0FBQztBQUNyQyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUM7QUFDM0IsTUFBTSxhQUFhLEdBQStCLEVBQUUsQ0FBQztBQUNyRCxNQUFNLENBQUMsSUFBSSxlQUF1QixDQUFDO0FBRW5DLE1BQU0sS0FBVyxNQUFNLENBS3RCO0FBTEQsV0FBaUIsTUFBTTtJQUNyQixTQUFnQixPQUFPLENBQUMsS0FBVSxFQUFFLElBQWE7UUFDL0MsSUFBSSxLQUFLLElBQUksSUFBSTtZ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QUFFLENBQUM7b0JBQzVHLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7d0JBQzlCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7NEJBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs2QkFDL0MsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQzs0QkFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzZCQUM5RCxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDOzRCQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7NkJBQ2xELElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7NEJBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDM0UsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBQSxHQUFHLENBQUMsR0FBRyxtQ0FBSSxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFTLEVBQUU7d0JBQ2hILE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFD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USxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQzVHO1lBRUQsNkJBQTZCO1lBQzdCLE1BQU0sa0JBQWtCLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDckYsSUFBSSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsV0FBVztnQkFDdEIsTUFBTSxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsT0FBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBRTlHO2dCQUFTO1lBQ1IsaURBQWlEO1lBQ2pELHlCQUF5QjtZQUN6Qix5QkFBeUI7U0FDMUI7O0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSAqIGFzIF9ncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCB0eXBlICogYXMgX0RHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5kZWNsYXJlIGxldCBncm9rOiB0eXBlb2YgX2dyb2ssIERHOiB0eXBlb2YgX0RHO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0ZXN0RGF0YSB9IGZyb20gJy4vZGF0YWZyYW1lLXV0aWxzJztcbmltcG9ydCBUaW1lb3V0ID0gTm9kZUpTLlRpbWVvdXQ7XG5pbXBvcnQgeyBjaGFuZ2VPcHRpb25zU2F2ZUxheW91dCwgZmlsdGVyQXN5bmMsIGxvYWRMYXlvdXQsIHNlbGVjdEZpbHRlckNoYW5nZUN1cnJlbnQsIHRlc3RWaWV3ZXJJbnRlcm5hbCB9IGZyb20gJy4vdGVzdC12aWV3ZXItdXRpbHMnO1xuXG5jb25zdCBTVEFOREFSVF9USU1FT1VUID0gMzAwMDA7XG5jb25zdCBCRU5DSE1BUktfVElNRU9VVCA9IDEwODAwMDAwO1xuXG5jb25zdCBzdGRMb2cgPSBjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpO1xuY29uc3Qgc3RkSW5mbyA9IGNvbnNvbGUuaW5mby5iaW5kKGNvbnNvbGUpO1xuY29uc3Qgc3RkV2FybiA9IGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpO1xuY29uc3Qgc3RkRXJyb3IgPSBjb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSk7XG5cbmV4cG9ydCBjb25zdCB0ZXN0czoge1xuICBba2V5OiBzdHJpbmddOiBDYXRlZ29yeVxufSA9IHt9O1xuXG5jb25zdCBhdXRvVGVzdHNDYXROYW1lID0gJ0F1dG8gVGVzdHMnO1xuY29uc3QgZGVtb0NhdE5hbWUgPSAnRGVtbyc7XG5jb25zdCBkZXRlY3RvcnNDYXROYW1lID0gJ0RldGVjdG9ycyc7XG5jb25zdCBjb3JlQ2F0TmFtZSA9ICdDb3JlJztcbmNvbnN0IHdhc1JlZ2lzdGVyZWQ6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9ID0ge307XG5leHBvcnQgbGV0IGN1cnJlbnRDYXRlZ29yeTogc3RyaW5nO1xuXG5leHBvcnQgbmFtZXNwYWNlIGFzc3VyZSB7XG4gIGV4cG9ydCBmdW5jdGlvbiBub3ROdWxsKHZhbHVlOiBhbnksIG5hbWU/OiBzdHJpbmcpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtuYW1lID09IG51bGwgPyAnVmFsdWUnIDogbmFtZX0gbm90IGRlZmluZWRgKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlc3RPcHRpb25zIHtcbiAgdGltZW91dD86IG51bWJlcjtcbiAgYmVuY2htYXJrV2FyblRpbWVvdXQ/OiBudW1iZXI7XG4gIGJlbmNobWFya1RpbWVvdXQ/OiBudW1iZXI7XG4gIHVuaGFuZGxlZEV4Y2VwdGlvblRpbWVvdXQ/OiBudW1iZXI7XG4gIHNraXBSZWFzb24/OiBzdHJpbmc7XG4gIGlzQWdncmVnYXRlZD86IGJvb2xlYW47XG4gIGJlbmNobWFyaz86IGJvb2xlYW47XG4gIHN0cmVzc1Rlc3Q/OiBib29sZWFuO1xuICBvd25lcj86IHN0cmluZztcbiAgdGFncz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlc3RSZXN1bHQge1xuICBkYXRlOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgc3VjY2VzczogYm9vbGVhbjtcbiAgcmVzdWx0OiBhbnk7XG4gIG1zOiBudW1iZXI7XG4gIHNraXBwZWQ6IGJvb2xlYW47XG4gIGxvZ3M6IHN0cmluZztcbiAgb3duZXI6IHN0cmluZztcbiAgcGFja2FnZTogc3RyaW5nO1xuICBmbGFraW5nOiBib29sZWFuO1xufVxuXG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVzdFJlc3VsdEV4dGVuZGVkIGV4dGVuZHMgVGVzdFJlc3VsdHtcbiAgd2lkZ2V0c0RpZmZlcmVuY2U6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYXRlZ29yeU9wdGlvbnMge1xuICBjbGVhcj86IGJvb2xlYW47XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIGJlbmNobWFya3M/OiBib29sZWFuO1xuICBzdHJlc3NUZXN0cz86IGJvb2xlYW47XG4gIG93bmVyPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgVGVzdENvbnRleHQge1xuICBzdHJlc3NUZXN0PzogYm9vbGVhbjtcbiAgY2F0Y2hVbmhhbmRsZWQgPSB0cnVlO1xuICByZXBvcnQgPSBmYWxzZTtcbiAgcmV0dXJuT25GYWlsID0gZmFsc2U7XG4gIGNsb3NlQWxsID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3RvcihjYXRjaFVuaGFuZGxlZD86IGJvb2xlYW4sIHJlcG9ydD86IGJvb2xlYW4sIHJldHVybk9uRmFpbD86IGJvb2xlYW4pIHtcbiAgICBpZiAoY2F0Y2hVbmhhbmRsZWQgIT09IHVuZGVmaW5lZCkgdGhpcy5jYXRjaFVuaGFuZGxlZCA9IGNhdGNoVW5oYW5kbGVkO1xuICAgIGlmIChyZXBvcnQgIT09IHVuZGVmaW5lZCkgdGhpcy5yZXBvcnQgPSByZXBvcnQ7XG4gICAgaWYgKHJldHVybk9uRmFpbCAhPT0gdW5kZWZpbmVkKSB0aGlzLnJldHVybk9uRmFpbCA9IHJldHVybk9uRmFpbDtcbiAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIFRlc3Qge1xuICB0ZXN0OiAoKSA9PiBQcm9taXNlPGFueT47XG4gIG5hbWU6IHN0cmluZztcbiAgY2F0ZWdvcnk6IHN0cmluZztcbiAgb3B0aW9ucz86IFRlc3RPcHRpb25zO1xuXG4gIGNvbnN0cnVjdG9yKGNhdGVnb3J5OiBzdHJpbmcsIG5hbWU6IHN0cmluZywgdGVzdDogKCkgPT4gUHJvbWlzZTxhbnk+LCBvcHRpb25zPzogVGVzdE9wdGlvbnMpIHtcbiAgICB0aGlzLmNhdGVnb3J5ID0gY2F0ZWdvcnk7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICBvcHRpb25zID8/PSB7fTtcbiAgICBvcHRpb25zLnRpbWVvdXQgPz89IFNUQU5EQVJUX1RJTUVPVVQ7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLnRlc3QgPSBhc3luYyAoKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoREcuVGVzdC5pc0luRGVidWcpXG4gICAgICAgICAgICBkZWJ1Z2dlcjtcblxuICAgICAgICAgIGxldCByZXMgPSBhd2FpdCB0ZXN0KCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlcz8udG9TdHJpbmcoKSA/PyAnJztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9ICdDYW5cXCd0IGNvbnZlcnQgdGVzdFxcJ3MgcmVzdWx0IHRvIHN0cmluZyc7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBDYW5cXCd0IGNvbnZlcnQgdGVzdFxcJ3MgcmVzdWx0IHRvIHN0cmluZyBpbiB0aGUgJHt0aGlzLmNhdGVnb3J5fToke3RoaXMubmFtZX0gdGVzdGApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENhdGVnb3J5IHtcbiAgdGVzdHM/OiBUZXN0W107XG4gIGJlZm9yZT86ICgpID0+IFByb21pc2U8dm9pZD47XG4gIGFmdGVyPzogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICBiZWZvcmVTdGF0dXM/OiBzdHJpbmc7XG4gIGFmdGVyU3RhdHVzPzogc3RyaW5nO1xuICBjbGVhcj86IGJvb2xlYW47XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIGJlbmNobWFya3M/OiBib29sZWFuO1xuICBiZW5jaG1hcmtUaW1lb3V0PzogbnVtYmVyO1xuICBzdHJlc3NUZXN0cz86IGJvb2xlYW47XG4gIG93bmVyPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgTm9kZVRlc3RFeGVjdXRpb25PcHRpb25zIHtcbiAgcGFja2FnZSE6IF9ERy5QYWNrYWdlO1xufVxuXG5leHBvcnQgY2xhc3MgVGVzdEV4ZWN1dGlvbk9wdGlvbnMge1xuICBjYXRlZ29yeT86IHN0cmluZztcbiAgdGVzdD86IHN0cmluZztcbiAgdGVzdENvbnRleHQ/OiBUZXN0Q29udGV4dDtcbiAgZXhjbHVkZT86IHN0cmluZ1tdO1xuICB2ZXJib3NlPzogYm9vbGVhbjtcbiAgc3RyZXNzVGVzdD86IGJvb2xlYW47XG4gIHRhZ3M/OiBzdHJpbmdbXTtcbiAgbm9kZU9wdGlvbnM/OiBOb2RlVGVzdEV4ZWN1dGlvbk9wdGlvbnM7XG4gIHNraXBUb0NhdGVnb3J5Pzogc3RyaW5nO1xuICBza2lwVG9UZXN0Pzogc3RyaW5nO1xuICByZXR1cm5PbkZhaWw/OiBib29sZWFuO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdEV2ZW50PFQ+KGV2ZW50OiBPYnNlcnZhYmxlPFQ+LFxuICBoYW5kbGVyOiAoYXJnczogVCkgPT4gdm9pZCwgdHJpZ2dlcjogKCkgPT4gdm9pZCwgbXM6IG51bWJlciA9IDAsIHJlYXNvbjogc3RyaW5nID0gYHRpbWVvdXRgXG4pOiBQcm9taXNlPGFueT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHN1YiA9IGV2ZW50LnN1YnNjcmliZSgoYXJnczogVCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaGFuZGxlcihhcmdzKTtcbiAgICAgICAgcmVzb2x2ZSgnT0snKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcHJvbWlzZS1yZWplY3QtZXJyb3JzXG4gICAgICByZWplY3QocmVhc29uKTtcbiAgICB9LCBtcyk7XG4gICAgdHJpZ2dlcigpO1xuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRlc3RFdmVudEFzeW5jPFQ+KGV2ZW50OiBPYnNlcnZhYmxlPFQ+LFxuICBoYW5kbGVyOiAoYXJnczogVCkgPT4gUHJvbWlzZTx2b2lkPiwgdHJpZ2dlcjogKCkgPT4gdm9pZCwgbXM6IG51bWJlciA9IDAsIHJlYXNvbjogc3RyaW5nID0gYHRpbWVvdXRgXG4pOiBQcm9taXNlPGFueT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHN1YiA9IGV2ZW50LnN1YnNjcmliZSgoYXJnczogVCkgPT4ge1xuICAgICAgaGFuZGxlcihhcmdzKS50aGVuKCgpID0+IHtcbiAgICAgICAgcmVzb2x2ZSgnT0snKTtcbiAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXByb21pc2UtcmVqZWN0LWVycm9yc1xuICAgICAgcmVqZWN0KHJlYXNvbik7XG4gICAgfSwgbXMpO1xuICAgIHRyaWdnZXIoKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0KG5hbWU6IHN0cmluZywgdGVzdDogKCkgPT4gUHJvbWlzZTxhbnk+LCBvcHRpb25zPzogVGVzdE9wdGlvbnMpOiB2b2lkIHtcbiAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPT0gdW5kZWZpbmVkKVxuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGVzdHMgPT0gdW5kZWZpbmVkKVxuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGVzdHMgPSBbXTtcbiAgdGVzdHNbY3VycmVudENhdGVnb3J5XS50ZXN0cyEucHVzaChuZXcgVGVzdChjdXJyZW50Q2F0ZWdvcnksIG5hbWUsIHRlc3QsIG9wdGlvbnMpKTtcbn1cblxuLyogVGVzdHMgdHdvIG9iamVjdHMgZm9yIGVxdWFsaXR5LCB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZXkgYXJlIG5vdCBlcXVhbC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3QoYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnkgPSB0cnVlLCBlcnJvcj86IHN0cmluZyk6IHZvaWQge1xuICBpZiAoZXJyb3IpXG4gICAgZXJyb3IgPSBgJHtlcnJvcn0sIGA7XG4gIGVsc2UgZXJyb3IgPSAnJztcbiAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpXG4gICAgdGhyb3cgbmV3IEVycm9yKGAke2Vycm9yfUV4cGVjdGVkIFwiJHtleHBlY3RlZH1cIiwgZ290IFwiJHthY3R1YWx9XCJgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdEZsb2F0KGFjdHVhbDogbnVtYmVyLCBleHBlY3RlZDogbnVtYmVyLCB0b2xlcmFuY2UgPSAwLjAwMSwgZXJyb3I/OiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKChhY3R1YWwgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSAmJiBleHBlY3RlZCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSB8fFxuICAgIChhY3R1YWwgPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSAmJiBleHBlY3RlZCA9PT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKSB8fFxuICAgIChhY3R1YWwgPT09IE51bWJlci5OYU4gJiYgZXhwZWN0ZWQgPT09IE51bWJlci5OYU4pIHx8IChpc05hTihhY3R1YWwpICYmIGlzTmFOKGV4cGVjdGVkKSkpXG4gICAgcmV0dXJuO1xuICBjb25zdCBhcmVFcXVhbCA9IE1hdGguYWJzKGFjdHVhbCAtIGV4cGVjdGVkKSA8IHRvbGVyYW5jZTtcbiAgZXhwZWN0KGFyZUVxdWFsLCB0cnVlLCBgJHtlcnJvciA/PyAnJ30gKHRvbGVyYW5jZSA9ICR7dG9sZXJhbmNlfTsgYSA9ICR7YWN0dWFsfSwgZSA9ICR7ZXhwZWN0ZWR9KWApO1xuICBpZiAoIWFyZUVxdWFsKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtleHBlY3RlZH0sIGdvdCAke2FjdHVhbH0gKHRvbGVyYW5jZSA9ICR7dG9sZXJhbmNlfSlgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdFRhYmxlKGFjdHVhbDogX0RHLkRhdGFGcmFtZSwgZXhwZWN0ZWQ6IF9ERy5EYXRhRnJhbWUsIGVycm9yPzogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IGV4cGVjdGVkUm93Q291bnQgPSBleHBlY3RlZC5yb3dDb3VudDtcbiAgY29uc3QgYWN0dWFsUm93Q291bnQgPSBhY3R1YWwucm93Q291bnQ7XG4gIGV4cGVjdChhY3R1YWxSb3dDb3VudCwgZXhwZWN0ZWRSb3dDb3VudCwgYCR7ZXJyb3IgPz8gJyd9LCByb3cgY291bnRgKTtcblxuICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBleHBlY3RlZC5jb2x1bW5zKSB7XG4gICAgY29uc3QgYWN0dWFsQ29sdW1uID0gYWN0dWFsLmNvbHVtbnMuYnlOYW1lKGNvbHVtbi5uYW1lKTtcbiAgICBpZiAoYWN0dWFsQ29sdW1uID09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbHVtbiAke2NvbHVtbi5uYW1lfSBub3QgZm91bmRgKTtcbiAgICBpZiAoYWN0dWFsQ29sdW1uLnR5cGUgIT0gY29sdW1uLnR5cGUpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbHVtbiAke2NvbHVtbi5uYW1lfSB0eXBlIGV4cGVjdGVkICR7Y29sdW1uLnR5cGV9IGdvdCAke2FjdHVhbENvbHVtbi50eXBlfWApO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXhwZWN0ZWRSb3dDb3VudDsgaSsrKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGNvbHVtbi5nZXQoaSk7XG4gICAgICBjb25zdCBhY3R1YWxWYWx1ZSA9IGFjdHVhbENvbHVtbi5nZXQoaSk7XG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT0gREcuVFlQRS5GTE9BVClcbiAgICAgICAgZXhwZWN0RmxvYXQoYWN0dWFsVmFsdWUsIHZhbHVlLCAwLjAwMDEsIGVycm9yKTtcbiAgICAgIGVsc2UgaWYgKGNvbHVtbi50eXBlID09IERHLlRZUEUuREFURV9USU1FKVxuICAgICAgICBleHBlY3QoYWN0dWFsVmFsdWUuaXNTYW1lKHZhbHVlKSwgdHJ1ZSwgZXJyb3IpO1xuICAgICAgZWxzZVxuICAgICAgICBleHBlY3QoYWN0dWFsVmFsdWUsIHZhbHVlLCBlcnJvcik7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RPYmplY3QoYWN0dWFsOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBleHBlY3RlZDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkge1xuICBmb3IgKGNvbnN0IFtleHBlY3RlZEtleSwgZXhwZWN0ZWRWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZXhwZWN0ZWQpKSB7XG4gICAgaWYgKCFhY3R1YWwuaGFzT3duUHJvcGVydHkoZXhwZWN0ZWRLZXkpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBwcm9wZXJ0eSBcIiR7ZXhwZWN0ZWRLZXl9XCIgbm90IGZvdW5kYCk7XG5cbiAgICBjb25zdCBhY3R1YWxWYWx1ZSA9IGFjdHVhbFtleHBlY3RlZEtleV07XG4gICAgaWYgKGFjdHVhbFZhbHVlIGluc3RhbmNlb2YgQXJyYXkgJiYgZXhwZWN0ZWRWYWx1ZSBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgZXhwZWN0QXJyYXkoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpO1xuICAgIGVsc2UgaWYgKGFjdHVhbFZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICYmIGV4cGVjdGVkVmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpXG4gICAgICBleHBlY3RPYmplY3QoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpO1xuICAgIGVsc2UgaWYgKE51bWJlci5pc0Zpbml0ZShhY3R1YWxWYWx1ZSkgJiYgTnVtYmVyLmlzRmluaXRlKGV4cGVjdGVkVmFsdWUpKVxuICAgICAgZXhwZWN0RmxvYXQoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpO1xuICAgIGVsc2UgaWYgKGFjdHVhbFZhbHVlICE9IGV4cGVjdGVkVmFsdWUpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICgke2V4cGVjdGVkVmFsdWV9KSBmb3Iga2V5ICcke2V4cGVjdGVkS2V5fScsIGdvdCAoJHthY3R1YWxWYWx1ZX0pYCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdEFycmF5KGFjdHVhbDogQXJyYXlMaWtlPGFueT4sIGV4cGVjdGVkOiBBcnJheUxpa2U8YW55Pikge1xuICBjb25zdCBhY3R1YWxMZW5ndGggPSBhY3R1YWwubGVuZ3RoO1xuICBjb25zdCBleHBlY3RlZExlbmd0aCA9IGV4cGVjdGVkLmxlbmd0aDtcblxuICBpZiAoYWN0dWFsTGVuZ3RoICE9IGV4cGVjdGVkTGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheXMgYXJlIG9mIGRpZmZlcmVudCBsZW5ndGg6IGFjdHVhbCBhcnJheSBsZW5ndGggaXMgJHthY3R1YWxMZW5ndGh9IGAgK1xuICAgICAgYGFuZCBleHBlY3RlZCBhcnJheSBsZW5ndGggaXMgJHtleHBlY3RlZExlbmd0aH1gKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0dWFsTGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYWN0dWFsW2ldIGluc3RhbmNlb2YgQXJyYXkgJiYgZXhwZWN0ZWRbaV0gaW5zdGFuY2VvZiBBcnJheSlcbiAgICAgIGV4cGVjdEFycmF5KGFjdHVhbFtpXSwgZXhwZWN0ZWRbaV0pO1xuICAgIGVsc2UgaWYgKGFjdHVhbFtpXSBpbnN0YW5jZW9mIE9iamVjdCAmJiBleHBlY3RlZFtpXSBpbnN0YW5jZW9mIE9iamVjdClcbiAgICAgIGV4cGVjdE9iamVjdChhY3R1YWxbaV0sIGV4cGVjdGVkW2ldKTtcbiAgICBlbHNlIGlmIChhY3R1YWxbaV0gIT0gZXhwZWN0ZWRbaV0pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7ZXhwZWN0ZWRbaV19IGF0IHBvc2l0aW9uICR7aX0sIGdvdCAke2FjdHVhbFtpXX1gKTtcbiAgfVxufVxuXG4vKiBEZWZpbmVzIGEgdGVzdCBzdWl0ZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXRlZ29yeShjYXRlZ29yeTogc3RyaW5nLCB0ZXN0c186ICgpID0+IHZvaWQsIG9wdGlvbnM/OiBDYXRlZ29yeU9wdGlvbnMpOiB2b2lkIHtcbiAgY3VycmVudENhdGVnb3J5ID0gY2F0ZWdvcnk7XG4gIHRlc3RzXygpO1xuICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSkge1xuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0uY2xlYXIgPSBvcHRpb25zPy5jbGVhciA/PyB0cnVlO1xuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGltZW91dCA9IG9wdGlvbnM/LnRpbWVvdXQ7XG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS5iZW5jaG1hcmtzID0gb3B0aW9ucz8uYmVuY2htYXJrcztcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLnN0cmVzc1Rlc3RzID0gb3B0aW9ucz8uc3RyZXNzVGVzdHM7XG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS5vd25lciA9IG9wdGlvbnM/Lm93bmVyO1xuICB9XG59XG5cbi8qIERlZmluZXMgYSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIHRlc3RzIGluIHRoaXMgY2F0ZWdvcnkgYXJlIGV4ZWN1dGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJlZm9yZShiZWZvcmU6ICgpID0+IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcbiAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPT0gdW5kZWZpbmVkKVxuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgdGVzdHNbY3VycmVudENhdGVnb3J5XS5iZWZvcmUgPSBiZWZvcmU7XG59XG5cbi8qIERlZmluZXMgYSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBhZnRlciB0aGUgdGVzdHMgaW4gdGhpcyBjYXRlZ29yeSBhcmUgZXhlY3V0ZWQuICovXG5leHBvcnQgZnVuY3Rpb24gYWZ0ZXIoYWZ0ZXI6ICgpID0+IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcbiAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPT0gdW5kZWZpbmVkKVxuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgdGVzdHNbY3VycmVudENhdGVnb3J5XS5hZnRlciA9IGFmdGVyO1xufVxuXG5mdW5jdGlvbiBhZGROYW1lc3BhY2Uoczogc3RyaW5nLCBmOiBfREcuRnVuYyk6IHN0cmluZyB7XG4gIHJldHVybiBzLnJlcGxhY2UobmV3IFJlZ0V4cChmLm5hbWUsICdnaScpLCBmLm5xTmFtZSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbml0QXV0b1Rlc3RzKHBhY2thZ2VfOiBfREcuUGFja2FnZSwgbW9kdWxlPzogYW55KSB7XG4gIGNvbnN0IHBhY2thZ2VJZCA9IHBhY2thZ2VfLmlkO1xuICBpZiAod2FzUmVnaXN0ZXJlZFtwYWNrYWdlSWRdKSByZXR1cm47XG4gIGNvbnN0IG1vZHVsZVRlc3RzID0gbW9kdWxlID8gbW9kdWxlLnRlc3RzIDogdGVzdHM7XG4gIGlmIChwYWNrYWdlXy5uYW1lID09PSAnRGV2VG9vbHMnIHx8ICghIW1vZHVsZSAmJiBtb2R1bGUuX3BhY2thZ2UubmFtZSA9PT0gJ0RldlRvb2xzJykpIHtcbiAgICBmb3IgKGNvbnN0IGYgb2YgKDxhbnk+d2luZG93KS5kYXJ0VGVzdHMpIHtcbiAgICAgIGNvbnN0IGFyciA9IGYubmFtZS5zcGxpdCgvXFxzKlxcfFxccyohL2cpO1xuICAgICAgbGV0IG5hbWUgPSBhcnIucG9wKCkgPz8gZi5uYW1lO1xuICAgICAgbGV0IGNhdCA9IGFyci5sZW5ndGggPyBjb3JlQ2F0TmFtZSArICc6ICcgKyBhcnIuam9pbignOiAnKSA6IGNvcmVDYXROYW1lO1xuICAgICAgbGV0IGZ1bGxOYW1lOiBzdHJpbmdbXSA9IG5hbWUuc3BsaXQoJyB8ICcpO1xuICAgICAgbmFtZSA9IGZ1bGxOYW1lW2Z1bGxOYW1lLmxlbmd0aCAtIDFdO1xuICAgICAgZnVsbE5hbWUudW5zaGlmdChjYXQpO1xuICAgICAgZnVsbE5hbWUucG9wKCk7XG4gICAgICBjYXQgPSBmdWxsTmFtZS5qb2luKCc6ICcpO1xuICAgICAgaWYgKG1vZHVsZVRlc3RzW2NhdF0gPT09IHVuZGVmaW5lZClcbiAgICAgICAgbW9kdWxlVGVzdHNbY2F0XSA9IHsgdGVzdHM6IFtdLCBjbGVhcjogdHJ1ZSB9O1xuICAgICAgbW9kdWxlVGVzdHNbY2F0XS50ZXN0cy5wdXNoKG5ldyBUZXN0KGNhdCwgbmFtZSwgZi50ZXN0LCB7IGlzQWdncmVnYXRlZDogZmFsc2UsIHRpbWVvdXQ6IGYub3B0aW9ucz8udGltZW91dCA/PyBTVEFOREFSVF9USU1FT1VULCBza2lwUmVhc29uOiBmLm9wdGlvbnM/LnNraXBSZWFzb24sIG93bmVyOiBmLm9wdGlvbnM/Lm93bmVyLCBiZW5jaG1hcms6IGYub3B0aW9ucz8uYmVuY2htYXJrID8/IGZhbHNlIH0pKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgbW9kdWxlQXV0b1Rlc3RzID0gW107XG4gIGNvbnN0IG1vZHVsZURlbW8gPSBbXTtcbiAgY29uc3QgbW9kdWxlRGV0ZWN0b3JzID0gW107XG4gIGNvbnN0IHBhY2tGdW5jdGlvbnMgPSBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmZpbHRlcihgcGFja2FnZS5pZCA9IFwiJHtwYWNrYWdlSWR9XCJgKS5saXN0KCk7XG4gIGNvbnN0IHJlZyA9IG5ldyBSZWdFeHAoL3NraXA6XFxzKihbXixcXHNdKyl8d2FpdDpcXHMqKFxcZCspfGNhdDpcXHMqKFteLFxcc10rKXx0aW1lb3V0OlxccyooXFxkKykvZyk7XG4gIGZvciAoY29uc3QgZiBvZiBwYWNrRnVuY3Rpb25zKSB7XG4gICAgY29uc3QgdGVzdHMgPSBmLm9wdGlvbnNbJ3Rlc3QnXTtcbiAgICBjb25zdCBkZW1vID0gZi5vcHRpb25zWydkZW1vUGF0aCddO1xuICAgIGlmICgodGVzdHMgJiYgQXJyYXkuaXNBcnJheSh0ZXN0cykgJiYgdGVzdHMubGVuZ3RoKSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCByZXMgPSAodGVzdHNbaV0gYXMgc3RyaW5nKS5tYXRjaEFsbChyZWcpO1xuICAgICAgICBjb25zdCBtYXA6IHsgc2tpcD86IHN0cmluZywgd2FpdD86IG51bWJlciwgY2F0Pzogc3RyaW5nLCB0aW1lb3V0PzogbnVtYmVyLCBiZW5jaG1hcmtUaW1lb3V0PzogbnVtYmVyIH0gPSB7fTtcbiAgICAgICAgQXJyYXkuZnJvbShyZXMpLmZvckVhY2goKGFycikgPT4ge1xuICAgICAgICAgIGlmIChhcnJbMF0uc3RhcnRzV2l0aCgnc2tpcCcpKSBtYXBbJ3NraXAnXSA9IGFyclsxXTtcbiAgICAgICAgICBlbHNlIGlmIChhcnJbMF0uc3RhcnRzV2l0aCgnd2FpdCcpKSBtYXBbJ3dhaXQnXSA9IHBhcnNlSW50KGFyclsyXSk7XG4gICAgICAgICAgZWxzZSBpZiAoYXJyWzBdLnN0YXJ0c1dpdGgoJ2NhdCcpKSBtYXBbJ2NhdCddID0gYXJyWzNdO1xuICAgICAgICAgIGVsc2UgaWYgKGFyclswXS5zdGFydHNXaXRoKCd0aW1lb3V0JykpIG1hcFsndGltZW91dCddID0gcGFyc2VJbnQoYXJyWzRdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHRlc3QgPSBuZXcgVGVzdChtYXAuY2F0ID8/IGF1dG9UZXN0c0NhdE5hbWUsIHRlc3RzLmxlbmd0aCA9PT0gMSA/IGYubmFtZSA6IGAke2YubmFtZX0gJHtpICsgMX1gLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZ3Jvay5mdW5jdGlvbnMuZXZhbChhZGROYW1lc3BhY2UodGVzdHNbaV0sIGYpKTtcbiAgICAgICAgICBpZiAobWFwLndhaXQpIGF3YWl0IGRlbGF5KG1hcC53YWl0KTtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdGhyb3ctbGl0ZXJhbFxuICAgICAgICAgIGlmICh0eXBlb2YgcmVzID09PSAnYm9vbGVhbicgJiYgIXJlcykgdGhyb3cgYEZhaWxlZDogJHt0ZXN0c1tpXX0sIGV4cGVjdGVkIHRydWUsIGdvdCAke3Jlc31gO1xuICAgICAgICB9LCB7IHNraXBSZWFzb246IG1hcC5za2lwLCB0aW1lb3V0OiBERy5UZXN0LmlzSW5CZW5jaG1hcmsgPyBtYXAuYmVuY2htYXJrVGltZW91dCA/PyBCRU5DSE1BUktfVElNRU9VVCA6IG1hcC50aW1lb3V0ID8/IFNUQU5EQVJUX1RJTUVPVVQgfSk7XG4gICAgICAgIGlmIChtYXAuY2F0KSB7XG4gICAgICAgICAgY29uc3QgY2F0OiBzdHJpbmcgPSBtYXAuY2F0O1xuICAgICAgICAgIGlmIChtb2R1bGVUZXN0c1tjYXRdID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBtb2R1bGVUZXN0c1tjYXRdID0geyB0ZXN0czogW10sIGNsZWFyOiB0cnVlIH07XG5cbiAgICAgICAgICAvLyBvbmx5IGJlZm9yZS9hZnRlciBjYW4gYmUgZGVmaW5lZCBpbiB0cyBmaWxlcyB0ZXN0cyB1bmRlciB0aGUgY2F0ZWdvcnlcbiAgICAgICAgICBpZiAoIW1vZHVsZVRlc3RzW2NhdF0udGVzdHMpXG4gICAgICAgICAgICBtb2R1bGVUZXN0c1tjYXRdLnRlc3RzID0gW107XG4gICAgICAgICAgbW9kdWxlVGVzdHNbY2F0XS50ZXN0cy5wdXNoKHRlc3QpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBtb2R1bGVBdXRvVGVzdHMucHVzaCh0ZXN0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRlbW8pIHtcbiAgICAgIGNvbnN0IHdhaXQgPSBmLm9wdGlvbnNbJ2RlbW9XYWl0J10gPyBwYXJzZUludChmLm9wdGlvbnNbJ2RlbW9XYWl0J10pIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgdGVzdCA9IG5ldyBUZXN0KGRlbW9DYXROYW1lLCBmLmZyaWVuZGx5TmFtZSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBkZWxheSgzMDApO1xuICAgICAgICBncm9rLnNoZWxsLmNsZWFyTGFzdEVycm9yKCk7XG4gICAgICAgIGF3YWl0IGYuYXBwbHkoKTtcbiAgICAgICAgYXdhaXQgZGVsYXkod2FpdCA/IHdhaXQgOiAyMDAwKTtcbiAgICAgICAgY29uc3QgdW5oYW5kbGVkID0gYXdhaXQgZ3Jvay5zaGVsbC5sYXN0RXJyb3I7XG4gICAgICAgIGlmICh1bmhhbmRsZWQpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHVuaGFuZGxlZCk7XG4gICAgICB9LCB7IHNraXBSZWFzb246IGYub3B0aW9uc1snZGVtb1NraXAnXSB9KTtcbiAgICAgIG1vZHVsZURlbW8ucHVzaCh0ZXN0KTtcbiAgICB9XG4gICAgaWYgKGYuaGFzVGFnKCdzZW1UeXBlRGV0ZWN0b3InKSkge1xuICAgICAgbGV0IGRldGVjdG9yc1Rlc3REYXRhID0gdGVzdERhdGE7XG4gICAgICBpZiAoZi5vcHRpb25zWyd0ZXN0RGF0YSddKSB7XG4gICAgICAgIGRldGVjdG9yc1Rlc3REYXRhID0gYXdhaXQgZ3Jvay5kYXRhLmZpbGVzLm9wZW5UYWJsZShgU3lzdGVtOkFwcERhdGEvJHtwYWNrYWdlXy5ucU5hbWV9LyR7Zi5vcHRpb25zWyd0ZXN0RGF0YSddfWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0ZXN0ID0gbmV3IFRlc3QoZGV0ZWN0b3JzQ2F0TmFtZSwgZi5mcmllbmRseU5hbWUsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgYXJyID0gW107XG4gICAgICAgIGNvbnNvbGUubG9nKGBTeXN0ZW06QXBwRGF0YS8ke3BhY2thZ2VfLm5xTmFtZX0vJHtmLm9wdGlvbnNbJ3Rlc3REYXRhJ119YCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBjb2wgb2YgZGV0ZWN0b3JzVGVzdERhdGEuY2xvbmUoKS5jb2x1bW5zKSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZi5hcHBseShbY29sXSk7XG4gICAgICAgICAgYXJyLnB1c2gocmVzIHx8IGNvbC5zZW1UeXBlKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXNBcnIgPSBhcnIuZmlsdGVyKChpKSA9PiBpKTtcbiAgICAgICAgZXhwZWN0KHJlc0Fyci5sZW5ndGgsIDEpO1xuXG4gICAgICAgIGlmIChmLm9wdGlvbnNbJ3Rlc3REYXRhQ29sdW1uTmFtZSddKVxuICAgICAgICAgIGV4cGVjdChyZXNBcnJbMF0sIGYub3B0aW9uc1sndGVzdERhdGFDb2x1bW5OYW1lJ10pO1xuXG4gICAgICB9LCB7IHNraXBSZWFzb246IGYub3B0aW9uc1snc2tpcFRlc3QnXSB9KTtcbiAgICAgIG1vZHVsZURldGVjdG9ycy5wdXNoKHRlc3QpO1xuICAgIH1cbiAgfVxuICB3YXNSZWdpc3RlcmVkW3BhY2thZ2VJZF0gPSB0cnVlO1xuICBpZiAobW9kdWxlQXV0b1Rlc3RzLmxlbmd0aCA+IDApXG4gICAgbW9kdWxlVGVzdHNbYXV0b1Rlc3RzQ2F0TmFtZV0gPSB7IHRlc3RzOiBtb2R1bGVBdXRvVGVzdHMsIGNsZWFyOiB0cnVlIH07XG4gIGlmIChtb2R1bGVEZW1vLmxlbmd0aCA+IDApXG4gICAgbW9kdWxlVGVzdHNbZGVtb0NhdE5hbWVdID0geyB0ZXN0czogbW9kdWxlRGVtbywgY2xlYXI6IHRydWUgfTtcbiAgaWYgKG1vZHVsZURldGVjdG9ycy5sZW5ndGggPiAwKVxuICAgIG1vZHVsZVRlc3RzW2RldGVjdG9yc0NhdE5hbWVdID0geyB0ZXN0czogbW9kdWxlRGV0ZWN0b3JzLCBjbGVhcjogZmFsc2UgfTtcbn1cblxuZnVuY3Rpb24gcmVkZWZpbmVDb25zb2xlKCk6IGFueVtdIHtcbiAgY29uc3QgbG9nczogYW55W10gPSBbXTtcbiAgY29uc29sZS5sb2cgPSAoLi4uYXJncykgPT4ge1xuICAgIGxvZ3MucHVzaCguLi5hcmdzKTtcbiAgICBzdGRMb2coLi4uYXJncyk7XG4gIH07XG4gIGNvbnNvbGUuaW5mbyA9ICguLi5hcmdzKSA9PiB7XG4gICAgbG9ncy5wdXNoKC4uLmFyZ3MpO1xuICAgIHN0ZEluZm8oLi4uYXJncyk7XG4gIH07XG4gIGNvbnNvbGUud2FybiA9ICguLi5hcmdzKSA9PiB7XG4gICAgbG9ncy5wdXNoKC4uLmFyZ3MpO1xuICAgIHN0ZFdhcm4oLi4uYXJncyk7XG4gIH07XG4gIGNvbnNvbGUuZXJyb3IgPSAoLi4uYXJncykgPT4ge1xuICAgIGxvZ3MucHVzaCguLi5hcmdzKTtcbiAgICBzdGRFcnJvciguLi5hcmdzKTtcbiAgfTtcbiAgcmV0dXJuIGxvZ3M7XG59XG5cbmZ1bmN0aW9uIHJlc2V0Q29uc29sZSgpOiB2b2lkIHtcbiAgY29uc29sZS5sb2cgPSBzdGRMb2c7XG4gIGNvbnNvbGUuaW5mbyA9IHN0ZEluZm87XG4gIGNvbnNvbGUud2FybiA9IHN0ZFdhcm47XG4gIGNvbnNvbGUuZXJyb3IgPSBzdGRFcnJvcjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blRlc3RzKG9wdGlvbnM/OiBUZXN0RXhlY3V0aW9uT3B0aW9ucykgOiBQcm9taXNlPFRlc3RSZXN1bHRFeHRlbmRlZFtdPntcblxuICBjb25zdCBwYWNrYWdlXzogX0RHLlBhY2thZ2UgPSBvcHRpb25zPy5ub2RlT3B0aW9ucyA/IG9wdGlvbnMubm9kZU9wdGlvbnMucGFja2FnZSA6IGdyb2suZnVuY3Rpb25zLmdldEN1cnJlbnRDYWxsKCkuZnVuYy5wYWNrYWdlO1xuICBpZiAoIXBhY2thZ2VfKVxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBydW4gdGVzdHMgb3V0c2lkZSBvZiB0aGUgcGFja2FnZScpO1xuICBjb25zdCBtYXRjaCA9IHBhY2thZ2VfLnBhY2thZ2VPd25lcj8ubWF0Y2goLzwoW14+XSopPi8pO1xuICBjb25zdCBwYWNrYWdlT3duZXIgPSBtYXRjaCA/IG1hdGNoWzFdIDogJyc7XG4gIGlmIChwYWNrYWdlXyAhPSB1bmRlZmluZWQpXG4gICAgYXdhaXQgaW5pdEF1dG9UZXN0cyhwYWNrYWdlXyk7XG4gIGNvbnN0IHJlc3VsdHM6VGVzdFJlc3VsdEV4dGVuZGVkW10gPSBbXTtcbiAgY29uc29sZS5sb2coYFJ1bm5pbmcgdGVzdHMuLi5gKTtcbiAgY29uc29sZS5sb2cob3B0aW9ucyk7XG4gIG9wdGlvbnMgPz89IHt9O1xuICBvcHRpb25zIS50ZXN0Q29udGV4dCA/Pz0gbmV3IFRlc3RDb250ZXh0KCk7XG4gIGdyb2suc2hlbGwuY2xlYXJMYXN0RXJyb3IoKTtcbiAgY29uc3QgbG9ncyA9IHJlZGVmaW5lQ29uc29sZSgpO1xuXG4gIGF3YWl0IGludm9rZVRlc3RzKHRlc3RzLCBvcHRpb25zKTtcblxuICBmb3IgKGxldCByIG9mIHJlc3VsdHMpIHtcbiAgICByLnJlc3VsdCA9IHIucmVzdWx0LnRvU3RyaW5nKCkucmVwbGFjZSgvXCIvZywgJ1xcJycpO1xuICAgIGlmIChyLmxvZ3MgIT0gdW5kZWZpbmVkKVxuICAgICAgci5sb2dzID0gci5sb2dzIS50b1N0cmluZygpLnJlcGxhY2UoL1wiL2csICdcXCcnKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0cztcblxuICBhc3luYyBmdW5jdGlvbiBpbnZva2VDYXRlZ29yeU1ldGhvZChtZXRob2Q6ICgoKSA9PiBQcm9taXNlPHZvaWQ+KSB8IHVuZGVmaW5lZCwgY2F0ZWdvcnk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgbGV0IGludm9rYXRpb25SZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChtZXRob2QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhd2FpdCB0aW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCBtZXRob2QoKTtcbiAgICAgICAgfSwgMTAwMDAwLCBgYmVmb3JlICR7Y2F0ZWdvcnl9OiB0aW1lb3V0IGVycm9yYCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoeDogYW55KSB7XG4gICAgICBpbnZva2F0aW9uUmVzdWx0ID0gYXdhaXQgZ2V0UmVzdWx0KHgpO1xuICAgIH1cbiAgICByZXR1cm4gaW52b2thdGlvblJlc3VsdFxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gaW52b2tlVGVzdHNJbkNhdGVnb3J5KGNhdGVnb3J5OiBDYXRlZ29yeSwgb3B0aW9uczogVGVzdEV4ZWN1dGlvbk9wdGlvbnMsIGlzVGFyZ2V0Q2F0ZWdvcnk6IGJvb2xlYW4pOiBQcm9taXNlPFRlc3RSZXN1bHRFeHRlbmRlZFtdPiB7XG4gICAgbGV0IHQgPSBjYXRlZ29yeS50ZXN0cyA/PyBbXTtcbiAgICBjb25zdCByZXMgOiBUZXN0UmVzdWx0RXh0ZW5kZWRbXSA9IFtdO1xuICAgIC8vIGxldCBtZW1vcnlVc2FnZUJlZm9yZSA9ICh3aW5kb3c/LnBlcmZvcm1hbmNlIGFzIGFueSk/Lm1lbW9yeT8udXNlZEpTSGVhcFNpemU7XG4gICAgY29uc3Qgd2lkZ2V0c0JlZm9yZSA9IGdldFdpZGdldHNDb3VudFNhZmUoKTtcblxuICAgIGlmIChjYXRlZ29yeS5jbGVhcikge1xuICAgICAgICBsZXQgc2tpcHBpbmdUZXN0cyA9IGlzVGFyZ2V0Q2F0ZWdvcnkgJiYgb3B0aW9ucy5za2lwVG9UZXN0ICE9IHVuZGVmaW5lZDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdC5sZW5ndGg7IGkrKykge1xuXG4gICAgICAgIGlmICh0W2ldLm9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAodFtpXS5vcHRpb25zPy5iZW5jaG1hcmsgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKCF0W2ldLm9wdGlvbnMpXG4gICAgICAgICAgICAgIHRbaV0ub3B0aW9ucyA9IHt9XG4gICAgICAgICAgICB0W2ldLm9wdGlvbnMhLmJlbmNobWFyayA9IGNhdGVnb3J5LmJlbmNobWFya3MgPz8gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCB0ZXN0ID0gdFtpXTtcbiAgICAgICAgaWYgKG9wdGlvbnMudGVzdClcbiAgICAgICAgICBpZiAob3B0aW9ucy50ZXN0LnRvTG93ZXJDYXNlKCkgIT09IHRlc3QubmFtZS50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGlmIChza2lwcGluZ1Rlc3RzKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnM/LnNraXBUb1Rlc3QgIT0gdW5kZWZpbmVkICYmIHRlc3QubmFtZS50b0xvd2VyQ2FzZSgpLnRyaW0oKSA9PT0gb3B0aW9ucz8uc2tpcFRvVGVzdC50b0xvd2VyQ2FzZSgpLnRyaW0oKSkge1xuICAgICAgICAgICAgLy8gRm91bmQgdGhlIHRhcmdldCB0ZXN0LCBzdG9wIHNraXBwaW5nIGFmdGVyIHRoaXMgb25lXG4gICAgICAgICAgICBza2lwcGluZ1Rlc3RzID0gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRlc3Q/Lm9wdGlvbnMpIHtcbiAgICAgICAgICB0ZXN0Lm9wdGlvbnMub3duZXIgPSB0W2ldLm9wdGlvbnM/Lm93bmVyID8/IGNhdGVnb3J5Py5vd25lciA/PyBwYWNrYWdlT3duZXIgPz8gJyc7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbGV0IGlzR0JFbmFibGUgPSAod2luZG93IGFzIGFueSkuZ2MgJiYgdGVzdC5vcHRpb25zPy5za2lwUmVhc29uID09IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYCoqKioqKioqJHtpc0dCRW5hYmxlfWApO1xuICAgICAgICAvLyBpZiAoaXNHQkVuYWJsZSlcbiAgICAgICAgLy8gICBhd2FpdCAod2luZG93IGFzIGFueSkuZ2MoKTtcbiAgICAgICAgLy8gbWVtb3J5VXNhZ2VCZWZvcmUgPSAod2luZG93Py5wZXJmb3JtYW5jZSBhcyBhbnkpPy5tZW1vcnk/LnVzZWRKU0hlYXBTaXplO1xuICAgICAgICBsZXQgdGVzdFJ1biA9IGF3YWl0IGV4ZWNUZXN0KFxuICAgICAgICAgICAgdGVzdCxcbiAgICAgICAgICAgIG9wdGlvbnM/LnRlc3QsXG4gICAgICAgICAgICBsb2dzLCBERy5UZXN0LmlzSW5CZW5jaG1hcmsgPyB0W2ldLm9wdGlvbnM/LmJlbmNobWFya1RpbWVvdXQgPz8gQkVOQ0hNQVJLX1RJTUVPVVQgOiB0W2ldLm9wdGlvbnM/LnRpbWVvdXQgPz8gU1RBTkRBUlRfVElNRU9VVCxcbiAgICAgICAgICAgIHBhY2thZ2VfLm5hbWUsXG4gICAgICAgICAgICBvcHRpb25zLnZlcmJvc2VcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBpZiAoaXNHQkVuYWJsZSlcbiAgICAgICAgLy8gICBhd2FpdCAod2luZG93IGFzIGFueSkuZ2MoKTtcbiAgICAgICAgaWYgKHRlc3RSdW4pIHtcbiAgICAgICAgICByZXMucHVzaCh7IC4uLnRlc3RSdW4sICB3aWRnZXRzRGlmZmVyZW5jZTogZ2V0V2lkZ2V0c0NvdW50U2FmZSgpIC0gd2lkZ2V0c0JlZm9yZSB9KTtcbiAgICAgICAgICAvLyBSZXR1cm4gZWFybHkgaWYgcmV0dXJuT25GYWlsIGlzIHNldCBhbmQgdGVzdCBmYWlsZWQgKGJ1dCBpZ25vcmUgZmFpbHVyZSBmb3IgdGhlIHNraXBUb1Rlc3QgdGVzdCBpdHNlbGYpXG4gICAgICAgICAgaWYgKG9wdGlvbnMucmV0dXJuT25GYWlsICYmIG9wdGlvbnMuc2tpcFRvVGVzdCAhPT0gdGVzdC5uYW1lICYmICF0ZXN0UnVuLnN1Y2Nlc3MgJiYgIXRlc3RSdW4uc2tpcHBlZClcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVzLnB1c2goeyAuLi50ZXN0UnVuLCBtZW1vcnlEZWx0YTogKHdpbmRvdz8ucGVyZm9ybWFuY2UgYXMgYW55KT8ubWVtb3J5Py51c2VkSlNIZWFwU2l6ZSAtIG1lbW9yeVVzYWdlQmVmb3JlLCB3aWRnZXRzRGVsdGE6IGdldFdpZGdldHNDb3VudFNhZmUoKSAtIHdpZGdldHNCZWZvcmUgfSk7XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLm5vZGVPcHRpb25zICYmIG9wdGlvbnMudGVzdENvbnRleHQ/LmNsb3NlQWxsICE9PSBmYWxzZSkge1xuICAgICAgICAgIGdyb2suc2hlbGwuY2xvc2VBbGwoKTtcbiAgICAgICAgICBERy5CYWxsb29uLmNsb3NlQWxsKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHNraXBwaW5nVGVzdHMgPSBpc1RhcmdldENhdGVnb3J5ICYmIG9wdGlvbnMuc2tpcFRvVGVzdCAhPSB1bmRlZmluZWQ7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IHRlc3QgPSB0W2ldO1xuICAgICAgICBpZiAob3B0aW9ucy50ZXN0KVxuICAgICAgICAgIGlmIChvcHRpb25zLnRlc3QudG9Mb3dlckNhc2UoKSAhPT0gdGVzdC5uYW1lLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgaWYgKHNraXBwaW5nVGVzdHMpIHtcbiAgICAgICAgICBpZiAob3B0aW9ucz8uc2tpcFRvVGVzdCAhPSB1bmRlZmluZWQgJiYgdGVzdC5uYW1lLnRvTG93ZXJDYXNlKCkudHJpbSgpID09PSBvcHRpb25zPy5za2lwVG9UZXN0LnRvTG93ZXJDYXNlKCkudHJpbSgpKSB7XG4gICAgICAgICAgICAvLyBGb3VuZCB0aGUgdGFyZ2V0IHRlc3QsIHN0b3Agc2tpcHBpbmcgYWZ0ZXIgdGhpcyBvbmVcbiAgICAgICAgICAgIHNraXBwaW5nVGVzdHMgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWU7ICAvLyBTa2lwIHRoaXMgdGVzdCAoaW5jbHVkaW5nIHRoZSB0YXJnZXQpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGVzdD8ub3B0aW9ucykge1xuICAgICAgICAgIHRlc3Qub3B0aW9ucy5vd25lciA9IHRbaV0ub3B0aW9ucz8ub3duZXIgPz8gY2F0ZWdvcnk/Lm93bmVyID8/IHBhY2thZ2VPd25lciA/PyAnJztcbiAgICAgICAgfVxuICAgICAgICAvLyBsZXQgaXNHQkVuYWJsZSA9ICh3aW5kb3cgYXMgYW55KS5nYyAmJiB0ZXN0Lm9wdGlvbnM/LnNraXBSZWFzb24gPT0gdW5kZWZpbmVkO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgKioqKioqKioke2lzR0JFbmFibGV9YCk7XG4gICAgICAgIC8vIGlmIChpc0dCRW5hYmxlKVxuICAgICAgICAvLyAgIGF3YWl0ICh3aW5kb3cgYXMgYW55KS5nYygpO1xuICAgICAgICAvLyBtZW1vcnlVc2FnZUJlZm9yZSA9ICh3aW5kb3c/LnBlcmZvcm1hbmNlIGFzIGFueSk/Lm1lbW9yeT8udXNlZEpTSGVhcFNpemU7XG4gICAgICAgIGxldCB0ZXN0UnVuID0gYXdhaXQgZXhlY1Rlc3QoXG4gICAgICAgICAgICB0ZXN0LFxuICAgICAgICAgICAgb3B0aW9ucz8udGVzdCxcbiAgICAgICAgICAgIGxvZ3MsXG4gICAgICAgICAgICBERy5UZXN0LmlzSW5CZW5jaG1hcmsgPyB0W2ldLm9wdGlvbnM/LmJlbmNobWFya1RpbWVvdXQgPz8gQkVOQ0hNQVJLX1RJTUVPVVQgOiB0W2ldLm9wdGlvbnM/LnRpbWVvdXQsXG4gICAgICAgICAgICBwYWNrYWdlXy5uYW1lLFxuICAgICAgICAgICAgb3B0aW9ucy52ZXJib3NlXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gaWYgKGlzR0JFbmFibGUpXG4gICAgICAgIC8vICAgYXdhaXQgKHdpbmRvdyBhcyBhbnkpLmdjKCk7XG5cbiAgICAgICAgaWYgKHRlc3RSdW4pIHtcbiAgICAgICAgICByZXMucHVzaCh7IC4uLnRlc3RSdW4sIHdpZGdldHNEaWZmZXJlbmNlOiBnZXRXaWRnZXRzQ291bnRTYWZlKCkgLSB3aWRnZXRzQmVmb3JlIH0pO1xuICAgICAgICAgIC8vIFJldHVybiBlYXJseSBpZiByZXR1cm5PbkZhaWwgaXMgc2V0IGFuZCB0ZXN0IGZhaWxlZCAoYnV0IGlnbm9yZSBmYWlsdXJlIGZvciB0aGUgc2tpcFRvVGVzdCB0ZXN0IGl0c2VsZilcbiAgICAgICAgICBpZiAob3B0aW9ucy5yZXR1cm5PbkZhaWwgJiYgb3B0aW9ucy5za2lwVG9UZXN0ICE9PSB0ZXN0Lm5hbWUgJiYgIXRlc3RSdW4uc3VjY2VzcyAmJiAhdGVzdFJ1bi5za2lwcGVkKVxuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfVxuICAgICAgICAvLyByZXMucHVzaCh7IC4uLnRlc3RSdW4sIG1lbW9yeURlbHRhOiAod2luZG93Py5wZXJmb3JtYW5jZSBhcyBhbnkpPy5tZW1vcnk/LnVzZWRKU0hlYXBTaXplIC0gbWVtb3J5VXNhZ2VCZWZvcmUsIHdpZGdldHNEaWZmZXJlbmNlOiBnZXRXaWRnZXRzQ291bnRTYWZlKCkgLSB3aWRnZXRzQmVmb3JlIH0pO1xuXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRXaWRnZXRzQ291bnRTYWZlKCkge1xuICAgIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcpXG4gICAgICByZXR1cm4gMDtcbiAgICBsZXQgbGVuZ3RoID0gLTE7XG4gICAgdHJ5IHtcbiAgICAgIGxlbmd0aCA9IERHLldpZGdldC5nZXRBbGwoKS5sZW5ndGg7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICBjb25zb2xlLndhcm4oZS5tZXNzYWdlID8/IGUpO1xuICAgIH1cbiAgICByZXR1cm4gbGVuZ3RoO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gaW52b2tlVGVzdHMoY2F0ZWdvcmllc1RvSW52b2tlOiB7IFtrZXk6IHN0cmluZ106IENhdGVnb3J5IH0sIG9wdGlvbnM6IFRlc3RFeGVjdXRpb25PcHRpb25zKSB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBza2lwcGluZ0NhdGVnb3JpZXMgPSBvcHRpb25zPy5za2lwVG9DYXRlZ29yeSAhPSB1bmRlZmluZWQ7XG4gICAgICBsZXQgaXNUYXJnZXRDYXRlZ29yeSA9IGZhbHNlO1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoY2F0ZWdvcmllc1RvSW52b2tlKSkge1xuICAgICAgICAgIGlmIChvcHRpb25zLmV4Y2x1ZGU/LnNvbWUoKGMpID0+IGtleS5zdGFydHNXaXRoKGMpKSlcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgaWYgKG9wdGlvbnM/LmNhdGVnb3J5ICE9IG51bGwgJiYgIWtleS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgob3B0aW9ucz8uY2F0ZWdvcnkudG9Mb3dlckNhc2UoKS50cmltKCkpKVxuICAgICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAgIGlmIChza2lwcGluZ0NhdGVnb3JpZXMpIHtcbiAgICAgICAgICAgICAgaWYgKGlzVGFyZ2V0Q2F0ZWdvcnkpXG4gICAgICAgICAgICAgICAgICBza2lwcGluZ0NhdGVnb3JpZXMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucz8uc2tpcFRvQ2F0ZWdvcnkgIT0gbnVsbCAmJiBrZXkudG9Mb3dlckNhc2UoKS50cmltKCkgPT09IG9wdGlvbnM/LnNraXBUb0NhdGVnb3J5LnRvTG93ZXJDYXNlKCkudHJpbSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaXNUYXJnZXRDYXRlZ29yeSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIEhhdmVuJ3QgZm91bmQgdGhlIHRhcmdldCBjYXRlZ29yeSB5ZXQsIGtlZXAgc2tpcHBpbmdcbiAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgICBjb25zdCBza2lwcGVkID0gdmFsdWUudGVzdHM/LmV2ZXJ5KCh0OiBUZXN0KSA9PiB0Lm9wdGlvbnM/LnNraXBSZWFzb25cbiAgICAgICAgICAgICAgfHwgKG9wdGlvbnM/LnRlc3QgIT0gbnVsbCAmJiBvcHRpb25zLnRlc3QudG9Mb3dlckNhc2UoKSAhPT0gdC5uYW1lLnRvTG93ZXJDYXNlKCkpKTtcblxuICAgICAgICAgIGlmICghc2tpcHBlZCkge1xuICAgICAgICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgICAgICAgY29uc3Qgc2tpcHBlZENvdW50ID0gKHZhbHVlLnRlc3RzID8/IFtdKS5maWx0ZXIoKHQ6IFRlc3QpID0+XG4gICAgICAgICAgICAgICAgdC5vcHRpb25zPy5za2lwUmVhc29uIHx8IChvcHRpb25zPy50ZXN0ICE9IG51bGwgJiYgb3B0aW9ucy50ZXN0LnRvTG93ZXJDYXNlKCkgIT09IHQubmFtZS50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgICApLmxlbmd0aDtcbiAgICAgICAgICAgICAgc3RkTG9nKGBQYWNrYWdlIHRlc3Rpbmc6IFN0YXJ0ZWQge3ske2tleX19fSR7c2tpcHBlZENvdW50ID4gMCA/IGAgc2tpcHBlZCB7eyR7c2tpcHBlZENvdW50fX19YCA6ICcnfWApO1xuICAgICAgICAgICAgICB2YWx1ZS5iZWZvcmVTdGF0dXMgPSBhd2FpdCBpbnZva2VDYXRlZ29yeU1ldGhvZCh2YWx1ZS5iZWZvcmUsIGtleSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCB0ID0gdmFsdWUudGVzdHMgPz8gW107XG5cbiAgICAgICAgICBpZiAob3B0aW9ucy5zdHJlc3NUZXN0KSB7XG4gICAgICAgICAgICAgIHQgPSB0LmZpbHRlcigoZSkgPT4gZS5vcHRpb25zPy5zdHJlc3NUZXN0KTtcbiAgICAgICAgICAgICAgdCA9IHNodWZmbGUodCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKChvcHRpb25zLnRhZ3M/Lmxlbmd0aCA/PyAwKSA+IDApIHtcbiAgICAgICAgICAgICAgdCA9IHQuZmlsdGVyKChlKSA9PlxuICAgICAgICAgICAgICAgICAgZS5vcHRpb25zPy50YWdzPy5zb21lKHRhZyA9PiAob3B0aW9ucz8udGFncyA/PyBbXSkuaW5jbHVkZXModGFnKSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgcmVzOiBUZXN0UmVzdWx0RXh0ZW5kZWRbXTtcbiAgICAgICAgICBpZiAodmFsdWUuYmVmb3JlU3RhdHVzKSB7XG4gICAgICAgICAgICAgIHJlcyA9IEFycmF5LmZyb20odC5tYXAoKHRlc3RFbGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeToga2V5LFxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHRlc3RFbGVtLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiAnYmVmb3JlKCkgZmFpbGVkJyxcbiAgICAgICAgICAgICAgICAgICAgICBtczogMCxcbiAgICAgICAgICAgICAgICAgICAgICBza2lwcGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICBsb2dzOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICBvd25lcjogcGFja2FnZU93bmVyLFxuICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2U6IHBhY2thZ2VfLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgd2lkZ2V0c0RpZmZlcmVuY2U6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgZmxha2luZzogREcuVGVzdC5pc1JlcHJvZHVjaW5nXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgIHJlcy5mb3JFYWNoKGFzeW5jICh0ZXN0KSA9PiBhd2FpdCBncm9rLnNoZWxsLnJlcG9ydFRlc3QoJ3BhY2thZ2UnLCB0ZXN0KSk7XG4gICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgIHJlcyA9IGF3YWl0IGludm9rZVRlc3RzSW5DYXRlZ29yeSh2YWx1ZSwgb3B0aW9ucywgc2tpcHBpbmdDYXRlZ29yaWVzKTtcbiAgICAgICAgICBjb25zdCBkYXRhOiBUZXN0UmVzdWx0RXh0ZW5kZWRbXSA9IHJlcy5maWx0ZXIoKGQpID0+IGQucmVzdWx0ICE9ICdza2lwcGVkJyk7XG5cbiAgICAgICAgICBpZiAoIXNraXBwZWQpXG4gICAgICAgICAgICAgIHZhbHVlLmFmdGVyU3RhdHVzID0gYXdhaXQgaW52b2tlQ2F0ZWdvcnlNZXRob2QodmFsdWUuYWZ0ZXIsIGtleSk7XG5cbiAgICAgICAgICAvLyBDbGVhciBhZnRlciBjYXRlZ29yeVxuICAgICAgICAgIC8vIGdyb2suc2hlbGwuY2xvc2VBbGwoKTtcbiAgICAgICAgICAvLyBERy5CYWxsb29uLmNsb3NlQWxsKCk7XG4gICAgICAgICAgaWYgKHZhbHVlLmFmdGVyU3RhdHVzKSB7XG4gICAgICAgICAgICAgIHN0ZExvZyhgUGFja2FnZSB0ZXN0aW5nOiBDYXRlZ29yeSBhZnRlcigpIHt7JHtrZXl9fX0gZmFpbGVkYCk7XG4gICAgICAgICAgICAgIHN0ZExvZyhgUGFja2FnZSB0ZXN0aW5nOiBSZXN1bHQgZm9yIHt7JHtrZXl9fX0gYWZ0ZXI6ICR7dmFsdWUuYWZ0ZXJTdGF0dXN9YCk7XG4gICAgICAgICAgICAgIGRhdGEucHVzaCh7XG4gICAgICAgICAgICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICBjYXRlZ29yeToga2V5LFxuICAgICAgICAgICAgICAgICAgbmFtZTogJ2FmdGVyJyxcbiAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgcmVzdWx0OiB2YWx1ZS5hZnRlclN0YXR1cyxcbiAgICAgICAgICAgICAgICAgIG1zOiAwLFxuICAgICAgICAgICAgICAgICAgc2tpcHBlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICBsb2dzOiAnJyxcbiAgICAgICAgICAgICAgICAgIG93bmVyOiBwYWNrYWdlT3duZXIsXG4gICAgICAgICAgICAgICAgICBwYWNrYWdlOiBwYWNrYWdlXy5uYW1lLFxuICAgICAgICAgICAgICAgICAgd2lkZ2V0c0RpZmZlcmVuY2U6IDAsXG4gICAgICAgICAgICAgICAgICBmbGFraW5nOiBERy5UZXN0LmlzUmVwcm9kdWNpbmdcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh2YWx1ZS5iZWZvcmVTdGF0dXMpIHtcbiAgICAgICAgICAgICAgc3RkTG9nKGBQYWNrYWdlIHRlc3Rpbmc6IENhdGVnb3J5IGJlZm9yZSgpIHt7JHtrZXl9fX0gZmFpbGVkYCk7XG4gICAgICAgICAgICAgIHN0ZExvZyhgUGFja2FnZSB0ZXN0aW5nOiBSZXN1bHQgZm9yIHt7JHtrZXl9fX0gYmVmb3JlOiAke3ZhbHVlLmJlZm9yZVN0YXR1c31gKTtcbiAgICAgICAgICAgICAgZGF0YS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgIGNhdGVnb3J5OiBrZXksXG4gICAgICAgICAgICAgICAgICBuYW1lOiAnYmVmb3JlJyxcbiAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgcmVzdWx0OiB2YWx1ZS5iZWZvcmVTdGF0dXMsXG4gICAgICAgICAgICAgICAgICBtczogMCxcbiAgICAgICAgICAgICAgICAgIHNraXBwZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgbG9nczogJycsXG4gICAgICAgICAgICAgICAgICBvd25lcjogcGFja2FnZU93bmVyLFxuICAgICAgICAgICAgICAgICAgcGFja2FnZTogcGFja2FnZV8ubmFtZSxcbiAgICAgICAgICAgICAgICAgIHdpZGdldHNEaWZmZXJlbmNlOiAwLFxuICAgICAgICAgICAgICAgICAgZmxha2luZzogREcuVGVzdC5pc1JlcHJvZHVjaW5nXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXN1bHRzLnB1c2goLi4uZGF0YSk7XG5cbiAgICAgICAgICAvLyBJZiByZXR1cm5PbkZhaWwgaXMgc2V0IGFuZCBhIHRlc3QgZmFpbGVkIChvdGhlciB0aGFuIHNraXBUb1Rlc3QpLCBzdG9wIHByb2Nlc3NpbmcgbW9yZSBjYXRlZ29yaWVzXG4gICAgICAgICAgaWYgKG9wdGlvbnMucmV0dXJuT25GYWlsICYmIGRhdGEuc29tZSgoZCkgPT4gIWQuc3VjY2VzcyAmJiAhZC5za2lwcGVkICYmIGQubmFtZSAhPT0gb3B0aW9ucy5za2lwVG9UZXN0KSlcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHJlc2V0Q29uc29sZSgpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy50ZXN0Q29udGV4dCEuY2F0Y2hVbmhhbmRsZWQgJiYgKCFERy5UZXN0LmlzSW5CZW5jaG1hcmspKSB7XG4gICAgICBhd2FpdCBkZWxheSgxMDAwKTtcbiAgICAgIGNvbnN0IGVycm9yID0gYXdhaXQgZ3Jvay5zaGVsbC5sYXN0RXJyb3I7XG4gICAgICBpZiAoZXJyb3IgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7XG4gICAgICAgICAgICAgIGxvZ3M6ICcnLFxuICAgICAgICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICAgIGNhdGVnb3J5OiAnVW5oYW5kbGVkIGV4Y2VwdGlvbnMnLFxuICAgICAgICAgICAgICBuYW1lOiAnRXhjZXB0aW9uJyxcbiAgICAgICAgICAgICAgcmVzdWx0OiBlcnJvciA/PyAnJyxcbiAgICAgICAgICAgICAgc3VjY2VzczogIWVycm9yLFxuICAgICAgICAgICAgICBtczogMCxcbiAgICAgICAgICAgICAgc2tpcHBlZDogZmFsc2UsXG4gICAgICAgICAgICAgIG93bmVyOiBwYWNrYWdlT3duZXIgPz8gJycsXG4gICAgICAgICAgICAgICdwYWNrYWdlJzogcGFja2FnZV8ubmFtZSxcbiAgICAgICAgICAgICAgd2lkZ2V0c0RpZmZlcmVuY2U6IDBcbiAgICAgICAgICB9O1xuICAgICAgICAgIHN0ZExvZyhgUGFja2FnZSB0ZXN0aW5nOiBVbmhhbmRsZWQgRXhjZXB0aW9uOiAke2Vycm9yfWApO1xuXG4gICAgICAgICAgcmVzdWx0cy5wdXNoKHsuLi5wYXJhbXMsICdmbGFraW5nJzogREcuVGVzdC5pc1JlcHJvZHVjaW5nICYmICFlcnJvcn0pO1xuICAgICAgICAgICg8YW55PnBhcmFtcykucGFja2FnZSA9IHBhY2thZ2VfLm5hbWU7XG4gICAgICAgICAgYXdhaXQgZ3Jvay5zaGVsbC5yZXBvcnRUZXN0KCdwYWNrYWdlJywgcGFyYW1zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0UmVzdWx0KHg6IGFueSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBgJHt4LnRvU3RyaW5nKCl9XFxuJHt4LnN0YWNrID8gKGF3YWl0IERHLkxvZ2dlci50cmFuc2xhdGVTdGFja1RyYWNlKHguc3RhY2spKSA6ICcnfWA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4ZWNUZXN0KHQ6IFRlc3QsIHByZWRpY2F0ZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBsb2dzOiBhbnlbXSxcbiAgdGVzdFRpbWVvdXQ/OiBudW1iZXIsIHBhY2thZ2VOYW1lPzogc3RyaW5nLCB2ZXJib3NlPzogYm9vbGVhblxuKTogUHJvbWlzZTxUZXN0UmVzdWx0IHwgdW5kZWZpbmVkPiB7XG4gIGxvZ3MubGVuZ3RoID0gMDtcbiAgbGV0IHI6IFRlc3RSZXN1bHQ7XG4gIGxldCB0eXBlOiBzdHJpbmcgPSAncGFja2FnZSc7XG4gIGNvbnN0IGZpbHRlciA9IHByZWRpY2F0ZSAhPSB1bmRlZmluZWQgJiYgKHQubmFtZS50b0xvd2VyQ2FzZSgpICE9PSBwcmVkaWNhdGUudG9Mb3dlckNhc2UoKSk7XG4gIGxldCBza2lwID0gdC5vcHRpb25zPy5za2lwUmVhc29uIHx8IGZpbHRlcjtcbiAgbGV0IHNraXBSZWFzb24gPSBmaWx0ZXIgPyAnc2tpcHBlZCcgOiB0Lm9wdGlvbnM/LnNraXBSZWFzb247XG5cbiAgaWYgKERHLlRlc3QuaXNJbkJlbmNobWFyayAmJiAhdC5vcHRpb25zPy5iZW5jaG1hcmspIHtcbiAgICBzdGRMb2coYFBhY2thZ2UgdGVzdGluZzogU2tpcHBlZCB7eyR7dC5jYXRlZ29yeX19fSB7eyR7dC5uYW1lfX19IGRvZXNudCBhdmFpbGFibGUgaW4gYmVuY2htYXJrIG1vZGVgKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHNraXAgJiYgIURHLlRlc3QuaXNJbkJlbmNobWFyaylcbiAgICBzdGRMb2coYFBhY2thZ2UgdGVzdGluZzogU2tpcHBlZCB7eyR7dC5jYXRlZ29yeX19fSB7eyR7dC5uYW1lfX19YCk7XG4gIGlmICghc2tpcClcbiAgICBzdGRMb2coYFBhY2thZ2UgdGVzdGluZzogU3RhcnRlZCB7eyR7dC5jYXRlZ29yeX19fSB7eyR7dC5uYW1lfX19YCk7XG4gIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgY29uc3Qgc3RhcnREYXRlID0gbmV3IERhdGUoc3RhcnQpLnRvSVNPU3RyaW5nKCk7XG4gIHRyeSB7XG4gICAgaWYgKHNraXApXG4gICAgICByID0geyBuYW1lOiB0Lm5hbWUsIG93bmVyOnQub3B0aW9ucz8ub3duZXIgPz8gJycsIGNhdGVnb3J5OiB0LmNhdGVnb3J5LCBsb2dzOiAnJywgZGF0ZTogc3RhcnREYXRlLCBzdWNjZXNzOiB0cnVlLCByZXN1bHQ6IHNraXBSZWFzb24hLCBtczogMCwgc2tpcHBlZDogdHJ1ZSwgcGFja2FnZTogcGFja2FnZU5hbWUgPz8gJycsIGZsYWtpbmc6IERHLlRlc3QuaXNSZXByb2R1Y2luZ307XG4gICAgZWxzZSB7XG4gICAgICBsZXQgdGltZW91dF8gPSB0ZXN0VGltZW91dCA/PyBTVEFOREFSVF9USU1FT1VUO1xuXG4gICAgICBpZiAoREcuVGVzdC5pc1Byb2ZpbGluZylcbiAgICAgICAgY29uc29sZS5wcm9maWxlKGAke3QuY2F0ZWdvcnl9OiAke3QubmFtZX1gKTtcblxuICAgICAgciA9IHsgbmFtZTogdC5uYW1lLCBvd25lcjp0Lm9wdGlvbnM/Lm93bmVyID8/ICcnLCBjYXRlZ29yeTogdC5jYXRlZ29yeSwgbG9nczogJycsIGRhdGU6IHN0YXJ0RGF0ZSwgc3VjY2VzczogdHJ1ZSwgcmVzdWx0OiAoYXdhaXQgdGltZW91dCh0LnRlc3QsIHRpbWVvdXRfKSkudG9TdHJpbmcoKSA/PyAnT0snLCBtczogMCwgc2tpcHBlZDogZmFsc2UgLCBwYWNrYWdlOiBwYWNrYWdlTmFtZSA/PyAnJywgZmxha2luZzogREcuVGVzdC5pc1JlcHJvZHVjaW5nfTtcblxuICAgICAgaWYgKERHLlRlc3QuaXNQcm9maWxpbmcpIHtcbiAgICAgICAgY29uc29sZS5wcm9maWxlRW5kKGAke3QuY2F0ZWdvcnl9OiAke3QubmFtZX1gKTtcbiAgICAgICAgZ3Jvay5zaGVsbC5pbmZvKGBQcm9maWxpbmcgb2YgJHt0LmNhdGVnb3J5fTogJHt0Lm5hbWV9IGZpbmlzaGVkIFxcbiBQbGVhc2UgZW5zdXJlIHRoYXQgeW91IGhhdmUgb3BlbmVkIERldlRvb2xzIChGMTIpIC8gUGVyZm9ybWFuY2UgcGFuZWwgYmVmb3JlIHRlc3Qgc3RhcnRzLmApO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoeDogYW55KSB7XG4gICAgc3RkRXJyb3IoeCk7XG4gICAgciA9IHsgbmFtZTogdC5uYW1lLCBvd25lcjp0Lm9wdGlvbnM/Lm93bmVyID8/ICcnLCBjYXRlZ29yeTogdC5jYXRlZ29yeSwgbG9nczogJycsIGRhdGU6IHN0YXJ0RGF0ZSwgc3VjY2VzczogZmFsc2UsIHJlc3VsdDogYXdhaXQgZ2V0UmVzdWx0KHgpLCBtczogMCwgc2tpcHBlZDogZmFsc2UsIHBhY2thZ2U6IHBhY2thZ2VOYW1lID8/ICcnLCBmbGFraW5nOiBmYWxzZX07XG4gIH1cbiAgaWYgKHQub3B0aW9ucz8uaXNBZ2dyZWdhdGVkICYmIHIucmVzdWx0LmNvbnN0cnVjdG9yID09PSBERy5EYXRhRnJhbWUpIHtcbiAgICBjb25zdCBjb2wgPSByLnJlc3VsdC5jb2woJ3N1Y2Nlc3MnKTtcbiAgICBpZiAoY29sKVxuICAgICAgci5zdWNjZXNzID0gY29sLnN0YXRzLnN1bSA9PT0gY29sLmxlbmd0aDtcbiAgICBpZiAoIXZlcmJvc2UpIHtcbiAgICAgIGNvbnN0IGRmID0gci5yZXN1bHQ7XG4gICAgICBkZi5jb2x1bW5zLnJlbW92ZSgnc3RhY2snKTtcbiAgICAgIGRmLnJvd3MucmVtb3ZlV2hlcmUoKHIpID0+IHIuZ2V0KCdzdWNjZXNzJykpO1xuICAgICAgci5yZXN1bHQgPSBkZjtcbiAgICB9XG4gICAgci5yZXN1bHQgPSByLnJlc3VsdC50b0NzdigpO1xuICB9XG4gIHIubG9ncyA9IGxvZ3Muam9pbignXFxuJyk7XG4gIHIubXMgPSBEYXRlLm5vdygpIC0gc3RhcnQ7XG4gIGlmICghc2tpcClcbiAgICBzdGRMb2coYFBhY2thZ2UgdGVzdGluZzogRmluaXNoZWQge3ske3QuY2F0ZWdvcnl9fX0ge3ske3QubmFtZX19fSB3aXRoIHt7JHtyLnN1Y2Nlc3MgPyAnc3VjY2VzcycgOiAnZXJyb3InfX19IGZvciAke3IubXN9IG1zYCk7XG4gIGlmICghci5zdWNjZXNzKSB7XG4gICAgICBzdGRMb2coYFBhY2thZ2UgdGVzdGluZzogUmVzdWx0IGZvciB7eyR7dC5jYXRlZ29yeX19fSB7eyR7dC5uYW1lfX19OiAke3IucmVzdWx0fWApO1xuICB9XG4gIHIuY2F0ZWdvcnkgPSB0LmNhdGVnb3J5O1xuICByLm5hbWUgPSB0Lm5hbWU7XG4gIHIub3duZXIgPSB0Lm9wdGlvbnM/Lm93bmVyID8/ICcnO1xuICBpZiAoIWZpbHRlcikge1xuICAgIGxldCBwYXJhbXMgPSB7XG4gICAgICAnc3VjY2Vzcyc6IHIuc3VjY2VzcywgJ3Jlc3VsdCc6IHIucmVzdWx0LCAnbXMnOiByLm1zLCAnZGF0ZSc6IHIuZGF0ZSxcbiAgICAgICdza2lwcGVkJzogci5za2lwcGVkLCAnY2F0ZWdvcnknOiB0LmNhdGVnb3J5LCAnbmFtZSc6IHQubmFtZSwgJ2xvZ3MnOiByLmxvZ3MsICdvd25lcic6IHIub3duZXIsXG4gICAgICAnZmxha2luZyc6IERHLlRlc3QuaXNSZXByb2R1Y2luZyAmJiByLnN1Y2Nlc3MsXG4gICAgICAncGFja2FnZSc6IHIucGFja2FnZVxuICAgIH07XG4gICAgaWYgKHIucmVzdWx0LmNvbnN0cnVjdG9yID09IE9iamVjdCkge1xuICAgICAgY29uc3QgcmVzID0gT2JqZWN0LmtleXMoci5yZXN1bHQpLnJlZHVjZSgoYWNjLCBrKSA9PiAoeyAuLi5hY2MsIFsncmVzdWx0LicgKyBrXTogci5yZXN1bHRba10gfSksIHt9KTtcbiAgICAgIHBhcmFtcyA9IHsgLi4ucGFyYW1zLCAuLi5yZXMgfTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLnJlc3VsdCBpbnN0YW5jZW9mIERHLkRhdGFGcmFtZSlcbiAgICAgIHBhcmFtcy5yZXN1bHQgPSBKU09OLnN0cmluZ2lmeShwYXJhbXMucmVzdWx0Py50b0pzb24oKSkgfHwgJyc7XG4gICAgYXdhaXQgZ3Jvay5zaGVsbC5yZXBvcnRUZXN0KHR5cGUsIHBhcmFtcyk7XG4gIH1cbiAgcmV0dXJuIHI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaHVmZmxlKGFycmF5OiBhbnlbXSk6IGFueVtdIHtcbiAgY29uc3QgbmV3QXJyID0gYXJyYXkuc2xpY2UoKTtcbiAgbmV3QXJyLnNvcnQoKCkgPT4gTWF0aC5yYW5kb20oKSAtIDAuNSk7XG4gIHJldHVybiBuZXdBcnI7XG59XG5cbi8qIFdhaXRzIFttc10gbWlsbGlzZWNvbmRzICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVsYXkobXM6IG51bWJlcikge1xuICBhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCBtcykpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXdhaXRDaGVjayhjaGVja0hhbmRsZXI6ICgpID0+IGJvb2xlYW4sXG4gIGVycm9yOiBzdHJpbmcgPSAnVGltZW91dCBleGNlZWRlZCcsIHdhaXQ6IG51bWJlciA9IDUwMCwgaW50ZXJ2YWw6IG51bWJlciA9IDUwKTogUHJvbWlzZTxhbnk+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XG4gICAgICByZWplY3QobmV3IEVycm9yKGVycm9yKSk7XG4gICAgfSwgd2FpdCk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGludGVydmFsSWQ6IFRpbWVvdXQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBpZiAoY2hlY2tIYW5kbGVyKCkpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgIH1cbiAgICB9LCBpbnRlcnZhbCk7XG4gIH0pO1xufVxuXG4vLyBSZXR1cm5zIHRlc3QgZXhlY3V0aW9uIHJlc3VsdCBvciBhbiBlcnJvciBpbiBjYXNlIG9mIHRpbWVvdXRcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0aW1lb3V0KGZ1bmM6ICgpID0+IFByb21pc2U8YW55PiwgdGVzdFRpbWVvdXQ6IG51bWJlciwgdGltZW91dFJlYXNvbjogc3RyaW5nID0gJ0VYRUNVVElPTiBUSU1FT1VUJyk6IFByb21pc2U8YW55PiB7XG4gIGxldCB0aW1lb3V0OiBhbnkgPSBudWxsO1xuICBjb25zdCB0aW1lb3V0UHJvbWlzZSA9IG5ldyBQcm9taXNlPGFueT4oKF8sIHJlamVjdCkgPT4ge1xuICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcHJvbWlzZS1yZWplY3QtZXJyb3JzXG4gICAgICByZWplY3QodGltZW91dFJlYXNvbik7XG4gICAgfSwgdGVzdFRpbWVvdXQpO1xuICB9KTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5yYWNlKFtmdW5jKCksIHRpbWVvdXRQcm9taXNlXSk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKHRpbWVvdXQpXG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGlhbG9nUHJlc2VudChkaWFsb2dUaXRsZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IGRpYWxvZ3MgPSBERy5EaWFsb2cuZ2V0T3BlbkRpYWxvZ3MoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaWFsb2dzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGRpYWxvZ3NbaV0udGl0bGUgPT0gZGlhbG9nVGl0bGUpXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKiBFeHBlY3RzIGFuIGFzeW5jaHJvbm91cyB7QGxpbmsgYWN0aW9ufSB0byB0aHJvdyBhbiBleGNlcHRpb24uIFVzZSB7QGxpbmsgY2hlY2t9IHRvIHBlcmZvcm1cbiAqIGRlZXBlciBpbnNwZWN0aW9uIG9mIHRoZSBleGNlcHRpb24gaWYgbmVjZXNzYXJ5LlxuICogQHBhcmFtICB7ZnVuY3Rpb24oKTogUHJvbWlzZTx2b2lkPn0gYWN0aW9uXG4gKiBAcGFyYW0gIHtmdW5jdGlvbihhbnkpOiBib29sZWFufSBjaGVja1xuICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4cGVjdEV4Y2VwdGlvbkFzeW5jKGFjdGlvbjogKCkgPT4gUHJvbWlzZTx2b2lkPixcbiAgY2hlY2s/OiAoZXhjZXB0aW9uOiBhbnkpID0+IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgbGV0IGNhdWdodDogYm9vbGVhbiA9IGZhbHNlO1xuICBsZXQgY2hlY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuICB0cnkge1xuICAgIGF3YWl0IGFjdGlvbigpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY2F1Z2h0ID0gdHJ1ZTtcbiAgICBjaGVja2VkID0gIWNoZWNrIHx8IGNoZWNrKGUpO1xuICB9IGZpbmFsbHkge1xuICAgIGlmICghY2F1Z2h0KVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBbiBleGNlcHRpb24gaXMgZXhwZWN0ZWQgYnV0IG5vdCB0aHJvd24nKTtcbiAgICBpZiAoIWNoZWNrZWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FuIGV4cGVjdGVkIGV4Y2VwdGlvbiBpcyB0aHJvd24sIGJ1dCBpdCBkb2VzIG5vdCBzYXRpc2Z5IHRoZSBjb25kaXRpb24nKTtcbiAgfVxufVxuXG5jb25zdCBjYXRERiA9IERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhbREcuQ29sdW1uLmZyb21TdHJpbmdzKCdjb2wnLCBbJ3ZhbDEnLCAndmFsMicsICd2YWwzJ10pXSk7XG5cbi8qKlxuICogVW5pdmVyc2FsIHRlc3QgZm9yIHZpZXdlcnMuIEl0IHNlYXJjaCB2aWV3ZXJzIGluIERPTSBieSB0YWdzOiBjYW52YXMsIHN2ZywgaW1nLCBpbnB1dCwgaDEsIGFcbiAqIEBwYXJhbSAge3N0cmluZ30gdiBWaWV3ZXIgbmFtZVxuICogQHBhcmFtICB7X0RHLkRhdGFGcmFtZX0gZGYgRGF0YWZyYW1lIHRvIHVzZS4gU2hvdWxkIGhhdmUgYXQgbGVhc3QgMyByb3dzXG4gKiBAcGFyYW0gIHtib29sZWFufSBvcHRpb25zLmRldGVjdFNlbWFudGljVHlwZXMgU3BlY2lmeSB3aGV0aGVyIHRvIGRldGVjdCBzZW1hbnRpYyB0eXBlcyBvciBub3RcbiAqIEBwYXJhbSAge2Jvb2xlYW59IG9wdGlvbnMucmVhZE9ubHkgSWYgc2V0IHRvIHRydWUsIHRoZSBkYXRhZnJhbWUgd2lsbCBub3QgYmUgbW9kaWZpZWQgZHVyaW5nIHRoZSB0ZXN0XG4gKiBAcGFyYW0gIHtib29sZWFufSBvcHRpb25zLmFyYml0cmFyeURmVGVzdCBJZiBzZXQgdG8gZmFsc2UsIHRlc3Qgb24gYXJiaXRyYXJ5IGRhdGFmcmFtZVxuICogKG9uZSBjYXRlZ29yaWNhbCBjb2x1bW4pIHdpbGwgbm90IGJlIHBlcmZvcm1lZFxuICogQHBhcmFtICB7b2JqZWN0fSBvcHRpb25zIExpc3Qgb2Ygb3B0aW9ucyAob3B0aW9uYWwpXG4gKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBUaGUgdGVzdCBpcyBjb25zaWRlcmVkIHN1Y2Nlc3NmdWwgaWYgaXQgY29tcGxldGVzIHdpdGhvdXQgZXJyb3JzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0ZXN0Vmlld2VyKHY6IHN0cmluZywgZGY6IF9ERy5EYXRhRnJhbWUsIG9wdGlvbnM/OiB7XG4gIGRldGVjdFNlbWFudGljVHlwZXM/OiBib29sZWFuLCByZWFkT25seT86IGJvb2xlYW4sIGFyYml0cmFyeURmVGVzdD86IGJvb2xlYW4sXG4gIHBhY2thZ2VOYW1lPzogc3RyaW5nLCBhd2FpdFZpZXdlcj86ICh2aWV3ZXI6IF9ERy5WaWV3ZXIpID0+IFByb21pc2U8dm9pZD5cbn0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcGFja2FnZU5hbWUgPSBvcHRpb25zPy5wYWNrYWdlTmFtZSA/PyAnJztcbiAgaWYgKG9wdGlvbnM/LmRldGVjdFNlbWFudGljVHlwZXMpXG4gICAgYXdhaXQgZ3Jvay5kYXRhLmRldGVjdFNlbWFudGljVHlwZXMoZGYpO1xuICBjb25zdCB0diA9IGdyb2suc2hlbGwuYWRkVGFibGVWaWV3KGRmKTtcblxuICB0cnkge1xuICAgIC8vMS4gT3BlbiwgZG8gbm90aGluZyBhbmQgY2xvc2VcbiAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkKTtcbiAgICAvL2luIGNhc2Ugdmlld2VyIHdpdGggYXN5bmMgcmVuZGVyaW5nIC0gd2FpdCBmb3IgcmVuZGVyIHRvIGNvbXBsZXRlXG4gICAgaWYgKG9wdGlvbnM/LmF3YWl0Vmlld2VyKVxuICAgICAgYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3ZXJBZGRlZCwgdW5kZWZpbmVkLCBvcHRpb25zIS5hd2FpdFZpZXdlcik7XG5cbiAgICAvLzIuIE9wZW4gdmlld2VyLCBydW4gc2VsZWN0aW9uLCBmaWx0ZXIsIGV0Yy4gYW5kIGNsb3NlXG4gICAgaWYgKCFvcHRpb25zPy5yZWFkT25seSkge1xuICAgICAgYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3ZXJBZGRlZCwgc2VsZWN0RmlsdGVyQ2hhbmdlQ3VycmVudCk7XG4gICAgICBpZiAob3B0aW9ucz8uYXdhaXRWaWV3ZXIpXG4gICAgICAgIGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld2VyQWRkZWQsIHNlbGVjdEZpbHRlckNoYW5nZUN1cnJlbnQsIG9wdGlvbnMhLmF3YWl0Vmlld2VyKTtcbiAgICB9XG5cbiAgICAvLzIuIE9wZW4gdmlld2VyLCBjaGFuZ2Ugb3B0aW9ucywgc2F2ZSBsYXlvdXQgYW5kIGNsb3NlXG4gICAgbGV0IHByb3BzQW5kTGF5b3V0OiB7IGxheW91dDogYW55LCBzYXZlZFByb3BzOiBhbnkgfSB8IG51bGwgPSBudWxsO1xuICAgIHByb3BzQW5kTGF5b3V0ID0gYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3ZXJBZGRlZCwgY2hhbmdlT3B0aW9uc1NhdmVMYXlvdXQpO1xuICAgIGlmIChvcHRpb25zPy5hd2FpdFZpZXdlcilcbiAgICAgIHByb3BzQW5kTGF5b3V0ID0gYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3ZXJBZGRlZCxcbiAgICAgICAgY2hhbmdlT3B0aW9uc1NhdmVMYXlvdXQsIG9wdGlvbnMhLmF3YWl0Vmlld2VyKVxuXG4gICAgLy8zLiBMb2FkIGxheW91dFxuICAgIGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld0xheW91dEFwcGxpZWQsIGxvYWRMYXlvdXQsIHVuZGVmaW5lZCwgcHJvcHNBbmRMYXlvdXQ/LmxheW91dCxcbiAgICAgIHsgc2F2ZWRQcm9wczogcHJvcHNBbmRMYXlvdXQ/LnNhdmVkUHJvcHMgfSk7XG4gICAgaWYgKG9wdGlvbnM/LmF3YWl0Vmlld2VyKVxuICAgICAgYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3TGF5b3V0QXBwbGllZCwgbG9hZExheW91dCwgb3B0aW9ucyEuYXdhaXRWaWV3ZXIsXG4gICAgICAgIHByb3BzQW5kTGF5b3V0Py5sYXlvdXQsIHsgc2F2ZWRQcm9wczogcHJvcHNBbmRMYXlvdXQ/LnNhdmVkUHJvcHMgfSk7XG5cbiAgICAvLzQuIE9wZW4gdmlld2VyIG9uIGFyYml0YXJ5IGRhdGFzZXRcbiAgICBpZiAob3B0aW9ucz8uYXJiaXRyYXJ5RGZUZXN0ICE9PSBmYWxzZSkge1xuICAgICAgdHYuZGF0YUZyYW1lID0gY2F0REY7XG4gICAgICBhd2FpdCBkZWxheSg1MCk7XG4gICAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkKTtcbiAgICAgIGlmIChvcHRpb25zPy5hd2FpdFZpZXdlcilcbiAgICAgICAgYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3ZXJBZGRlZCwgdW5kZWZpbmVkLCBvcHRpb25zIS5hd2FpdFZpZXdlcik7XG4gICAgfVxuXG4gICAgLy81LiBDYWxsIHBvc3Rwb25lZCBmaWx0ZXJpbmdcbiAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkLCBmaWx0ZXJBc3luYyk7XG4gICAgaWYgKG9wdGlvbnM/LmF3YWl0Vmlld2VyKVxuICAgICAgYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3ZXJBZGRlZCwgZmlsdGVyQXN5bmMsIG9wdGlvbnMhLmF3YWl0Vmlld2VyKTtcblxuICB9IGZpbmFsbHkge1xuICAgIC8vIGNsb3NlQWxsKCkgaXMgaGFuZGxpbmcgYnkgY29tbW9uIHRlc3Qgd29ya2Zsb3dcbiAgICAvLyBncm9rLnNoZWxsLmNsb3NlQWxsKCk7XG4gICAgLy8gREcuQmFsbG9vbi5jbG9zZUFsbCgpO1xuICB9XG59XG4iXX0=","import * as DG from 'datagrok-api/dg';\nimport * as grok from 'datagrok-api/grok';\n\n// Do not import anything from JsDrawLite or HelmWebEditor, only to the main Helm package\n// import {JSDraw2ModuleType} from '@datagrok/js-draw-lite/src/types/jsdraw2';\n// import {HelmType, OrgHelmModuleType} from '@datagrok/helm-web-editor/src/types/org-helm';\n\nimport {runTests, tests, TestContext, initAutoTests as initTests } from '@datagrok-libraries/test/src/test';\n\nexport const _package = new DG.Package();\nexport {tests};\n\n//name: test\n//input: string category {optional: true}\n//input: string test {optional: true}\n//input: object testContext {optional: true}\n//output: dataframe result\nexport async function test(category: string, test: string, testContext: TestContext): Promise<DG.DataFrame> {\n // verbose: true - for tests returning dataframe\n const data = await runTests({category, test, testContext});\n return DG.DataFrame.fromObjects(data)!;\n}\n\n//name: initAutoTests\nexport async function initAutoTests() {\n await initTests(_package, _package.getModule('package-test.js'));\n}\n"],"names":["exports","__esModule","digestLength","blockSize","K","Uint32Array","hashBlocks","w","v","p","pos","len","a","b","c","d","e","f","g","h","u","i","j","t1","t2","Hash","this","state","Int32Array","temp","buffer","Uint8Array","bufferLength","bytesHashed","finished","reset","prototype","clean","length","update","data","dataLength","Error","dataPos","finish","out","left","bitLenHi","bitLenLo","padLength","digest","_saveState","_restoreState","from","HMAC","key","inner","outer","pad","istate","ostate","hash","hmac","fillBuffer","info","counter","num","hkdfSalt","hkdf","salt","okm","hmac_","bufpos","fill","pbkdf2","password","iterations","dkLen","prf","ctr","t","dk","k","factory","sha256","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","call","definition","o","Object","defineProperty","enumerable","get","obj","prop","hasOwnProperty","r","Symbol","toStringTag","value","DG","testData","DataFrame","fromCsv","columns","add","Column","fromList","TYPE","BYTE_ARRAY","Array","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","next","rejected","result","done","then","apply","STANDART_TIMEOUT","BENCHMARK_TIMEOUT","stdLog","console","log","bind","stdInfo","stdWarn","warn","stdError","error","tests","autoTestsCatName","demoCatName","detectorsCatName","coreCatName","wasRegistered","assure","notNull","name","TestContext","constructor","catchUnhandled","report","returnOnFail","closeAll","Test","category","test","options","_a","timeout","_b","isInDebug","res","toString","actual","expected","addNamespace","s","replace","RegExp","nqName","initAutoTests","package_","_c","_d","_e","_f","_g","_h","_j","_k","packageId","id","moduleTests","_package","window","dartTests","arr","split","pop","cat","join","fullName","unshift","clear","push","isAggregated","skipReason","owner","benchmark","moduleAutoTests","moduleDemo","moduleDetectors","packFunctions","grok","dapi","functions","filter","list","reg","demo","isArray","matchAll","map","forEach","startsWith","parseInt","eval","wait","skip","isInBenchmark","benchmarkTimeout","friendlyName","shell","clearLastError","unhandled","lastError","hasTag","detectorsTestData","files","openTable","col","clone","semType","resArr","getResult","x","stack","Logger","translateStackTrace","execTest","predicate","logs","testTimeout","packageName","verbose","_l","_m","_o","_p","toLowerCase","start","Date","now","startDate","toISOString","date","success","ms","skipped","package","flaking","isReproducing","timeout_","isProfiling","profile","profileEnd","stats","sum","df","remove","rows","removeWhere","toCsv","params","keys","reduce","acc","assign","JSON","stringify","toJson","reportTest","shuffle","array","newArr","slice","sort","Math","random","setTimeout","func","timeoutReason","timeoutPromise","_","race","clearTimeout","fromColumns","fromStrings","testContext","nodeOptions","getCurrentCall","match","packageOwner","results","args","redefineConsole","categoriesToInvoke","skippingCategories","skipToCategory","isTargetCategory","entries","exclude","some","trim","every","skippedCount","beforeStatus","invokeCategoryMethod","before","stressTest","tags","tag","includes","testElem","widgetsDifference","invokeTestsInCategory","afterStatus","after","skipToTest","invokeTests","method","invokationResult","_q","_r","_s","_t","_u","widgetsBefore","getWidgetsCountSafe","skippingTests","benchmarks","testRun","Balloon","process","Widget","getAll","message","runTests","fromObjects","getModule"],"sourceRoot":""}