UNPKG

@broadcom/endevor-for-zowe-cli

Version:

Endevor Plug-in for Zowe CLI

246 lines 27.4 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.AbstractWorkspaceActionHandler = void 0; const imperative_1 = require("@zowe/imperative"); const api_1 = require("../../api"); const MergeUtils_1 = require("../../api/workspace/MergeUtils"); const HandlerUtils_1 = require("./HandlerUtils"); class AbstractWorkspaceActionHandler { process(commandParameters) { return __awaiter(this, void 0, void 0, function* () { var _a, _b, _c, _d; this.args = commandParameters.arguments; this.commandConsole = commandParameters.response.console; this.progressApi = commandParameters.response.progress; this.actionName = this.args._[1].trim().toUpperCase(); if (this.actionName.startsWith("SYNC") || this.actionName.startsWith("UNSYNC") || this.actionName.startsWith("MERGE")) { this.instance = api_1.EndevorRestUtils.setInstance(this.args); this.session = yield api_1.EndevorRestUtils.setupEndevorSession(this.args, true); api_1.EndevorRestUtils.failIfUsingV1(this.session); const suppressMessages = this.args["suppress-messages"] != null && this.args["suppress-messages"]; if (!HandlerUtils_1.HandlerUtils.validateBasePath(this.session, this.commandConsole, this.instance, suppressMessages)) { commandParameters.response.data.setExitCode(8); return; } if (api_1.EndevorRestUtils.isThisV1(this.session)) { throw new imperative_1.ImperativeError({ msg: "[ERROR] " + this.actionName + " action is not supported when using version 1 of Endevor REST API" }); } if (this.args["suppress-messages"] == null || !this.args["suppress-messages"]) { commandParameters.response.console.log(HandlerUtils_1.HandlerUtils.getSessionNotification(this.session, this.instance)); if (this.actionName.startsWith("MERGE")) { if (this.args["merge-out-of-sync"]) { commandParameters.response.console.log(`[INFO] MERGE out of sync elements executed in location: ${this.args.environment}/${this.args["stage-number"]}/${this.args.system}/${this.args.subsystem} on element: ${this.args.element}.${this.args.type}`); } else { const fromLocation = { environment: (_a = this.args["merge-environment"]) !== null && _a !== void 0 ? _a : this.args.environment, stageNumber: (_b = this.args["merge-stage-number"]) !== null && _b !== void 0 ? _b : this.args["stage-number"], system: (_c = this.args["merge-system"]) !== null && _c !== void 0 ? _c : this.args.system, subsystem: (_d = this.args["merge-subsystem"]) !== null && _d !== void 0 ? _d : this.args.subsystem, type: this.args.type, element: this.args.element }; commandParameters.response.console.log(`[INFO] MERGE executed from location: ${fromLocation.environment}/${fromLocation.stageNumber}/${fromLocation.system}/${fromLocation.subsystem} to location: ${this.args.environment}/${this.args["stage-number"]}/${this.args.system}/${this.args.subsystem} on element: ${this.args.element}.${this.args.type}`); } } else { commandParameters.response.console.log(`[INFO] ${this.actionName} executed in location: ${this.args.environment}/${this.args["stage-number"]}/${this.args.system}/${this.args.subsystem} on element: ${this.args.element}.${this.args.type}`); } } } else { if (this.args["suppress-messages"] == null || !this.args["suppress-messages"]) { if (this.actionName.startsWith("CONFIRM")) { commandParameters.response.console.log(`[INFO] CONFIRM conflict resolution executed for ${this.args["workspace-file"]}`); } else { commandParameters.response.console.log(`[INFO] ${this.actionName} workspace executed`); } } } const response = yield this.sendRequest(); commandParameters.response.data.setObj(response); if (this.args["response-format-json"] != true) { this.handleResponse(response); } }); } handleResponse(response) { if (this.actionName != undefined && (this.actionName.startsWith("SYNC") || this.actionName.startsWith("MERGE"))) { this.printActionsReport(response); } for (const message of response.errorMessages) { this.commandConsole.log("[ERROR] " + message); } for (const message of response.warningMessages) { this.commandConsole.log("[WARN] " + message); } for (const message of response.infoMessages) { this.commandConsole.log("[INFO] " + message); } if (response.unresolvedMergeConflicts) { this.commandConsole.log("[INFO] Conflicts have been found and need to be manually resolved before Endevor can be updated. Local files have been updated with conflict annotation."); this.commandConsole.log("[INFO] Edit the files to resolve the conflicts, then use the following commands to confirm each conflict is resolved:"); this.commandConsole.log(" "); response.actions.forEach((action) => { if (action.statusDetailed == api_1.EndevorActionStatusDetailed.NOT_RUN_MANUAL_MERGE_IN_PROGRESS || action.statusDetailed == api_1.EndevorActionStatusDetailed.SUCCESS_MANUAL_MERGE_STARTED) this.commandConsole.log(" " + MergeUtils_1.MergeUtils.getMergeCommand(action.localFile)); }); this.commandConsole.log(" "); } } printActionsReport(response) { if (response.actions.length == 0) { return ""; } response.actions.forEach((action) => { if (action.action == api_1.EndevorActionType.LOCAL_DELETE) this.printSingleElementAction(action); }); response.actions.forEach((action) => { if (action.action == api_1.EndevorActionType.RENAME) this.printSingleElementAction(action); }); response.actions.forEach((action) => { if (action.action == api_1.EndevorActionType.RETRIEVE) this.printSingleElementAction(action); }); response.actions.forEach((action) => { if (action.action == api_1.EndevorActionType.CONFLICT) this.printSingleElementAction(action); }); response.actions.forEach((action) => { if (action.action == api_1.EndevorActionType.VALIDATE_SYNC) this.printSingleElementAction(action); }); response.actions.forEach((action) => { if (action.action == api_1.EndevorActionType.MERGE) this.printSingleElementAction(action); }); response.actions.forEach((action) => { if (action.action == api_1.EndevorActionType.ADD) this.printSingleElementAction(action); }); response.actions.forEach((action) => { if (action.action == api_1.EndevorActionType.UPDATE || action.action == api_1.EndevorActionType.UPDATE_WITH_SYNC) this.printSingleElementAction(action); }); response.actions.forEach((action) => { if (action.action == api_1.EndevorActionType.REMOTE_DELETE) this.printSingleElementAction(action); }); this.commandConsole.log("Messages:"); return ""; } printSingleElementAction(action) { let statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_RED; let statusExplanation = ""; switch (action.statusDetailed) { case api_1.EndevorActionStatusDetailed.NOT_RUN: statusExplanation = "not executed"; statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_YELLOW; break; case api_1.EndevorActionStatusDetailed.NOT_RUN_CCID_REQUIRED: statusExplanation = "not executed - CCID required"; statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_YELLOW; break; case api_1.EndevorActionStatusDetailed.NOT_RUN_COMMENT_REQUIRED: statusExplanation = "not executed - comment required"; statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_YELLOW; break; case api_1.EndevorActionStatusDetailed.NOT_RUN_CCID_COMMENT_REQUIRED: statusExplanation = "not executed - CCID & comment required"; statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_YELLOW; break; case api_1.EndevorActionStatusDetailed.NOT_RUN_MANUAL_MERGE_IN_PROGRESS: statusExplanation = "manual conflict resolution in progress"; statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_BLUE; break; case api_1.EndevorActionStatusDetailed.FAILURE: statusExplanation = "failed"; statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_RED; break; case api_1.EndevorActionStatusDetailed.FAILURE_FINGERPRINT_MISMATCH: statusExplanation = "failed - element change (fingerprint mismatch) during sync, re-enter the sync command"; statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_RED; break; case api_1.EndevorActionStatusDetailed.FAILURE_NOT_FOUND: statusExplanation = "failed - element change (not found) during sync, re-enter the sync command"; statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_RED; break; case api_1.EndevorActionStatusDetailed.FAILURE_STC_SHORTAGE: statusExplanation = "failed - server out of STC resources, retry"; statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_RED; break; case api_1.EndevorActionStatusDetailed.FAILURE_MAX_RC: statusExplanation = "failed - max RC exceeded"; statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_RED; break; case api_1.EndevorActionStatusDetailed.FAILURE_SIGNOUT: statusExplanation = "failed - signout failed"; statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_RED; break; case api_1.EndevorActionStatusDetailed.FAILURE_MERGE_LOCATION_INVALID: statusExplanation = "failed - invalid merge location specified"; statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_RED; break; case api_1.EndevorActionStatusDetailed.WARNING: statusExplanation = "successful with warning(s)"; statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_YELLOW; break; case api_1.EndevorActionStatusDetailed.SUCCESS: statusExplanation = "successful"; statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_GREEN; break; case api_1.EndevorActionStatusDetailed.SUCCESS_NO_CHANGE: statusExplanation = "successful - no changes detected"; statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_GREEN; break; case api_1.EndevorActionStatusDetailed.SUCCESS_AUTOMERGED: statusExplanation = "auto-merge successful"; statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_GREEN; break; case api_1.EndevorActionStatusDetailed.SUCCESS_MANUAL_MERGE_STARTED: statusExplanation = "manual conflict resolution started"; statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_BLUE; break; case api_1.EndevorActionStatusDetailed.SUCCESS_IN_SYNC: statusExplanation = "successful - element is already in sync"; statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_GREEN; break; case api_1.EndevorActionStatusDetailed.SUCCESS_OUT_OF_SYNC: statusExplanation = "successful - element is out of sync"; statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_GREEN; break; case api_1.EndevorActionStatusDetailed.SUCCESS_SYNC_DISABLED: statusExplanation = "successful, but sync in place is disabled in Endevor"; statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_YELLOW; break; default: api_1.EndevorUtils.failCompile(action.statusDetailed); } this.commandConsole.log(`${statusColor}${action.actionName} ${statusExplanation}${HandlerUtils_1.HandlerUtils.ANSI_COLOR_RESET}:`); this.commandConsole.log(` element: ${action.fullElementName}`); this.commandConsole.log(` type: ${action.type}`); this.commandConsole.log(` file: ${action.localFile}`); action.errorMessages.forEach((error) => { this.commandConsole.log(` ${error}`); }); } } exports.AbstractWorkspaceActionHandler = AbstractWorkspaceActionHandler; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RXb3Jrc3BhY2VBY3Rpb24uaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbGkvdXRpbHMvQWJzdHJhY3RXb3Jrc3BhY2VBY3Rpb24uaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUF1QkEsaURBUTBCO0FBQzFCLG1DQVVtQjtBQUNuQiwrREFBNEQ7QUFDNUQsaURBQThDO0FBRTlDLE1BQXNCLDhCQUE4QjtJQVFyQyxPQUFPLENBQUMsaUJBQXFDOzs7WUFDeEQsSUFBSSxDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxTQUFTLENBQUM7WUFDeEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO1lBQ3pELElBQUksQ0FBQyxXQUFXLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUN2RCxJQUFJLENBQUMsVUFBVSxHQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBWSxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2xFLElBQ0UsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUNuQyxDQUFDO2dCQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsc0JBQWdCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUEwQixDQUFDLENBQUM7Z0JBQzlFLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxzQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBeUIsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDaEcsc0JBQWdCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDN0MsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztnQkFDbEcsSUFBSSxDQUFDLDJCQUFZLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO29CQUN2RyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDL0MsT0FBTztnQkFDVCxDQUFDO2dCQUVELElBQUksc0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUM1QyxNQUFNLElBQUksNEJBQWUsQ0FBQzt3QkFDeEIsR0FBRyxFQUFFLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLG1FQUFtRTtxQkFDeEcsQ0FBQyxDQUFDO2dCQUNMLENBQUM7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUM7b0JBQzlFLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUFZLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztvQkFFekcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO3dCQUN4QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDOzRCQUNuQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FDcEMsMkRBQTJELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLGdCQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUM5TSxDQUFDO3dCQUNKLENBQUM7NkJBQU0sQ0FBQzs0QkFFTixNQUFNLFlBQVksR0FBc0I7Z0NBQ3RDLFdBQVcsRUFBRSxNQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsbUNBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXO2dDQUNwRSxXQUFXLEVBQUUsTUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLG1DQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO2dDQUN6RSxNQUFNLEVBQUUsTUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxtQ0FBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07Z0NBQ3JELFNBQVMsRUFBRSxNQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsbUNBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTO2dDQUM5RCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJO2dDQUNwQixPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPOzZCQUMzQixDQUFDOzRCQUNGLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUNwQyx3Q0FBd0MsWUFBWSxDQUFDLFdBQVcsSUFBSSxZQUFZLENBQUMsV0FBVyxJQUFJLFlBQVksQ0FBQyxNQUFNLElBQUksWUFBWSxDQUFDLFNBQVMsaUJBQWlCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLGdCQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUNqVCxDQUFDO3dCQUNKLENBQUM7b0JBQ0gsQ0FBQzt5QkFFSSxDQUFDO3dCQUNKLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUNwQyxVQUFVLElBQUksQ0FBQyxVQUFVLDBCQUEwQixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxnQkFBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FDdE0sQ0FBQztvQkFDSixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUM7b0JBQzlFLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQzt3QkFDMUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQ3BDLG1EQUFtRCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FDakYsQ0FBQztvQkFDSixDQUFDO3lCQUFNLENBQUM7d0JBQ04saUJBQWlCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLENBQUMsVUFBVSxxQkFBcUIsQ0FBQyxDQUFDO29CQUN6RixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1lBRUQsTUFBTSxRQUFRLEdBQTZCLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3BFLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2pELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUM5QyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2hDLENBQUM7UUFDSCxDQUFDO0tBQUE7SUFFTSxjQUFjLENBQUMsUUFBa0M7UUFDdEQsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNoSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUNELEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzdDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBQ0QsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDL0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFDRCxLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUNELElBQUksUUFBUSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQ3JCLDBKQUEwSixDQUMzSixDQUFDO1lBQ0YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQ3JCLHVIQUF1SCxDQUN4SCxDQUFDO1lBQ0YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDN0IsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDbEMsSUFDRSxNQUFNLENBQUMsY0FBYyxJQUFJLGlDQUEyQixDQUFDLGdDQUFnQztvQkFDckYsTUFBTSxDQUFDLGNBQWMsSUFBSSxpQ0FBMkIsQ0FBQyw0QkFBNEI7b0JBRWpGLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyx1QkFBVSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUNqRixDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBTU8sa0JBQWtCLENBQUMsUUFBa0M7UUFDM0QsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFDRCxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ2xDLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSx1QkFBaUIsQ0FBQyxZQUFZO2dCQUFFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3RixDQUFDLENBQUMsQ0FBQztRQUNILFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDbEMsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLHVCQUFpQixDQUFDLE1BQU07Z0JBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZGLENBQUMsQ0FBQyxDQUFDO1FBQ0gsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNsQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksdUJBQWlCLENBQUMsUUFBUTtnQkFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekYsQ0FBQyxDQUFDLENBQUM7UUFDSCxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ2xDLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSx1QkFBaUIsQ0FBQyxRQUFRO2dCQUFFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6RixDQUFDLENBQUMsQ0FBQztRQUNILFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDbEMsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLHVCQUFpQixDQUFDLGFBQWE7Z0JBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlGLENBQUMsQ0FBQyxDQUFDO1FBQ0gsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNsQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksdUJBQWlCLENBQUMsS0FBSztnQkFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEYsQ0FBQyxDQUFDLENBQUM7UUFDSCxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ2xDLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSx1QkFBaUIsQ0FBQyxHQUFHO2dCQUFFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwRixDQUFDLENBQUMsQ0FBQztRQUNILFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDbEMsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLHVCQUFpQixDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLHVCQUFpQixDQUFDLGdCQUFnQjtnQkFDbEcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNsQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksdUJBQWlCLENBQUMsYUFBYTtnQkFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUYsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNyQyxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFNTyx3QkFBd0IsQ0FBQyxNQUE0QjtRQUMzRCxJQUFJLFdBQVcsR0FBRywyQkFBWSxDQUFDLGNBQWMsQ0FBQztRQUM5QyxJQUFJLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUMzQixRQUFRLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUM5QixLQUFLLGlDQUEyQixDQUFDLE9BQU87Z0JBQ3RDLGlCQUFpQixHQUFHLGNBQWMsQ0FBQztnQkFDbkMsV0FBVyxHQUFHLDJCQUFZLENBQUMsaUJBQWlCLENBQUM7Z0JBQzdDLE1BQU07WUFDUixLQUFLLGlDQUEyQixDQUFDLHFCQUFxQjtnQkFDcEQsaUJBQWlCLEdBQUcsOEJBQThCLENBQUM7Z0JBQ25ELFdBQVcsR0FBRywyQkFBWSxDQUFDLGlCQUFpQixDQUFDO2dCQUM3QyxNQUFNO1lBQ1IsS0FBSyxpQ0FBMkIsQ0FBQyx3QkFBd0I7Z0JBQ3ZELGlCQUFpQixHQUFHLGlDQUFpQyxDQUFDO2dCQUN0RCxXQUFXLEdBQUcsMkJBQVksQ0FBQyxpQkFBaUIsQ0FBQztnQkFDN0MsTUFBTTtZQUNSLEtBQUssaUNBQTJCLENBQUMsNkJBQTZCO2dCQUM1RCxpQkFBaUIsR0FBRyx3Q0FBd0MsQ0FBQztnQkFDN0QsV0FBVyxHQUFHLDJCQUFZLENBQUMsaUJBQWlCLENBQUM7Z0JBQzdDLE1BQU07WUFDUixLQUFLLGlDQUEyQixDQUFDLGdDQUFnQztnQkFDL0QsaUJBQWlCLEdBQUcsd0NBQXdDLENBQUM7Z0JBQzdELFdBQVcsR0FBRywyQkFBWSxDQUFDLGVBQWUsQ0FBQztnQkFDM0MsTUFBTTtZQUNSLEtBQUssaUNBQTJCLENBQUMsT0FBTztnQkFDdEMsaUJBQWlCLEdBQUcsUUFBUSxDQUFDO2dCQUM3QixXQUFXLEdBQUcsMkJBQVksQ0FBQyxjQUFjLENBQUM7Z0JBQzFDLE1BQU07WUFDUixLQUFLLGlDQUEyQixDQUFDLDRCQUE0QjtnQkFDM0QsaUJBQWlCLEdBQUcsdUZBQXVGLENBQUM7Z0JBQzVHLFdBQVcsR0FBRywyQkFBWSxDQUFDLGNBQWMsQ0FBQztnQkFDMUMsTUFBTTtZQUNSLEtBQUssaUNBQTJCLENBQUMsaUJBQWlCO2dCQUNoRCxpQkFBaUIsR0FBRyw0RUFBNEUsQ0FBQztnQkFDakcsV0FBVyxHQUFHLDJCQUFZLENBQUMsY0FBYyxDQUFDO2dCQUMxQyxNQUFNO1lBQ1IsS0FBSyxpQ0FBMkIsQ0FBQyxvQkFBb0I7Z0JBQ25ELGlCQUFpQixHQUFHLDZDQUE2QyxDQUFDO2dCQUNsRSxXQUFXLEdBQUcsMkJBQVksQ0FBQyxjQUFjLENBQUM7Z0JBQzFDLE1BQU07WUFDUixLQUFLLGlDQUEyQixDQUFDLGNBQWM7Z0JBQzdDLGlCQUFpQixHQUFHLDBCQUEwQixDQUFDO2dCQUMvQyxXQUFXLEdBQUcsMkJBQVksQ0FBQyxjQUFjLENBQUM7Z0JBQzFDLE1BQU07WUFDUixLQUFLLGlDQUEyQixDQUFDLGVBQWU7Z0JBQzlDLGlCQUFpQixHQUFHLHlCQUF5QixDQUFDO2dCQUM5QyxXQUFXLEdBQUcsMkJBQVksQ0FBQyxjQUFjLENBQUM7Z0JBQzFDLE1BQU07WUFDUixLQUFLLGlDQUEyQixDQUFDLDhCQUE4QjtnQkFDN0QsaUJBQWlCLEdBQUcsMkNBQTJDLENBQUM7Z0JBQ2hFLFdBQVcsR0FBRywyQkFBWSxDQUFDLGNBQWMsQ0FBQztnQkFDMUMsTUFBTTtZQUNSLEtBQUssaUNBQTJCLENBQUMsT0FBTztnQkFDdEMsaUJBQWlCLEdBQUcsNEJBQTRCLENBQUM7Z0JBQ2pELFdBQVcsR0FBRywyQkFBWSxDQUFDLGlCQUFpQixDQUFDO2dCQUM3QyxNQUFNO1lBQ1IsS0FBSyxpQ0FBMkIsQ0FBQyxPQUFPO2dCQUN0QyxpQkFBaUIsR0FBRyxZQUFZLENBQUM7Z0JBQ2pDLFdBQVcsR0FBRywyQkFBWSxDQUFDLGdCQUFnQixDQUFDO2dCQUM1QyxNQUFNO1lBQ1IsS0FBSyxpQ0FBMkIsQ0FBQyxpQkFBaUI7Z0JBQ2hELGlCQUFpQixHQUFHLGtDQUFrQyxDQUFDO2dCQUN2RCxXQUFXLEdBQUcsMkJBQVksQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDNUMsTUFBTTtZQUNSLEtBQUssaUNBQTJCLENBQUMsa0JBQWtCO2dCQUNqRCxpQkFBaUIsR0FBRyx1QkFBdUIsQ0FBQztnQkFDNUMsV0FBVyxHQUFHLDJCQUFZLENBQUMsZ0JBQWdCLENBQUM7Z0JBQzVDLE1BQU07WUFDUixLQUFLLGlDQUEyQixDQUFDLDRCQUE0QjtnQkFDM0QsaUJBQWlCLEdBQUcsb0NBQW9DLENBQUM7Z0JBQ3pELFdBQVcsR0FBRywyQkFBWSxDQUFDLGVBQWUsQ0FBQztnQkFDM0MsTUFBTTtZQUNSLEtBQUssaUNBQTJCLENBQUMsZUFBZTtnQkFDOUMsaUJBQWlCLEdBQUcseUNBQXlDLENBQUM7Z0JBQzlELFdBQVcsR0FBRywyQkFBWSxDQUFDLGdCQUFnQixDQUFDO2dCQUM1QyxNQUFNO1lBQ1IsS0FBSyxpQ0FBMkIsQ0FBQyxtQkFBbUI7Z0JBQ2xELGlCQUFpQixHQUFHLHFDQUFxQyxDQUFDO2dCQUMxRCxXQUFXLEdBQUcsMkJBQVksQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDNUMsTUFBTTtZQUNSLEtBQUssaUNBQTJCLENBQUMscUJBQXFCO2dCQUNwRCxpQkFBaUIsR0FBRyxzREFBc0QsQ0FBQztnQkFDM0UsV0FBVyxHQUFHLDJCQUFZLENBQUMsaUJBQWlCLENBQUM7Z0JBQzdDLE1BQU07WUFDUjtnQkFDRSxrQkFBWSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDcEQsQ0FBQztRQUNELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsV0FBVyxHQUFHLE1BQU0sQ0FBQyxVQUFVLElBQUksaUJBQWlCLEdBQUcsMkJBQVksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7UUFDcEgsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsY0FBYyxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxXQUFXLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFdBQVcsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDdkQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBR0Y7QUE5UEQsd0VBOFBDIn0=