UNPKG

ng-terminal

Version:

NgTerminal is a terminal component on Angular 17 or higher.

335 lines 33.8 kB
/** * * It is a CSI sequences generator * https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-Functions-using-CSI-_-ordered-by-the-final-character_s_ */ let CSI = '\x9b'; export class FunctionsUsingCSI { static get CSI() { return CSI; } /** * CSI Ps @ Insert Ps (Blank) Character(s) (default = 1) (ICH). * * */ static insertBlank(count) { return `${CSI}${count}@`; } /** * CSI Ps SP @ */ /** * CSI Ps A Cursor Up Ps Times (default = 1) (CUU). * \x9b3A */ static cursorUp(count) { return `${CSI}${count}A`; } /** * CSI Ps SP A */ /** * CSI Ps B Cursor Down Ps Times (default = 1) (CUD). * \x9b3B */ static cursorDown(count) { return `${CSI}${count}B`; } /** * CSI Ps C Cursor Forward Ps Times (default = 1) (CUF). * \x9b3C */ static cursorForward(count) { return `${CSI}${count}C`; } /** * CSI Ps D Cursor Backward Ps Times (default = 1) (CUB). * \x9b3D */ static cursorBackward(count) { return `${CSI}${count}D`; } /** * CSI Ps E Cursor Next Line Ps Times (default = 1) (CNL). * \x9b3E * */ static cursorNextLine(count) { return `${CSI}${count}E`; } /** * CSI Ps F Cursor Preceding Line Ps Times (default = 1) (CPL). * \x9b3F * */ static cursorPrecedingLine(count) { return `${CSI}${count}F`; } /** * CSI Ps G Cursor Character Absolute [column] (default = [row,1]) (CHA). * \x9b9G * */ static cursorColumn(count) { return `${CSI}${count}G`; } /** * CSI Ps ; Ps H Cursor Position [row;column] (default = [1,1]) (CUP). * \x9b2;2H * */ static cursorPosition(row, col) { return `${CSI}${row};${col}H`; } /** * CSI Ps I Cursor Forward Tabulation Ps tab stops (default = 1) (CHT). */ /** * CSI Ps J Erase in Display (ED), VT100. * Ps = 0 -> Erase Below (default). * Ps = 1 -> Erase Above. * Ps = 2 -> Erase All. * Ps = 3 -> Erase Saved Lines (xterm). * \x9b2J * */ static eraseInDisplay(category) { return `${CSI}${category}J`; } /** * CSI ? Ps J * Erase in Display (DECSED), VT220. * Ps = 0 -> Selective Erase Below (default). * Ps = 1 -> Selective Erase Above. * Ps = 2 -> Selective Erase All. * Ps = 3 -> Selective Erase Saved Lines (xterm). * \x9b?2J * */ static eraseSelectiveThingsInDisplay(category) { return `${CSI}?${category}J`; } /** * CSI Ps K * Erase in Line (EL), VT100. * Ps = 0 -> Erase to Right (default). * Ps = 1 -> Erase to Left. * Ps = 2 -> Erase All. * \x9b?1K * */ static eraseInLine(category) { return `${CSI}${category}K`; } /** * CSI ? Ps K * Erase in Line (DECSEL), VT220. * Ps = 0 -> Selective Erase to Right (default). * Ps = 1 -> Selective Erase to Left. * Ps = 2 -> Selective Erase All. * \x9b?1K * */ static eraseSelectiveThingsInLine(category) { return `${CSI}?${category}K`; } /** * CSI Ps L Insert Ps Line(s) (default = 1) (IL). * \x9b2L * */ static insertLines(count) { return `${CSI}${count}L`; } /** * CSI Ps M Delete Ps Line(s) (default = 1) (DL). * \x9b2M * */ static deleteLines(count) { return `${CSI}${count}M`; } /** * CSI Ps P Delete Ps Character(s) (default = 1) (DCH). * \x9b2P * */ static deleteCharacter(count) { return `${CSI}${count}P`; } /** * CSI Ps S Scroll up Ps lines (default = 1) (SU), VT420, ECMA-48. * \x9b2S * */ static scrollUpLines(count) { return `${CSI}${count}S`; } /** * CSI ? Pi ; Pa ; Pv S */ /** * CSI Ps T Scroll down Ps lines (default = 1) (SD), VT420. * \x9b2T * */ static scrollDownLines(count) { return `${CSI}${count}T`; } /** * CSI Ps ; Ps ; Ps ; Ps ; Ps T */ /** * CSI > Ps ; Ps T */ /** * CSI Ps X Erase Ps Character(s) (default = 1) (ECH). * \x9b2X * */ static eraseCharacters(count) { return `${CSI}${count}X`; } /** * CSI Ps Z Cursor Backward Tabulation Ps tab stops (default = 1) (CBT). * \x9b2Z * */ static cursorBackwardTabulationPstabstops(count) { return `${CSI}${count}Z`; } /** * CSI Ps ^ Scroll down Ps lines (default = 1) (SD), ECMA-48. * \x9b2^ * */ static scrolldownPslines(count) { return `${CSI}${count}^`; } /** * CSI Ps ` Character Position Absolute [column] (default = [row,1]) * \x9b1` */ static characterPositionAbsolute(count) { return `${CSI}${count}\``; } /** * CSI Ps a Character Position Relative [columns] (default = [row,col+1]) * \x9b1a */ static characterPositionRelative(count) { return `${CSI}${count}a`; } /** * CSI Ps b Repeat the preceding graphic character Ps times (REP). * \x9b1b * */ static repeatThePrecedingGraphicCharacter(count) { return `${CSI}${count}b`; } /** * CSI Pm d Line Position Absolute [row] (default = [1,column]) (VPA). * \x9b4d * */ static linePositionAbsolute(count) { return `${CSI}${count}d`; } /** * CSI Pm e Line Position Relative [rows] (default = [row+1,column]) * \x9b1e * */ static linePositionRelative(count) { return `${CSI}${count}e`; } /** * CSI Ps ; Ps f Horizontal and Vertical Position [row;column] (default = * [1,1]) * \x9b3;5f * */ static horizontalandVerticalPosition(row, column) { return `${CSI}${row};${column}f`; } /** * CSI Ps g Tab Clear (TBC). * \x9b3g * */ /** * CSI Pm h Set Mode (SM). * \x9b4h * */ static setMode(mode, ...additionalModes) { const modes = [mode, ...(additionalModes ?? [])]; return `${CSI}${modes.join(";")}h`; } /** * CSI ? Pm h DEC Private Mode Set (DECSET). * */ /** * CSI Pm i Media Copy (MC). */ /** * CSI ? Pm i */ /** * CSI Pm l Reset Mode (RM). * \x9b4l * */ static resetMode(mode, ...additionalModes) { const modes = [mode, ...(additionalModes ?? [])]; return `${CSI}${modes.join(";")}l`; } /** * CSI ? Pm l */ /** * CSI Pm m Character Attributes (SGR). * \x9b31m * */ static characterAttributes(firstAttribute, ...additionalAttributes) { const chars = [ firstAttribute, ...(additionalAttributes ?? []), ]; return `${CSI}${chars.join(';')}m`; } } export var KindOfEraseInDisplay; (function (KindOfEraseInDisplay) { KindOfEraseInDisplay[KindOfEraseInDisplay["Below"] = 0] = "Below"; KindOfEraseInDisplay[KindOfEraseInDisplay["Above"] = 1] = "Above"; KindOfEraseInDisplay[KindOfEraseInDisplay["All"] = 2] = "All"; KindOfEraseInDisplay[KindOfEraseInDisplay["SavedLines"] = 3] = "SavedLines"; })(KindOfEraseInDisplay || (KindOfEraseInDisplay = {})); export var KindOfEraseInLine; (function (KindOfEraseInLine) { KindOfEraseInLine[KindOfEraseInLine["Right"] = 0] = "Right"; KindOfEraseInLine[KindOfEraseInLine["Left"] = 1] = "Left"; KindOfEraseInLine[KindOfEraseInLine["All"] = 2] = "All"; })(KindOfEraseInLine || (KindOfEraseInLine = {})); export var KindOfTabClear; (function (KindOfTabClear) { KindOfTabClear[KindOfTabClear["ClearCurrentColumn"] = 0] = "ClearCurrentColumn"; KindOfTabClear[KindOfTabClear["ClearAll"] = 3] = "ClearAll"; })(KindOfTabClear || (KindOfTabClear = {})); export var KindOfSetMode; (function (KindOfSetMode) { KindOfSetMode[KindOfSetMode["KeyboardActionMode"] = 2] = "KeyboardActionMode"; KindOfSetMode[KindOfSetMode["InsertMode"] = 4] = "InsertMode"; KindOfSetMode[KindOfSetMode["SendReceive"] = 12] = "SendReceive"; KindOfSetMode[KindOfSetMode["AutomaticNewline"] = 20] = "AutomaticNewline"; })(KindOfSetMode || (KindOfSetMode = {})); export var KindOfResetMode; (function (KindOfResetMode) { KindOfResetMode[KindOfResetMode["KeyboardActionMode"] = 2] = "KeyboardActionMode"; KindOfResetMode[KindOfResetMode["ReplaceMode"] = 4] = "ReplaceMode"; KindOfResetMode[KindOfResetMode["SendReceive"] = 12] = "SendReceive"; KindOfResetMode[KindOfResetMode["NormalNewline"] = 20] = "NormalNewline"; })(KindOfResetMode || (KindOfResetMode = {})); export var KindOfCharacterAttributes; (function (KindOfCharacterAttributes) { KindOfCharacterAttributes[KindOfCharacterAttributes["Normal"] = 0] = "Normal"; KindOfCharacterAttributes[KindOfCharacterAttributes["Bold"] = 1] = "Bold"; KindOfCharacterAttributes[KindOfCharacterAttributes["Faint"] = 2] = "Faint"; KindOfCharacterAttributes[KindOfCharacterAttributes["Italicized"] = 3] = "Italicized"; KindOfCharacterAttributes[KindOfCharacterAttributes["Underlined"] = 4] = "Underlined"; KindOfCharacterAttributes[KindOfCharacterAttributes["Blink"] = 5] = "Blink"; KindOfCharacterAttributes[KindOfCharacterAttributes["Inverse"] = 7] = "Inverse"; KindOfCharacterAttributes[KindOfCharacterAttributes["Invisible"] = 8] = "Invisible"; KindOfCharacterAttributes[KindOfCharacterAttributes["CrossedOutcharacters"] = 9] = "CrossedOutcharacters"; KindOfCharacterAttributes[KindOfCharacterAttributes["DoublyUnderlined"] = 21] = "DoublyUnderlined"; KindOfCharacterAttributes[KindOfCharacterAttributes["NormalNeitherBoldNorFaint"] = 22] = "NormalNeitherBoldNorFaint"; KindOfCharacterAttributes[KindOfCharacterAttributes["Notitalicized"] = 23] = "Notitalicized"; KindOfCharacterAttributes[KindOfCharacterAttributes["Notunderlined"] = 24] = "Notunderlined"; KindOfCharacterAttributes[KindOfCharacterAttributes["Steady"] = 25] = "Steady"; KindOfCharacterAttributes[KindOfCharacterAttributes["Positive"] = 27] = "Positive"; KindOfCharacterAttributes[KindOfCharacterAttributes["Visible"] = 28] = "Visible"; KindOfCharacterAttributes[KindOfCharacterAttributes["NotcrossedOut"] = 29] = "NotcrossedOut"; KindOfCharacterAttributes[KindOfCharacterAttributes["SetforegroundcolortoBlack"] = 30] = "SetforegroundcolortoBlack"; KindOfCharacterAttributes[KindOfCharacterAttributes["SetforegroundcolortoRed"] = 31] = "SetforegroundcolortoRed"; KindOfCharacterAttributes[KindOfCharacterAttributes["SetforegroundcolortoGreen"] = 32] = "SetforegroundcolortoGreen"; KindOfCharacterAttributes[KindOfCharacterAttributes["SetforegroundcolortoYellow"] = 33] = "SetforegroundcolortoYellow"; KindOfCharacterAttributes[KindOfCharacterAttributes["SetforegroundcolortoBlue"] = 34] = "SetforegroundcolortoBlue"; KindOfCharacterAttributes[KindOfCharacterAttributes["SetforegroundcolortoMagenta"] = 35] = "SetforegroundcolortoMagenta"; KindOfCharacterAttributes[KindOfCharacterAttributes["SetforegroundcolortoCyan"] = 36] = "SetforegroundcolortoCyan"; KindOfCharacterAttributes[KindOfCharacterAttributes["SetforegroundcolortoWhite"] = 37] = "SetforegroundcolortoWhite"; KindOfCharacterAttributes[KindOfCharacterAttributes["Setforegroundcolortodefault"] = 39] = "Setforegroundcolortodefault"; KindOfCharacterAttributes[KindOfCharacterAttributes["SetbackgroundcolortoBlack"] = 40] = "SetbackgroundcolortoBlack"; KindOfCharacterAttributes[KindOfCharacterAttributes["SetbackgroundcolortoRed"] = 41] = "SetbackgroundcolortoRed"; KindOfCharacterAttributes[KindOfCharacterAttributes["SetbackgroundcolortoGreen"] = 42] = "SetbackgroundcolortoGreen"; KindOfCharacterAttributes[KindOfCharacterAttributes["SetbackgroundcolortoYellow"] = 43] = "SetbackgroundcolortoYellow"; KindOfCharacterAttributes[KindOfCharacterAttributes["SetbackgroundcolortoBlue"] = 44] = "SetbackgroundcolortoBlue"; KindOfCharacterAttributes[KindOfCharacterAttributes["SetbackgroundcolortoMagenta"] = 45] = "SetbackgroundcolortoMagenta"; KindOfCharacterAttributes[KindOfCharacterAttributes["SetbackgroundcolortoCyan"] = 46] = "SetbackgroundcolortoCyan"; KindOfCharacterAttributes[KindOfCharacterAttributes["SetbackgroundcolortoWhite"] = 47] = "SetbackgroundcolortoWhite"; KindOfCharacterAttributes[KindOfCharacterAttributes["SetbackgroundcolortoDefault"] = 49] = "SetbackgroundcolortoDefault"; })(KindOfCharacterAttributes || (KindOfCharacterAttributes = {})); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb25zLXVzaW5nLWNzaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXRlcm1pbmFsL3NyYy9saWIvZnVuY3Rpb25zLXVzaW5nLWNzaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBRWpCLE1BQU0sT0FBTyxpQkFBaUI7SUFDNUIsTUFBTSxLQUFLLEdBQUc7UUFDWixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRDs7O1NBR0s7SUFDTCxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQWE7UUFDOUIsT0FBTyxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsQ0FBQztJQUMzQixDQUFDO0lBQ0Q7c0JBQ2tCO0lBQ2xCOztnQkFFWTtJQUNaLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBYTtRQUMzQixPQUFPLEdBQUcsR0FBRyxHQUFHLEtBQUssR0FBRyxDQUFDO0lBQzNCLENBQUM7SUFDRDtzQkFDa0I7SUFDbEI7O2dCQUVZO0lBQ1osTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFhO1FBQzdCLE9BQU8sR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLENBQUM7SUFDM0IsQ0FBQztJQUNEOztnQkFFWTtJQUNaLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBYTtRQUNoQyxPQUFPLEdBQUcsR0FBRyxHQUFHLEtBQUssR0FBRyxDQUFDO0lBQzNCLENBQUM7SUFDRDs7Z0JBRVk7SUFDWixNQUFNLENBQUMsY0FBYyxDQUFDLEtBQWE7UUFDakMsT0FBTyxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsQ0FBQztJQUMzQixDQUFDO0lBQ0Q7OztTQUdLO0lBQ0wsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFhO1FBQ2pDLE9BQU8sR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLENBQUM7SUFDM0IsQ0FBQztJQUNEOzs7VUFHTTtJQUNOLE1BQU0sQ0FBQyxtQkFB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YyxDQUFBO0lBQ2QsMkVBQVMsQ0FBQTtJQUNULCtFQUFXLENBQUE7SUFDWCxtRkFBYSxDQUFBO0lBQ2IseUdBQXdCLENBQUE7SUFDeEIsa0dBQXFCLENBQUE7SUFDckIsb0hBQThCLENBQUE7SUFDOUIsNEZBQWtCLENBQUE7SUFDbEIsNEZBQWtCLENBQUE7SUFDbEIsOEVBQVcsQ0FBQTtJQUNYLGtGQUFhLENBQUE7SUFDYixnRkFBWSxDQUFBO0lBQ1osNEZBQWtCLENBQUE7SUFDbEIsb0hBQThCLENBQUE7SUFDOUIsZ0hBQTRCLENBQUE7SUFDNUIsb0hBQThCLENBQUE7SUFDOUIsc0hBQStCLENBQUE7SUFDL0Isa0hBQTZCLENBQUE7SUFDN0Isd0hBQWdDLENBQUE7SUFDaEMsa0hBQTZCLENBQUE7SUFDN0Isb0hBQThCLENBQUE7SUFDOUIsd0hBQWdDLENBQUE7SUFDaEMsb0hBQThCLENBQUE7SUFDOUIsZ0hBQTRCLENBQUE7SUFDNUIsb0hBQThCLENBQUE7SUFDOUIsc0hBQStCLENBQUE7SUFDL0Isa0hBQTZCLENBQUE7SUFDN0Isd0hBQWdDLENBQUE7SUFDaEMsa0hBQTZCLENBQUE7SUFDN0Isb0hBQThCLENBQUE7SUFDOUIsd0hBQWdDLENBQUE7QUFDbEMsQ0FBQyxFQXBDVyx5QkFBeUIsS0FBekIseUJBQXlCLFFBb0NwQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICpcbiAqIEl0IGlzIGEgQ1NJIHNlcXVlbmNlcyBnZW5lcmF0b3JcbiAqIGh0dHBzOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQveHRlcm0vY3Rsc2Vxcy9jdGxzZXFzLmh0bWwjaDItRnVuY3Rpb25zLXVzaW5nLUNTSS1fLW9yZGVyZWQtYnktdGhlLWZpbmFsLWNoYXJhY3Rlcl9zX1xuICovXG5sZXQgQ1NJID0gJ1xceDliJztcblxuZXhwb3J0IGNsYXNzIEZ1bmN0aW9uc1VzaW5nQ1NJIHtcbiAgc3RhdGljIGdldCBDU0koKSB7XG4gICAgcmV0dXJuIENTSTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgQ1NJIFBzIEAgIEluc2VydCBQcyAoQmxhbmspIENoYXJhY3RlcihzKSAoZGVmYXVsdCA9IDEpIChJQ0gpLlxuICAgKlxuICAgKiAqL1xuICBzdGF0aWMgaW5zZXJ0QmxhbmsoY291bnQ6IG51bWJlcikge1xuICAgIHJldHVybiBgJHtDU0l9JHtjb3VudH1AYDtcbiAgfVxuICAvKipcbiAgICogIENTSSBQcyBTUCBAICovXG4gIC8qKlxuICAgKiAgQ1NJIFBzIEEgIEN1cnNvciBVcCBQcyBUaW1lcyAoZGVmYXVsdCA9IDEpIChDVVUpLlxuICAgKiBcXHg5YjNBICovXG4gIHN0YXRpYyBjdXJzb3JVcChjb3VudDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGAke0NTSX0ke2NvdW50fUFgO1xuICB9XG4gIC8qKlxuICAgKiAgQ1NJIFBzIFNQIEEgKi9cbiAgLyoqXG4gICAqICBDU0kgUHMgQiAgQ3Vyc29yIERvd24gUHMgVGltZXMgKGRlZmF1bHQgPSAxKSAoQ1VEKS5cbiAgICogXFx4OWIzQiAqL1xuICBzdGF0aWMgY3Vyc29yRG93bihjb3VudDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGAke0NTSX0ke2NvdW50fUJgO1xuICB9XG4gIC8qKlxuICAgKiAgQ1NJIFBzIEMgIEN1cnNvciBGb3J3YXJkIFBzIFRpbWVzIChkZWZhdWx0ID0gMSkgKENVRikuXG4gICAqIFxceDliM0MgKi9cbiAgc3RhdGljIGN1cnNvckZvcndhcmQoY291bnQ6IG51bWJlcikge1xuICAgIHJldHVybiBgJHtDU0l9JHtjb3VudH1DYDtcbiAgfVxuICAvKipcbiAgICogIENTSSBQcyBEICBDdXJzb3IgQmFja3dhcmQgUHMgVGltZXMgKGRlZmF1bHQgPSAxKSAoQ1VCKS5cbiAgICogXFx4OWIzRCAqL1xuICBzdGF0aWMgY3Vyc29yQmFja3dhcmQoY291bnQ6IG51bWJlcikge1xuICAgIHJldHVybiBgJHtDU0l9JHtjb3VudH1EYDtcbiAgfVxuICAvKipcbiAgICogIENTSSBQcyBFICBDdXJzb3IgTmV4dCBMaW5lIFBzIFRpbWVzIChkZWZhdWx0ID0gMSkgKENOTCkuXG4gICAqIFxceDliM0VcbiAgICogKi9cbiAgc3RhdGljIGN1cnNvck5leHRMaW5lKGNvdW50OiBudW1iZXIpIHtcbiAgICByZXR1cm4gYCR7Q1NJfSR7Y291bnR9RWA7XG4gIH1cbiAgLyoqXG4gICAqICBDU0kgUHMgRiAgQ3Vyc29yIFByZWNlZGluZyBMaW5lIFBzIFRpbWVzIChkZWZhdWx0ID0gMSkgKENQTCkuXG4gICAqIFxceDliM0ZcbiAgICogICovXG4gIHN0YXRpYyBjdXJzb3JQcmVjZWRpbmdMaW5lKGNvdW50OiBudW1iZXIpIHtcbiAgICByZXR1cm4gYCR7Q1NJfSR7Y291bnR9RmA7XG4gIH1cbiAgLyoqXG4gICAqICBDU0kgUHMgRyAgQ3Vyc29yIENoYXJhY3RlciBBYnNvbHV0ZSAgW2NvbHVtbl0gKGRlZmF1bHQgPSBbcm93LDFdKSAoQ0hBKS5cbiAgICogIFxceDliOUdcbiAgICogICovXG4gIHN0YXRpYyBjdXJzb3JDb2x1bW4oY291bnQ6IG51bWJlcikge1xuICAgIHJldHVybiBgJHtDU0l9JHtjb3VudH1HYDtcbiAgfVxuICAvKipcbiAgICogIENTSSBQcyA7IFBzIEggIEN1cnNvciBQb3NpdGlvbiBbcm93O2NvbHVtbl0gKGRlZmF1bHQgPSBbMSwxXSkgKENVUCkuXG4gICAqIFxceDliMjsySFxuICAgKiAqL1xuICBzdGF0aWMgY3Vyc29yUG9zaXRpb24ocm93OiBudW1iZXIsIGNvbDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGAke0NTSX0ke3Jvd307JHtjb2x9SGA7XG4gIH1cbiAgLyoqXG4gICAqICBDU0kgUHMgSSAgQ3Vyc29yIEZvcndhcmQgVGFidWxhdGlvbiBQcyB0YWIgc3RvcHMgKGRlZmF1bHQgPSAxKSAoQ0hUKS4gKi9cbiAgLyoqXG4gICAqICBDU0kgUHMgSiAgRXJhc2UgaW4gRGlzcGxheSAoRUQpLCBWVDEwMC5cbiAgICogICAgICBQcyA9IDAgIC0+IEVyYXNlIEJlbG93IChkZWZhdWx0KS5cbiAgICogICAgICBQcyA9IDEgIC0+IEVyYXNlIEFib3ZlLlxuICAgKiAgICAgIFBzID0gMiAgLT4gRXJhc2UgQWxsLlxuICAgKiAgICAgIFBzID0gMyAgLT4gRXJhc2UgU2F2ZWQgTGluZXMgKHh0ZXJtKS5cbiAgICogXFx4OWIySlxuICAgKiAgKi9cbiAgc3RhdGljIGVyYXNlSW5EaXNwbGF5KGNhdGVnb3J5OiBLaW5kT2ZFcmFzZUluRGlzcGxheSkge1xuICAgIHJldHVybiBgJHtDU0l9JHtjYXRlZ29yeX1KYDtcbiAgfVxuXG4gIC8qKlxuICAgKiAgQ1NJID8gUHMgSlxuICAgKiAgRXJhc2UgaW4gRGlzcGxheSAoREVDU0VEKSwgVlQyMjAuXG4gICAqICAgIFBzID0gMCAgLT4gU2VsZWN0aXZlIEVyYXNlIEJlbG93IChkZWZhdWx0KS5cbiAgICogICAgUHMgPSAxICAtPiBTZWxlY3RpdmUgRXJhc2UgQWJvdmUuXG4gICAqICAgIFBzID0gMiAgLT4gU2VsZWN0aXZlIEVyYXNlIEFsbC5cbiAgICogICAgUHMgPSAzICAtPiBTZWxlY3RpdmUgRXJhc2UgU2F2ZWQgTGluZXMgKHh0ZXJtKS5cbiAgICogXFx4OWI/MkpcbiAgICogKi9cbiAgc3RhdGljIGVyYXNlU2VsZWN0aXZlVGhpbmdzSW5EaXNwbGF5KGNhdGVnb3J5OiBLaW5kT2ZFcmFzZUluRGlzcGxheSkge1xuICAgIHJldHVybiBgJHtDU0l9PyR7Y2F0ZWdvcnl9SmA7XG4gIH1cbiAgLyoqXG4gICAqICBDU0kgUHMgS1xuICAgKiAgIEVyYXNlIGluIExpbmUgKEVMKSwgVlQxMDAuXG4gICAqICAgICBQcyA9IDAgIC0+IEVyYXNlIHRvIFJpZ2h0IChkZWZhdWx0KS5cbiAgICogICAgIFBzID0gMSAgLT4gRXJhc2UgdG8gTGVmdC5cbiAgICogICAgIFBzID0gMiAgLT4gRXJhc2UgQWxsLlxuICAgKiBcXHg5Yj8xS1xuICAgKiAqL1xuICBzdGF0aWMgZXJhc2VJbkxpbmUoY2F0ZWdvcnk6IEtpbmRPZkVyYXNlSW5MaW5lKSB7XG4gICAgcmV0dXJuIGAke0NTSX0ke2NhdGVnb3J5fUtgO1xuICB9XG4gIC8qKlxuICAgKiAgQ1NJID8gUHMgS1xuICAgKiAgICBFcmFzZSBpbiBMaW5lIChERUNTRUwpLCBWVDIyMC5cbiAgICogICAgICBQcyA9IDAgIC0+IFNlbGVjdGl2ZSBFcmFzZSB0byBSaWdodCAoZGVmYXVsdCkuXG4gICAqICAgICAgUHMgPSAxICAtPiBTZWxlY3RpdmUgRXJhc2UgdG8gTGVmdC5cbiAgICogICAgICBQcyA9IDIgIC0+IFNlbGVjdGl2ZSBFcmFzZSBBbGwuXG4gICAqIFxceDliPzFLXG4gICAqICovXG4gIHN0YXRpYyBlcmFzZVNlbGVjdGl2ZVRoaW5nc0luTGluZShjYXRlZ29yeTogS2luZE9mRXJhc2VJbkxpbmUpIHtcbiAgICByZXR1cm4gYCR7Q1NJfT8ke2NhdGVnb3J5fUtgO1xuICB9XG4gIC8qKlxuICAgKiAgQ1NJIFBzIEwgIEluc2VydCBQcyBMaW5lKHMpIChkZWZhdWx0ID0gMSkgKElMKS5cbiAgICogXFx4OWIyTFxuICAgKiAgKi9cbiAgc3RhdGljIGluc2VydExpbmVzKGNvdW50OiBudW1iZXIpIHtcbiAgICByZXR1cm4gYCR7Q1NJfSR7Y291bnR9TGA7XG4gIH1cbiAgLyoqXG4gICAqICBDU0kgUHMgTSAgRGVsZXRlIFBzIExpbmUocykgKGRlZmF1bHQgPSAxKSAoREwpLlxuICAgKiBcXHg5YjJNXG4gICAqICAqL1xuICBzdGF0aWMgZGVsZXRlTGluZXMoY291bnQ6IG51bWJlcikge1xuICAgIHJldHVybiBgJHtDU0l9JHtjb3VudH1NYDtcbiAgfVxuICAvKipcbiAgICogIENTSSBQcyBQICBEZWxldGUgUHMgQ2hhcmFjdGVyKHMpIChkZWZhdWx0ID0gMSkgKERDSCkuXG4gICAqIFxceDliMlBcbiAgICogICovXG4gIHN0YXRpYyBkZWxldGVDaGFyYWN0ZXIoY291bnQ6IG51bWJlcikge1xuICAgIHJldHVybiBgJHtDU0l9JHtjb3VudH1QYDtcbiAgfVxuICAvKipcbiAgICogIENTSSBQcyBTICBTY3JvbGwgdXAgUHMgbGluZXMgKGRlZmF1bHQgPSAxKSAoU1UpLCBWVDQyMCwgRUNNQS00OC5cbiAgICogXFx4OWIyU1xuICAgKiAgKi9cbiAgc3RhdGljIHNjcm9sbFVwTGluZXMoY291bnQ6IG51bWJlcikge1xuICAgIHJldHVybiBgJHtDU0l9JHtjb3VudH1TYDtcbiAgfVxuICAvKipcbiAgICogIENTSSA/IFBpIDsgUGEgOyBQdiBTICovXG4gIC8qKlxuICAgKiAgQ1NJIFBzIFQgIFNjcm9sbCBkb3duIFBzIGxpbmVzIChkZWZhdWx0ID0gMSkgKFNEKSwgVlQ0MjAuXG4gICAqIFxceDliMlRcbiAgICogKi9cbiAgc3RhdGljIHNjcm9sbERvd25MaW5lcyhjb3VudDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGAke0NTSX0ke2NvdW50fVRgO1xuICB9XG4gIC8qKlxuICAgKiAgQ1NJIFBzIDsgUHMgOyBQcyA7IFBzIDsgUHMgVCAqL1xuICAvKipcbiAgICogIENTSSA+IFBzIDsgUHMgVCAqL1xuICAvKipcbiAgICogIENTSSBQcyBYICBFcmFzZSBQcyBDaGFyYWN0ZXIocykgKGRlZmF1bHQgPSAxKSAoRUNIKS5cbiAgICogXFx4OWIyWFxuICAgKiAgKi9cbiAgc3RhdGljIGVyYXNlQ2hhcmFjdGVycyhjb3VudDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGAke0NTSX0ke2NvdW50fVhgO1xuICB9XG4gIC8qKlxuICAgKiAgQ1NJIFBzIFogIEN1cnNvciBCYWNrd2FyZCBUYWJ1bGF0aW9uIFBzIHRhYiBzdG9wcyAoZGVmYXVsdCA9IDEpIChDQlQpLlxuICAgKiBcXHg5YjJaXG4gICAqICovXG4gIHN0YXRpYyBjdXJzb3JCYWNrd2FyZFRhYnVsYXRpb25Qc3RhYnN0b3BzKGNvdW50OiBudW1iZXIpIHtcbiAgICByZXR1cm4gYCR7Q1NJfSR7Y291bnR9WmA7XG4gIH1cbiAgLyoqXG4gICAqICBDU0kgUHMgXiAgU2Nyb2xsIGRvd24gUHMgbGluZXMgKGRlZmF1bHQgPSAxKSAoU0QpLCBFQ01BLTQ4LlxuICAgKiBcXHg5YjJeXG4gICAqICovXG4gIHN0YXRpYyBzY3JvbGxkb3duUHNsaW5lcyhjb3VudDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGAke0NTSX0ke2NvdW50fV5gO1xuICB9XG4gIC8qKlxuICAgKiAgQ1NJIFBzIGAgIENoYXJhY3RlciBQb3NpdGlvbiBBYnNvbHV0ZSAgW2NvbHVtbl0gKGRlZmF1bHQgPSBbcm93LDFdKVxuICAgKiBcXHg5YjFgICovXG4gIHN0YXRpYyBjaGFyYWN0ZXJQb3NpdGlvbkFic29sdXRlKGNvdW50OiBudW1iZXIpIHtcbiAgICByZXR1cm4gYCR7Q1NJfSR7Y291bnR9XFxgYDtcbiAgfVxuICAvKipcbiAgICogIENTSSBQcyBhICBDaGFyYWN0ZXIgUG9zaXRpb24gUmVsYXRpdmUgIFtjb2x1bW5zXSAoZGVmYXVsdCA9IFtyb3csY29sKzFdKVxuICAgKiBcXHg5YjFhICovXG4gIHN0YXRpYyBjaGFyYWN0ZXJQb3NpdGlvblJlbGF0aXZlKGNvdW50OiBudW1iZXIpIHtcbiAgICByZXR1cm4gYCR7Q1NJfSR7Y291bnR9YWA7XG4gIH1cbiAgLyoqXG4gICAqICBDU0kgUHMgYiAgUmVwZWF0IHRoZSBwcmVjZWRpbmcgZ3JhcGhpYyBjaGFyYWN0ZXIgUHMgdGltZXMgKFJFUCkuXG4gICAqIFxceDliMWJcbiAgICogKi9cbiAgc3RhdGljIHJlcGVhdFRoZVByZWNlZGluZ0dyYXBoaWNDaGFyYWN0ZXIoY291bnQ6IG51bWJlcikge1xuICAgIHJldHVybiBgJHtDU0l9JHtjb3VudH1iYDtcbiAgfVxuICAvKipcbiAgICogIENTSSBQbSBkICBMaW5lIFBvc2l0aW9uIEFic29sdXRlICBbcm93XSAoZGVmYXVsdCA9IFsxLGNvbHVtbl0pIChWUEEpLiBcbiAgICogXFx4OWI0ZFxuICAgKiAqL1xuICBzdGF0aWMgbGluZVBvc2l0aW9uQWJzb2x1dGUoY291bnQ6IG51bWJlcikge1xuICAgIHJldHVybiBgJHtDU0l9JHtjb3VudH1kYDtcbiAgfVxuICAvKipcbiAgICogIENTSSBQbSBlICBMaW5lIFBvc2l0aW9uIFJlbGF0aXZlICBbcm93c10gKGRlZmF1bHQgPSBbcm93KzEsY29sdW1uXSkgXG4gICAqIFxceDliMWVcbiAgICogKi9cbiAgc3RhdGljIGxpbmVQb3NpdGlvblJlbGF0aXZlKGNvdW50OiBudW1iZXIpIHtcbiAgICByZXR1cm4gYCR7Q1NJfSR7Y291bnR9ZWA7XG4gIH1cbiAgLyoqXG4gICAqICBDU0kgUHMgOyBQcyBmICBIb3Jpem9udGFsIGFuZCBWZXJ0aWNhbCBQb3NpdGlvbiBbcm93O2NvbHVtbl0gKGRlZmF1bHQgPVxuICAgKiAgICAgICBbMSwxXSkgXG4gICAqIFxceDliMzs1ZlxuICAgKiAqL1xuICBzdGF0aWMgaG9yaXpvbnRhbGFuZFZlcnRpY2FsUG9zaXRpb24ocm93OiBudW1iZXIsIGNvbHVtbjogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGAke0NTSX0ke3Jvd307JHtjb2x1bW59ZmA7XG4gIH1cblxuICAvKipcbiAgICogIENTSSBQcyBnICBUYWIgQ2xlYXIgKFRCQykuIFxuICAgKiBcXHg5YjNnXG4gICAqICovXG4gIC8qKlxuICAgKiAgQ1NJIFBtIGggIFNldCBNb2RlIChTTSkuXG4gICAqICBcXHg5YjRoXG4gICAqICAqL1xuICBzdGF0aWMgc2V0TW9kZShtb2RlOiBLaW5kT2ZTZXRNb2RlLCAuLi5hZGRpdGlvbmFsTW9kZXM6IEtpbmRPZlNldE1vZGVbXSkge1xuICAgIGNvbnN0IG1vZGVzID0gW21vZGUsIC4uLihhZGRpdGlvbmFsTW9kZXMgPz8gW10pXTtcbiAgICByZXR1cm4gYCR7Q1NJfSR7bW9kZXMuam9pbihcIjtcIil9aGA7XG4gIH1cbiAgLyoqXG4gICAqICBDU0kgPyBQbSBoICBERUMgUHJpdmF0ZSBNb2RlIFNldCAoREVDU0VUKS5cbiAgICogKi9cbiAgLyoqXG4gICAqICBDU0kgUG0gaSAgTWVkaWEgQ29weSAoTUMpLiAqL1xuICAvKipcbiAgICogIENTSSA/IFBtIGkgKi9cbiAgLyoqXG4gICAqICBDU0kgUG0gbCAgUmVzZXQgTW9kZSAoUk0pLiBcbiAgICogXFx4OWI0bFxuICAgKiAqL1xuICBzdGF0aWMgcmVzZXRNb2RlKG1vZGU6IEtpbmRPZlJlc2V0TW9kZSwgLi4uYWRkaXRpb25hbE1vZGVzOiBLaW5kT2ZSZXNldE1vZGVbXSkge1xuICAgIGNvbnN0IG1vZGVzID0gW21vZGUsIC4uLihhZGRpdGlvbmFsTW9kZXMgPz8gW10pXTtcbiAgICByZXR1cm4gYCR7Q1NJfSR7bW9kZXMuam9pbihcIjtcIil9bGA7XG4gIH1cbiAgLyoqXG4gICAqICBDU0kgPyBQbSBsICovXG4gIC8qKlxuICAgKiAgQ1NJIFBtIG0gIENoYXJhY3RlciBBdHRyaWJ1dGVzIChTR1IpLlxuICAgKiBcXHg5YjMxbVxuICAgKiAqL1xuICBzdGF0aWMgY2hhcmFjdGVyQXR0cmlidXRlcyhcbiAgICBmaXJzdEF0dHJpYnV0ZTogS2luZE9mQ2hhcmFjdGVyQXR0cmlidXRlcyxcbiAgICAuLi5hZGRpdGlvbmFsQXR0cmlidXRlczogS2luZE9mQ2hhcmFjdGVyQXR0cmlidXRlc1tdXG4gICkge1xuICAgIGNvbnN0IGNoYXJzOiBLaW5kT2ZDaGFyYWN0ZXJBdHRyaWJ1dGVzW10gPSBbXG4gICAgICBmaXJzdEF0dHJpYnV0ZSxcbiAgICAgIC4uLihhZGRpdGlvbmFsQXR0cmlidXRlcyA/PyBbXSksXG4gICAgXTtcbiAgICByZXR1cm4gYCR7Q1NJfSR7Y2hhcnMuam9pbignOycpfW1gO1xuICB9XG4gIC8qKlxuICAgKiAgQ1NJID4gUHMgOyBQcyBtICovXG4gIC8qKlxuICAgKiAgQ1NJIFBzIG4gIERldmljZSBTdGF0dXMgUmVwb3J0IChEU1IpLiAqL1xuICAvKipcbiAgICogIENTSSA+IFBzIG4gKi9cbiAgLyoqXG4gICAqICBDU0kgPyBQcyBuICovXG4gIC8qKlxuICAgKiAgQ1NJID4gUHMgcCAqL1xuICAvKipcbiAgICogIENTSSAhIHAgICBTb2Z0IHRlcm1pbmFsIHJlc2V0IChERUNTVFIpLCBWVDIyMCBhbmQgdXAuICovXG4gIC8qKlxuICAgKiAgQ1NJIFBzIDsgUHMgXCIgcCAqL1xuICAvKipcbiAgICogIENTSSBQcyAkIHAgKi9cbiAgLyoqXG4gICAqICBDU0kgPyBQcyAkIHAgKi9cbiAgLyoqXG4gICAqICBDU0kgIyBwICovXG4gIC8qKlxuICAgKiAgQ1NJIFBzIDsgUHMgIyBwICovXG4gIC8qKlxuICAgKiAgQ1NJIFBzIHEgIExvYWQgTEVEcyAoREVDTEwpLCBWVDEwMC4gKi9cbiAgLyoqXG4gICAqICBDU0kgUHMgU1AgcSAqL1xuICAvKipcbiAgICogIENTSSBQcyBcIiBxICovXG4gIC8qKlxuICAgKiAgQ1NJICMgcSAgIFBvcCB2aWRlbyBhdHRyaWJ1dGVzIGZyb20gc3RhY2sgKFhUUE9QU0dSKSwgeHRlcm0uICBUaGlzIGlzIGFuICovXG4gIC8qKlxuICAgKiAgQ1NJIFBzIDsgUHMgciAqL1xuICAvKipcbiAgICogIENTSSA/IFBtIHIgKi9cbiAgLyoqXG4gICAqICBDU0kgUHQgOyBQbCA7IFBiIDsgUHIgOyBQcyAkIHIgKi9cbiAgLyoqXG4gICAqICBDU0kgcyAgICAgU2F2ZSBjdXJzb3IsIGF2YWlsYWJsZSBvbmx5IHdoZW4gREVDTFJNTSBpcyBkaXNhYmxlZCAoU0NPU0MsICovXG4gIC8qKlxuICAgKiAgQ1NJIFBsIDsgUHIgcyAqL1xuICAvKipcbiAgICogIENTSSA/IFBtIHMgKi9cbiAgLyoqXG4gICAqICBDU0kgUHMgOyBQcyA7IFBzIHQgKi9cbiAgLyoqXG4gICAqICBDU0kgPiBQcyA7IFBzIHQgKi9cbiAgLyoqXG4gICAqICBDU0kgUHMgU1AgdCAqL1xuICAvKipcbiAgICogIENTSSBQdCA7IFBsIDsgUGIgOyBQciA7IFBzICQgdCAqL1xuICAvKipcbiAgICogIENTSSB1ICAgICBSZXN0b3JlIGN1cnNvciAoU0NPUkMsIGFsc28gQU5TSS5TWVMpLiAqL1xuICAvKipcbiAgICogIENTSSBQcyBTUCB1ICovXG4gIC8qKlxuICAgKiAgQ1NJIFB0IDsgUGwgOyBQYiA7IFByIDsgUHAgOyBQdCA7IFBsIDsgUHAgJCB2ICovXG4gIC8qKlxuICAgKiAgQ1NJIFBzICQgdyAqL1xuICAvKipcbiAgICogIENTSSBQdCA7IFBsIDsgUGIgOyBQciAnIHcgKi9cbiAgLyoqXG4gICAqICBDU0kgUHMgeCAgUmVxdWVzdCBUZXJtaW5hbCBQYXJhbWV0ZXJzIChERUNSRVFUUEFSTSkuICovXG4gIC8qKlxuICAgKiAgQ1NJIFBzICogeCAqL1xuICAvKipcbiAgICogIENTSSBQYyA7IFB0IDsgUGwgOyBQYiA7IFByICQgeCAqL1xuICAvKipcbiAgICogIENTSSBQcyAjIHkgKi9cbiAgLyoqXG4gICAqICBDU0kgUGkgOyBQZyA7IFB0IDsgUGwgOyBQYiA7IFByICogeSAqL1xuICAvKipcbiAgICogIENTSSBQcyA7IFB1ICcgeiAqL1xuICAvKipcbiAgICogIENTSSBQdCA7IFBsIDsgUGIgOyBQciAkIHogKi9cbiAgLyoqXG4gICAqICBDU0kgUG0gJyB7ICovXG4gIC8qKlxuICAgKiAgQ1NJICMgeyAqL1xuICAvKipcbiAgICogIENTSSBQcyA7IFBzICMgeyAqL1xuICAvKipcbiAgICogIENTSSBQdCA7IFBsIDsgUGIgOyBQciAkIHsgKi9cbiAgLyoqXG4gICAqICBDU0kgUHQgOyBQbCA7IFBiIDsgUHIgIyB8ICovXG4gIC8qKlxuICAgKiAgQ1NJIFBzICQgfCAqL1xuICAvKipcbiAgICogIENTSSBQcyAnIHwgKi9cbiAgLyoqXG4gICAqICBDU0kgUHMgKiB8ICovXG4gIC8qKlxuICAgKiAgQ1NJICMgfSAgIFBvcCB2aWRlbyBhdHRyaWJ1dGVzIGZyb20gc3RhY2sgKFhUUE9QU0dSKSwgeHRlcm0uICBQb3BwaW5nICovXG4gIC8qKlxuICAgKiAgQ1NJIFBtICcgfSAqL1xuICAvKipcbiAgICogIENTSSBQbSAnIH4gKi9cbn1cbmV4cG9ydCBlbnVtIEtpbmRPZkVyYXNlSW5EaXNwbGF5IHtcbiAgQmVsb3cgPSAwLFxuICBBYm92ZSA9IDEsXG4gIEFsbCA9IDIsXG4gIFNhdmVkTGluZXMgPSAzLFxufVxuZXhwb3J0IGVudW0gS2luZE9mRXJhc2VJbkxpbmUge1xuICBSaWdodCA9IDAsXG4gIExlZnQgPSAxLFxuICBBbGwgPSAyLFxufVxuXG5leHBvcnQgZW51bSBLaW5kT2ZUYWJDbGVhcntcbiAgICBDbGVhckN1cnJlbnRDb2x1bW4gPSAwLFxuICAgIENsZWFyQWxsID0gM1xufVxuXG5cbmV4cG9ydCBlbnVtIEtpbmRPZlNldE1vZGV7XG4gICAgS2V5Ym9hcmRBY3Rpb25Nb2RlID0gMixcbiAgICBJbnNlcnRNb2RlID0gNCxcbiAgICBTZW5kUmVjZWl2ZSA9IDEyLFxuICAgIEF1dG9tYXRpY05ld2xpbmUgPSAyMFxufVxuZXhwb3J0IGVudW0gS2luZE9mUmVzZXRNb2Rle1xuICAgIEtleWJvYXJkQWN0aW9uTW9kZSA9IDIsXG4gICAgUmVwbGFjZU1vZGUgPSA0LFxuICAgIFNlbmRSZWNlaXZlID0gMTIsXG4gICAgTm9ybWFsTmV3bGluZSA9IDIwXG59XG5leHBvcnQgZW51bSBLaW5kT2ZDaGFyYWN0ZXJBdHRyaWJ1dGVzIHtcbiAgTm9ybWFsID0gMCxcbiAgQm9sZCA9IDEsXG4gIEZhaW50ID0gMixcbiAgSXRhbGljaXplZCA9IDMsXG4gIFVuZGVybGluZWQgPSA0LFxuICBCbGluayA9IDUsXG4gIEludmVyc2UgPSA3LFxuICBJbnZpc2libGUgPSA4LFxuICBDcm9zc2VkT3V0Y2hhcmFjdGVycyA9IDksXG4gIERvdWJseVVuZGVybGluZWQgPSAyMSxcbiAgTm9ybWFsTmVpdGhlckJvbGROb3JGYWludCA9IDIyLFxuICBOb3RpdGFsaWNpemVkID0gMjMsXG4gIE5vdHVuZGVybGluZWQgPSAyNCxcbiAgU3RlYWR5ID0gMjUsXG4gIFBvc2l0aXZlID0gMjcsXG4gIFZpc2libGUgPSAyOCxcbiAgTm90Y3Jvc3NlZE91dCA9IDI5LFxuICBTZXRmb3JlZ3JvdW5kY29sb3J0b0JsYWNrID0gMzAsXG4gIFNldGZvcmVncm91bmRjb2xvcnRvUmVkID0gMzEsXG4gIFNldGZvcmVncm91bmRjb2xvcnRvR3JlZW4gPSAzMixcbiAgU2V0Zm9yZWdyb3VuZGNvbG9ydG9ZZWxsb3cgPSAzMyxcbiAgU2V0Zm9yZWdyb3VuZGNvbG9ydG9CbHVlID0gMzQsXG4gIFNldGZvcmVncm91bmRjb2xvcnRvTWFnZW50YSA9IDM1LFxuICBTZXRmb3JlZ3JvdW5kY29sb3J0b0N5YW4gPSAzNixcbiAgU2V0Zm9yZWdyb3VuZGNvbG9ydG9XaGl0ZSA9IDM3LFxuICBTZXRmb3JlZ3JvdW5kY29sb3J0b2RlZmF1bHQgPSAzOSxcbiAgU2V0YmFja2dyb3VuZGNvbG9ydG9CbGFjayA9IDQwLFxuICBTZXRiYWNrZ3JvdW5kY29sb3J0b1JlZCA9IDQxLFxuICBTZXRiYWNrZ3JvdW5kY29sb3J0b0dyZWVuID0gNDIsXG4gIFNldGJhY2tncm91bmRjb2xvcnRvWWVsbG93ID0gNDMsXG4gIFNldGJhY2tncm91bmRjb2xvcnRvQmx1ZSA9IDQ0LFxuICBTZXRiYWNrZ3JvdW5kY29sb3J0b01hZ2VudGEgPSA0NSxcbiAgU2V0YmFja2dyb3VuZGNvbG9ydG9DeWFuID0gNDYsXG4gIFNldGJhY2tncm91bmRjb2xvcnRvV2hpdGUgPSA0NyxcbiAgU2V0YmFja2dyb3VuZGNvbG9ydG9EZWZhdWx0ID0gNDksXG59XG4iXX0=