UNPKG

@wikipathways/cxml

Version:

Advanced schema-aware streaming XML parser

120 lines 14.8 kB
"use strict"; // This file is part of cxml, copyright (c) 2016 BusFaster Ltd. // Released under the MIT license, see LICENSE. var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); Object.defineProperty(exports, "__esModule", { value: true }); var Namespace_1 = require("./Namespace"); var TypeSpec_1 = require("./TypeSpec"); var MemberSpec_1 = require("./MemberSpec"); var Item_1 = require("../xml/Item"); var ContextBase_1 = require("./ContextBase"); /** XML parser context, holding definitions of all imported namespaces. */ var Context = /** @class */ (function (_super) { __extends(Context, _super); function Context() { var _this = _super.call(this, Namespace_1.Namespace) || this; /** List of pending namespaces (not yet registered or waiting for processing). */ _this.pendingNamespaceList = []; /** Grows with pendingNamespaceList and shrinks when namespaces are registered. * When zero, all pending namespaces have been registered and can be processed. */ _this.pendingNamespaceCount = 0; _this.pendingTypeList = []; _this.pendingMemberList = []; _this.typeList = []; return _this; } /** Mark a namespace as seen and add it to list of pending namespaces. */ Context.prototype.markNamespace = function (exportObj) { this.pendingNamespaceList.push(exportObj); ++this.pendingNamespaceCount; }; /** Parse types from schema in serialized JSON format. */ Context.prototype.registerTypes = function (namespace, exportTypeNameList, rawTypeSpecList) { var exportTypeCount = exportTypeNameList.length; var typeCount = rawTypeSpecList.length; var typeName; for (var typeNum = 0; typeNum < typeCount; ++typeNum) { var rawSpec = rawTypeSpecList[typeNum]; if (typeNum > 0 && typeNum <= exportTypeCount) { typeName = exportTypeNameList[typeNum - 1]; } else typeName = null; var typeSpec = new TypeSpec_1.TypeSpec(typeName, namespace, rawSpec); namespace.addType(typeSpec); this.pendingTypeList.push(typeSpec); this.typeList.push(typeSpec); } }; /** Parse members from schema in serialized JSON format. */ Context.prototype.registerMembers = function (namespace, rawMemberSpecList) { for (var _i = 0, rawMemberSpecList_1 = rawMemberSpecList; _i < rawMemberSpecList_1.length; _i++) { var rawSpec = rawMemberSpecList_1[_i]; var memberSpec = MemberSpec_1.MemberSpec.parseSpec(rawSpec, namespace); namespace.addMember(memberSpec); this.pendingMemberList.push(memberSpec); } }; /** Process namespaces seen so far. */ Context.prototype.process = function () { // Start only when process has been called for all namespaces. if (--this.pendingNamespaceCount > 0) return; // Link types to their parents. for (var _i = 0, _a = this.pendingNamespaceList; _i < _a.length; _i++) { var exportObject = _a[_i]; var namespace = exportObject._cxml[0]; namespace.link(); } // Create classes for all types. // This is effectively Kahn's algorithm for topological sort // (the rest is in the TypeSpec class). Item_1.Item.initAll(this.pendingTypeList); Item_1.Item.initAll(this.pendingMemberList); for (var _b = 0, _c = this.pendingTypeList; _b < _c.length; _b++) { var typeSpec = _c[_b]; typeSpec.defineMembers(); } this.pendingTypeList = []; this.pendingMemberList = []; for (var _d = 0, _e = this.pendingNamespaceList; _d < _e.length; _d++) { var exportObject = _e[_d]; var namespace = exportObject._cxml[0]; namespace.exportTypes(exportObject); namespace.exportDocument(exportObject); } this.pendingNamespaceList = []; }; /** Remove temporary structures needed to define new handlers. */ Context.prototype.cleanPlaceholders = function (strict) { for (var _i = 0, _a = this.namespaceList; _i < _a.length; _i++) { var namespace = _a[_i]; namespace.importSpecList = null; namespace.exportTypeNameList = null; namespace.typeSpecList = null; namespace.memberSpecList = null; namespace.exportTypeTbl = null; namespace.exportMemberTbl = null; } for (var _b = 0, _c = this.typeList; _b < _c.length; _b++) { var typeSpec = _c[_b]; typeSpec.cleanPlaceholders(strict); } this.typeList = null; }; return Context; }(ContextBase_1.ContextBase)); exports.Context = Context; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy94bWwvQ29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0RBQStEO0FBQy9ELCtDQUErQzs7Ozs7Ozs7Ozs7Ozs7O0FBRS9DLHlDQUFxRDtBQUNyRCx1Q0FBaUQ7QUFDakQsMkNBQXVEO0FBQ3ZELG9DQUFpQztBQUNqQyw2Q0FBMEM7QUFFMUMsMEVBQTBFO0FBRTFFO0lBQTZCLDJCQUFzQjtJQUNsRDtRQUFBLFlBQ0Msa0JBQU0scUJBQVMsQ0FBQyxTQUNoQjtRQTBHRCxpRkFBaUY7UUFDekUsMEJBQW9CLEdBQW9CLEVBQUUsQ0FBQztRQUNuRDsyRkFDbUY7UUFDM0UsMkJBQXFCLEdBQUcsQ0FBQyxDQUFDO1FBRTFCLHFCQUFlLEdBQWUsRUFBRSxDQUFDO1FBQ2pDLHVCQUFpQixHQUFpQixFQUFFLENBQUM7UUFFckMsY0FBUSxHQUFlLEVBQUUsQ0FBQzs7SUFuSGxDLENBQUM7SUFFRCx5RUFBeUU7SUFFekUsK0JBQWEsR0FBYixVQUFjLFNBQXdCO1FBQ3JDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUMsRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUM7SUFDOUIsQ0FBQztJQUVELHlEQUF5RDtJQUV6RCwrQkFBYSxHQUFiLFVBQ0MsU0FBb0IsRUFDcEIsa0JBQTRCLEVBQzVCLGVBQThCO1FBRTlCLElBQUksZUFBZSxHQUFHLGtCQUFrQixDQUFDLE1BQU0sQ0FBQztRQUNoRCxJQUFJLFNBQVMsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDO1FBQ3ZDLElBQUksUUFBZ0IsQ0FBQztRQUVyQixLQUFJLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxPQUFPLEdBQUcsU0FBUyxFQUFFLEVBQUUsT0FBTyxFQUFFO1lBQ3BELElBQUksT0FBTyxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUV2QyxJQUFHLE9BQU8sR0FBRyxDQUFDLElBQUksT0FBTyxJQUFJLGVBQWUsRUFBRTtnQkFDN0MsUUFBUSxHQUFHLGtCQUFrQixDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQzthQUMzQzs7Z0JBQU0sUUFBUSxHQUFHLElBQUksQ0FBQztZQUV2QixJQUFJLFFBQVEsR0FBRyxJQUFJLG1CQUFRLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUUxRCxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzdCO0lBQ0YsQ0FBQztJQUVELDJEQUEyRDtJQUUzRCxpQ0FBZSxHQUFmLFVBQ0MsU0FBb0IsRUFDcEIsaUJBQWtDO1FBRWxDLEtBQW1CLFVBQWlCLEVBQWpCLHVDQUFpQixFQUFqQiwrQkFBaUIsRUFBakIsSUFBaUIsRUFBRTtZQUFsQyxJQUFJLE9BQU8sMEJBQUE7WUFDZCxJQUFJLFVBQVUsR0FBRyx1QkFBVSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFFMUQsU0FBUyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3hDO0lBQ0YsQ0FBQztJQUVELHNDQUFzQztJQUV0Qyx5QkFBTyxHQUFQO1FBQ0MsOERBQThEO1FBRTlELElBQUcsRUFBRSxJQUFJLENBQUMscUJBQXFCLEdBQUcsQ0FBQztZQUFFLE9BQU87UUFFNUMsK0JBQStCO1FBRS9CLEtBQXdCLFVBQXlCLEVBQXpCLEtBQUEsSUFBSSxDQUFDLG9CQUFvQixFQUF6QixjQUF5QixFQUF6QixJQUF5QixFQUFFO1lBQS9DLElBQUksWUFBWSxTQUFBO1lBQ25CLElBQUksU0FBUyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ2pCO1FBRUQsZ0NBQWdDO1FBQ2hDLDREQUE0RDtRQUM1RCx1Q0FBdUM7UUFFdkMsV0FBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDbkMsV0FBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUVyQyxLQUFvQixVQUFvQixFQUFwQixLQUFBLElBQUksQ0FBQyxlQUFlLEVBQXBCLGNBQW9CLEVBQXBCLElBQW9CLEVBQUU7WUFBdEMsSUFBSSxRQUFRLFNBQUE7WUFDZixRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDekI7UUFFRCxJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1FBRTVCLEtBQXdCLFVBQXlCLEVBQXpCLEtBQUEsSUFBSSxDQUFDLG9CQUFvQixFQUF6QixjQUF5QixFQUF6QixJQUF5QixFQUFFO1lBQS9DLElBQUksWUFBWSxTQUFBO1lBQ25CLElBQUksU0FBUyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFdEMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNwQyxTQUFTLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ3ZDO1FBRUQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsaUVBQWlFO0lBRWpFLG1DQUFpQixHQUFqQixVQUFrQixNQUFnQjtRQUNqQyxLQUFxQixVQUFrQixFQUFsQixLQUFBLElBQUksQ0FBQyxhQUFhLEVBQWxCLGNBQWtCLEVBQWxCLElBQWtCLEVBQUU7WUFBckMsSUFBSSxTQUFTLFNBQUE7WUFDaEIsU0FBUyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7WUFDaEMsU0FBUyxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztZQUNwQyxTQUFTLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztZQUM5QixTQUFTLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztZQUNoQyxTQUFTLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztZQUMvQixTQUFTLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztTQUNqQztRQUVELEtBQW9CLFVBQWEsRUFBYixLQUFBLElBQUksQ0FBQyxRQUFRLEVBQWIsY0FBYSxFQUFiLElBQWEsRUFBRTtZQUEvQixJQUFJLFFBQVEsU0FBQTtZQUNmLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNuQztRQUVELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLENBQUM7SUFZRixjQUFDO0FBQUQsQ0FBQyxBQXZIRCxDQUE2Qix5QkFBVyxHQXVIdkM7QUF2SFksMEJBQU8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBjeG1sLCBjb3B5cmlnaHQgKGMpIDIwMTYgQnVzRmFzdGVyIEx0ZC5cbi8vIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSwgc2VlIExJQ0VOU0UuXG5cbmltcG9ydCB7TmFtZXNwYWNlLCBNb2R1bGVFeHBvcnRzfSBmcm9tICcuL05hbWVzcGFjZSc7XG5pbXBvcnQge1R5cGVTcGVjLCBSYXdUeXBlU3BlY30gZnJvbSAnLi9UeXBlU3BlYyc7XG5pbXBvcnQge01lbWJlclNwZWMsIFJhd01lbWJlclNwZWN9IGZyb20gJy4vTWVtYmVyU3BlYyc7XG5pbXBvcnQge0l0ZW19IGZyb20gJy4uL3htbC9JdGVtJztcbmltcG9ydCB7Q29udGV4dEJhc2V9IGZyb20gJy4vQ29udGV4dEJhc2UnO1xuXG4vKiogWE1MIHBhcnNlciBjb250ZXh0LCBob2xkaW5nIGRlZmluaXRpb25zIG9mIGFsbCBpbXBvcnRlZCBuYW1lc3BhY2VzLiAqL1xuXG5leHBvcnQgY2xhc3MgQ29udGV4dCBleHRlbmRzIENvbnRleHRCYXNlPE5hbWVzcGFjZT4ge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcihOYW1lc3BhY2UpO1xuXHR9XG5cblx0LyoqIE1hcmsgYSBuYW1lc3BhY2UgYXMgc2VlbiBhbmQgYWRkIGl0IHRvIGxpc3Qgb2YgcGVuZGluZyBuYW1lc3BhY2VzLiAqL1xuXG5cdG1hcmtOYW1lc3BhY2UoZXhwb3J0T2JqOiBNb2R1bGVFeHBvcnRzKSB7XG5cdFx0dGhpcy5wZW5kaW5nTmFtZXNwYWNlTGlzdC5wdXNoKGV4cG9ydE9iaik7XG5cdFx0Kyt0aGlzLnBlbmRpbmdOYW1lc3BhY2VDb3VudDtcblx0fVxuXG5cdC8qKiBQYXJzZSB0eXBlcyBmcm9tIHNjaGVtYSBpbiBzZXJpYWxpemVkIEpTT04gZm9ybWF0LiAqL1xuXG5cdHJlZ2lzdGVyVHlwZXMoXG5cdFx0bmFtZXNwYWNlOiBOYW1lc3BhY2UsXG5cdFx0ZXhwb3J0VHlwZU5hbWVMaXN0OiBzdHJpbmdbXSxcblx0XHRyYXdUeXBlU3BlY0xpc3Q6IFJhd1R5cGVTcGVjW11cblx0KSB7XG5cdFx0dmFyIGV4cG9ydFR5cGVDb3VudCA9IGV4cG9ydFR5cGVOYW1lTGlzdC5sZW5ndGg7XG5cdFx0dmFyIHR5cGVDb3VudCA9IHJhd1R5cGVTcGVjTGlzdC5sZW5ndGg7XG5cdFx0dmFyIHR5cGVOYW1lOiBzdHJpbmc7XG5cblx0XHRmb3IodmFyIHR5cGVOdW0gPSAwOyB0eXBlTnVtIDwgdHlwZUNvdW50OyArK3R5cGVOdW0pIHtcblx0XHRcdHZhciByYXdTcGVjID0gcmF3VHlwZVNwZWNMaXN0W3R5cGVOdW1dO1xuXG5cdFx0XHRpZih0eXBlTnVtID4gMCAmJiB0eXBlTnVtIDw9IGV4cG9ydFR5cGVDb3VudCkge1xuXHRcdFx0XHR0eXBlTmFtZSA9IGV4cG9ydFR5cGVOYW1lTGlzdFt0eXBlTnVtIC0gMV07XG5cdFx0XHR9IGVsc2UgdHlwZU5hbWUgPSBudWxsO1xuXG5cdFx0XHR2YXIgdHlwZVNwZWMgPSBuZXcgVHlwZVNwZWModHlwZU5hbWUsIG5hbWVzcGFjZSwgcmF3U3BlYyk7XG5cblx0XHRcdG5hbWVzcGFjZS5hZGRUeXBlKHR5cGVTcGVjKTtcblx0XHRcdHRoaXMucGVuZGluZ1R5cGVMaXN0LnB1c2godHlwZVNwZWMpO1xuXHRcdFx0dGhpcy50eXBlTGlzdC5wdXNoKHR5cGVTcGVjKTtcblx0XHR9XG5cdH1cblxuXHQvKiogUGFyc2UgbWVtYmVycyBmcm9tIHNjaGVtYSBpbiBzZXJpYWxpemVkIEpTT04gZm9ybWF0LiAqL1xuXG5cdHJlZ2lzdGVyTWVtYmVycyhcblx0XHRuYW1lc3BhY2U6IE5hbWVzcGFjZSxcblx0XHRyYXdNZW1iZXJTcGVjTGlzdDogUmF3TWVtYmVyU3BlY1tdXG5cdCkge1xuXHRcdGZvcih2YXIgcmF3U3BlYyBvZiByYXdNZW1iZXJTcGVjTGlzdCkge1xuXHRcdFx0dmFyIG1lbWJlclNwZWMgPSBNZW1iZXJTcGVjLnBhcnNlU3BlYyhyYXdTcGVjLCBuYW1lc3BhY2UpO1xuXG5cdFx0XHRuYW1lc3BhY2UuYWRkTWVtYmVyKG1lbWJlclNwZWMpO1xuXHRcdFx0dGhpcy5wZW5kaW5nTWVtYmVyTGlzdC5wdXNoKG1lbWJlclNwZWMpO1xuXHRcdH1cblx0fVxuXG5cdC8qKiBQcm9jZXNzIG5hbWVzcGFjZXMgc2VlbiBzbyBmYXIuICovXG5cblx0cHJvY2VzcygpIHtcblx0XHQvLyBTdGFydCBvbmx5IHdoZW4gcHJvY2VzcyBoYXMgYmVlbiBjYWxsZWQgZm9yIGFsbCBuYW1lc3BhY2VzLlxuXG5cdFx0aWYoLS10aGlzLnBlbmRpbmdOYW1lc3BhY2VDb3VudCA+IDApIHJldHVybjtcblxuXHRcdC8vIExpbmsgdHlwZXMgdG8gdGhlaXIgcGFyZW50cy5cblxuXHRcdGZvcihsZXQgZXhwb3J0T2JqZWN0IG9mIHRoaXMucGVuZGluZ05hbWVzcGFjZUxpc3QpIHtcblx0XHRcdHZhciBuYW1lc3BhY2UgPSBleHBvcnRPYmplY3QuX2N4bWxbMF07XG5cdFx0XHRuYW1lc3BhY2UubGluaygpO1xuXHRcdH1cblxuXHRcdC8vIENyZWF0ZSBjbGFzc2VzIGZvciBhbGwgdHlwZXMuXG5cdFx0Ly8gVGhpcyBpcyBlZmZlY3RpdmVseSBLYWhuJ3MgYWxnb3JpdGhtIGZvciB0b3BvbG9naWNhbCBzb3J0XG5cdFx0Ly8gKHRoZSByZXN0IGlzIGluIHRoZSBUeXBlU3BlYyBjbGFzcykuXG5cblx0XHRJdGVtLmluaXRBbGwodGhpcy5wZW5kaW5nVHlwZUxpc3QpO1xuXHRcdEl0ZW0uaW5pdEFsbCh0aGlzLnBlbmRpbmdNZW1iZXJMaXN0KTtcblxuXHRcdGZvcih2YXIgdHlwZVNwZWMgb2YgdGhpcy5wZW5kaW5nVHlwZUxpc3QpIHtcblx0XHRcdHR5cGVTcGVjLmRlZmluZU1lbWJlcnMoKTtcblx0XHR9XG5cblx0XHR0aGlzLnBlbmRpbmdUeXBlTGlzdCA9IFtdO1xuXHRcdHRoaXMucGVuZGluZ01lbWJlckxpc3QgPSBbXTtcblxuXHRcdGZvcihsZXQgZXhwb3J0T2JqZWN0IG9mIHRoaXMucGVuZGluZ05hbWVzcGFjZUxpc3QpIHtcblx0XHRcdHZhciBuYW1lc3BhY2UgPSBleHBvcnRPYmplY3QuX2N4bWxbMF07XG5cblx0XHRcdG5hbWVzcGFjZS5leHBvcnRUeXBlcyhleHBvcnRPYmplY3QpO1xuXHRcdFx0bmFtZXNwYWNlLmV4cG9ydERvY3VtZW50KGV4cG9ydE9iamVjdCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5wZW5kaW5nTmFtZXNwYWNlTGlzdCA9IFtdO1xuXHR9XG5cblx0LyoqIFJlbW92ZSB0ZW1wb3Jhcnkgc3RydWN0dXJlcyBuZWVkZWQgdG8gZGVmaW5lIG5ldyBoYW5kbGVycy4gKi9cblxuXHRjbGVhblBsYWNlaG9sZGVycyhzdHJpY3Q/OiBib29sZWFuKSB7XG5cdFx0Zm9yKHZhciBuYW1lc3BhY2Ugb2YgdGhpcy5uYW1lc3BhY2VMaXN0KSB7XG5cdFx0XHRuYW1lc3BhY2UuaW1wb3J0U3BlY0xpc3QgPSBudWxsO1xuXHRcdFx0bmFtZXNwYWNlLmV4cG9ydFR5cGVOYW1lTGlzdCA9IG51bGw7XG5cdFx0XHRuYW1lc3BhY2UudHlwZVNwZWNMaXN0ID0gbnVsbDtcblx0XHRcdG5hbWVzcGFjZS5tZW1iZXJTcGVjTGlzdCA9IG51bGw7XG5cdFx0XHRuYW1lc3BhY2UuZXhwb3J0VHlwZVRibCA9IG51bGw7XG5cdFx0XHRuYW1lc3BhY2UuZXhwb3J0TWVtYmVyVGJsID0gbnVsbDtcblx0XHR9XG5cblx0XHRmb3IodmFyIHR5cGVTcGVjIG9mIHRoaXMudHlwZUxpc3QpIHtcblx0XHRcdHR5cGVTcGVjLmNsZWFuUGxhY2Vob2xkZXJzKHN0cmljdCk7XG5cdFx0fVxuXG5cdFx0dGhpcy50eXBlTGlzdCA9IG51bGw7XG5cdH1cblxuXHQvKiogTGlzdCBvZiBwZW5kaW5nIG5hbWVzcGFjZXMgKG5vdCB5ZXQgcmVnaXN0ZXJlZCBvciB3YWl0aW5nIGZvciBwcm9jZXNzaW5nKS4gKi9cblx0cHJpdmF0ZSBwZW5kaW5nTmFtZXNwYWNlTGlzdDogTW9kdWxlRXhwb3J0c1tdID0gW107XG5cdC8qKiBHcm93cyB3aXRoIHBlbmRpbmdOYW1lc3BhY2VMaXN0IGFuZCBzaHJpbmtzIHdoZW4gbmFtZXNwYWNlcyBhcmUgcmVnaXN0ZXJlZC5cblx0ICAqIFdoZW4gemVybywgYWxsIHBlbmRpbmcgbmFtZXNwYWNlcyBoYXZlIGJlZW4gcmVnaXN0ZXJlZCBhbmQgY2FuIGJlIHByb2Nlc3NlZC4gKi9cblx0cHJpdmF0ZSBwZW5kaW5nTmFtZXNwYWNlQ291bnQgPSAwO1xuXG5cdHByaXZhdGUgcGVuZGluZ1R5cGVMaXN0OiBUeXBlU3BlY1tdID0gW107XG5cdHByaXZhdGUgcGVuZGluZ01lbWJlckxpc3Q6IE1lbWJlclNwZWNbXSA9IFtdO1xuXG5cdHByaXZhdGUgdHlwZUxpc3Q6IFR5cGVTcGVjW10gPSBbXTtcbn1cbiJdfQ==