trimble-connect-sdk
Version:
Trimble Connect SDK for JavaScript
444 lines • 108 kB
JavaScript
"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.PSet = exports.DefaultPSetServiceUri = void 0;
const response_1 = require("./response");
const service_1 = require("./service");
exports.DefaultPSetServiceUri = 'https://pset-api.connect.trimble.com/v1/';
const PsetServiceUriMap = new Map([
['us-east-1', 'https://pset-api.us-east-1.connect.trimble.com/v1/'],
['ap-southeast-1', 'https://pset-api.ap-southeast-1.connect.trimble.com/v1/'],
['eu-west-1', 'https://pset-api.eu-west-1.connect.trimble.com/v1/'],
]);
function getDefaultConfiguration() {
return {
region: 'eu-west-1',
serviceUri: exports.DefaultPSetServiceUri,
};
}
class PSet extends service_1.Service {
constructor(config) {
const sanitizedConfig = Object.assign({}, config);
if (sanitizedConfig &&
sanitizedConfig.region &&
sanitizedConfig.serviceUri === undefined) {
if (PsetServiceUriMap.has(sanitizedConfig.region)) {
sanitizedConfig.serviceUri = PsetServiceUriMap.get(sanitizedConfig.region);
}
else {
throw new Error(`Unknown region: ${sanitizedConfig.region}, allowed values ${Array.from(PsetServiceUriMap.keys()).join(', ')}`);
}
}
super(Object.assign(Object.assign({}, getDefaultConfiguration()), sanitizedConfig));
}
getUserInfo(params) {
return __awaiter(this, void 0, void 0, function* () {
let url = 'me';
if (params) {
const query = [];
if (params.wait) {
query.push('wait');
}
if (params.refresh) {
query.push('refresh');
}
if (query.length > 0) {
url += `?${query.join('&')}`;
}
}
return this.makeRequest(url);
});
}
getLibrary(libId, params) {
return __awaiter(this, void 0, void 0, function* () {
const url = `libs/${encodeURIComponent(libId)}${params && params.deleted ? '?deleted' : ''}`;
return this.makeRequest(url);
});
}
createLibrary(request) {
return __awaiter(this, void 0, void 0, function* () {
const url = 'libs';
return this.makeRequest(url, 'POST', JSON.stringify(request));
});
}
updateLibrary(libId, request) {
return __awaiter(this, void 0, void 0, function* () {
const url = `libs/${encodeURIComponent(libId)}`;
return this.makeRequest(url, 'PATCH', JSON.stringify(request));
});
}
deleteLibrary(libId, params) {
return __awaiter(this, void 0, void 0, function* () {
const url = `libs/${encodeURIComponent(libId)}`;
let headers;
if (params && params.v !== undefined) {
headers = new Headers({ 'If-Match': `W/"${params.v}"` });
}
return this.makeRequest(url, 'DELETE', undefined, headers);
});
}
getLibraryPolicy(libId) {
return __awaiter(this, void 0, void 0, function* () {
const url = `libs/${encodeURIComponent(libId)}/policy`;
return this.makeRequest(url);
});
}
putLibraryPolicy(libId, policy) {
return __awaiter(this, void 0, void 0, function* () {
const url = `libs/${encodeURIComponent(libId)}/policy`;
return this.makeRequest(url, 'PUT', JSON.stringify(policy));
});
}
listDefinitions(libId, params) {
return __awaiter(this, void 0, void 0, function* () {
let url = `libs/${encodeURIComponent(libId)}/defs`;
if (params) {
const query = [];
if (params.deleted) {
query.push('deleted');
}
if (params.top) {
query.push(`top=${encodeURIComponent(params.top.toString())}`);
}
if (params.skiptoken) {
query.push(`skiptoken=${encodeURIComponent(params.skiptoken)}`);
}
if (params.prefix) {
query.push(`prefix=${encodeURIComponent(params.prefix)}`);
}
if (params.type) {
query.push(`type=${encodeURIComponent(params.type)}`);
}
if (query.length > 0) {
url += `?${query.join('&')}`;
}
}
return this.makeRequest(url);
});
}
listDefinitionVersions(libId, defId, params) {
return __awaiter(this, void 0, void 0, function* () {
let url = `libs/${encodeURIComponent(libId)}/defs/${encodeURIComponent(defId)}/versions`;
if (params) {
const query = [];
if (params.deleted) {
query.push('deleted');
}
if (params.top) {
query.push(`top=${encodeURIComponent(params.top.toString())}`);
}
if (params.skiptoken) {
query.push(`skiptoken=${encodeURIComponent(params.skiptoken)}`);
}
if (query.length > 0) {
url += `?${query.join('&')}`;
}
}
return this.makeRequest(url);
});
}
getDefinition(libId, defId, params) {
return __awaiter(this, void 0, void 0, function* () {
const url = `libs/${encodeURIComponent(libId)}/defs/${encodeURIComponent(defId)}${params && params.deleted ? '?deleted' : ''}`;
return this.makeRequest(url);
});
}
getDefinitionVersion(libId, defId, ver) {
return __awaiter(this, void 0, void 0, function* () {
const url = `libs/${encodeURIComponent(libId)}/defs/${encodeURIComponent(defId)}/versions/${encodeURIComponent(ver.toString())}`;
return this.makeRequest(url);
});
}
getDefinitionVersionBySchema(libId, defId, ver) {
return __awaiter(this, void 0, void 0, function* () {
const url = `libs/${encodeURIComponent(libId)}/defs/${encodeURIComponent(defId)}/schema/${encodeURIComponent(ver.toString())}`;
return this.makeRequest(url);
});
}
getPSetDefinitions(libId, ids, params) {
var _a, _b;
return __awaiter(this, void 0, void 0, function* () {
const requestBatchGet = {};
const paramsBatchGet = { deleted: params === null || params === void 0 ? void 0 : params.deleted };
const defs = new Set();
ids.items.forEach((def) => {
defs.add({ libId, defId: def.id, v: def.v, schemaV: def.schemaV });
});
requestBatchGet.defs = Array.from(defs);
const responseBatchGet = yield this.batchGet(requestBatchGet, paramsBatchGet);
const response = new response_1.ServiceResponse(this, responseBatchGet.response, { items: responseBatchGet.data.responses.defs });
if (responseBatchGet.data.errors.defs) {
const errors = new Set();
(_a = responseBatchGet.data.errors.defs) === null || _a === void 0 ? void 0 : _a.forEach((def) => {
errors.add({
item: {
id: def.item.defId,
v: def.item.v,
schemaV: def.item.schemaV,
},
code: def.code,
message: def.message,
});
});
response.data.errors = Array.from(errors);
}
if (responseBatchGet.data.unprocessed.defs) {
const unprocessed = new Set();
(_b = responseBatchGet.data.unprocessed.defs) === null || _b === void 0 ? void 0 : _b.forEach((def) => {
unprocessed.add({ id: def.defId, v: def.v, schemaV: def.schemaV });
});
response.data.unprocessed = Array.from(unprocessed);
}
return response;
});
}
createDefinition(libId, request) {
return __awaiter(this, void 0, void 0, function* () {
const url = `libs/${encodeURIComponent(libId)}/defs`;
return this.makeRequest(url, 'POST', JSON.stringify(request));
});
}
updateDefinition(libId, defId, request) {
return __awaiter(this, void 0, void 0, function* () {
const url = `libs/${encodeURIComponent(libId)}/defs/${encodeURIComponent(defId)}`;
return this.makeRequest(url, 'PATCH', JSON.stringify(request));
});
}
deleteDefinition(libId, defId, params) {
return __awaiter(this, void 0, void 0, function* () {
const url = `libs/${encodeURIComponent(libId)}/defs/${encodeURIComponent(defId)}`;
let headers;
if (params && params.v !== undefined) {
headers = new Headers({
'If-Match': `W/"${encodeURIComponent(params.v.toString())}"`,
});
}
return this.makeRequest(url, 'DELETE', undefined, headers);
});
}
validate(libId, defId, request, params) {
return __awaiter(this, void 0, void 0, function* () {
let url = `libs/${encodeURIComponent(libId)}/defs/${encodeURIComponent(defId)}/validate`;
if (params) {
const query = [];
if (params.deleted) {
query.push('deleted');
}
if (params.skiptoken) {
query.push(`skiptoken=${encodeURIComponent(params.skiptoken)}`);
}
if (query.length > 0) {
url += `?${query.join('&')}`;
}
}
return this.makeRequest(url, 'POST', JSON.stringify(request));
});
}
validateNextPage(prev, request) {
return __awaiter(this, void 0, void 0, function* () {
if (prev && prev.next) {
return this.makeRequest(prev.next, 'POST', JSON.stringify(request));
}
else {
throw new Error('There is no next page.');
}
});
}
listPSets(link, params) {
return __awaiter(this, void 0, void 0, function* () {
let url = `psets/${encodeURIComponent(link)}`;
if (params) {
const query = [];
if (params.deleted) {
query.push('deleted');
}
if (params.top) {
query.push(`top=${encodeURIComponent(params.top.toString())}`);
}
if (params.skiptoken) {
query.push(`skiptoken=${encodeURIComponent(params.skiptoken)}`);
}
if (query.length > 0) {
url += `?${query.join('&')}`;
}
}
return this.makeRequest(url);
});
}
listPSetsByDefinition(libId, defId, params) {
return __awaiter(this, void 0, void 0, function* () {
let url = `libs/${encodeURIComponent(libId)}/defs/${encodeURIComponent(defId)}/psets`;
if (params) {
const query = [];
if (params.deleted) {
query.push('deleted');
}
if (params.top) {
query.push(`top=${encodeURIComponent(params.top.toString())}`);
}
if (params.skiptoken) {
query.push(`skiptoken=${encodeURIComponent(params.skiptoken)}`);
}
if (params.link) {
query.push(`link=${encodeURIComponent(params.link)}`);
}
if (query.length > 0) {
url += `?${query.join('&')}`;
}
}
return this.makeRequest(url);
});
}
listPSetVersions(link, libId, defId, params) {
return __awaiter(this, void 0, void 0, function* () {
let url = `psets/${encodeURIComponent(link)}/${encodeURIComponent(libId)}/${encodeURIComponent(defId)}/versions`;
if (params) {
const query = [];
if (params.deleted) {
query.push('deleted');
}
if (params.top) {
query.push(`top=${encodeURIComponent(params.top.toString())}`);
}
if (params.skiptoken) {
query.push(`skiptoken=${encodeURIComponent(params.skiptoken)}`);
}
if (query.length > 0) {
url += `?${query.join('&')}`;
}
}
return this.makeRequest(url);
});
}
getPSet(link, libId, defId, params) {
return __awaiter(this, void 0, void 0, function* () {
const url = `psets/${encodeURIComponent(link)}/${encodeURIComponent(libId)}/${encodeURIComponent(defId)}${params && params.deleted ? '?deleted' : ''}`;
return this.makeRequest(url);
});
}
getPSetVersion(link, libId, defId, ver) {
return __awaiter(this, void 0, void 0, function* () {
const url = `psets/${encodeURIComponent(link)}/${encodeURIComponent(libId)}/${encodeURIComponent(defId)}/versions/${encodeURIComponent(ver.toString())}`;
return this.makeRequest(url);
});
}
getPSets(keys, params) {
var _a;
return __awaiter(this, void 0, void 0, function* () {
const requestBatchGet = {};
const paramsBatchGet = { deleted: params === null || params === void 0 ? void 0 : params.deleted };
const psets = new Set();
keys.items.forEach((pset) => {
psets.add({
libId: pset.libId,
defId: pset.defId,
v: pset.v,
link: pset.link,
});
});
requestBatchGet.psets = Array.from(psets);
const responseBatchGet = yield this.batchGet(requestBatchGet, paramsBatchGet);
const response = new response_1.ServiceResponse(this, responseBatchGet.response, { items: responseBatchGet.data.responses.psets || [] });
if (responseBatchGet.data.unprocessed.psets) {
const unprocessed = new Set();
(_a = responseBatchGet.data.unprocessed.psets) === null || _a === void 0 ? void 0 : _a.forEach((pset) => {
unprocessed.add({
libId: pset.libId,
defId: pset.defId,
v: pset.v,
link: pset.link,
});
});
response.data.unhandled = Array.from(unprocessed);
}
return response;
});
}
getPSetsByDefinition(libId, defId, links, params) {
var _a;
return __awaiter(this, void 0, void 0, function* () {
const requestBatchGet = {};
const paramsBatchGet = { deleted: params === null || params === void 0 ? void 0 : params.deleted };
const psets = new Set();
links.items.forEach((link) => {
psets.add({ libId, defId, link });
});
requestBatchGet.psets = Array.from(psets);
const responseBatchGet = yield this.batchGet(requestBatchGet, paramsBatchGet);
const response = new response_1.ServiceResponse(this, responseBatchGet.response, { items: responseBatchGet.data.responses.psets || [] });
if (responseBatchGet.data.unprocessed.psets) {
const unprocessed = new Set();
(_a = responseBatchGet.data.unprocessed.psets) === null || _a === void 0 ? void 0 : _a.forEach((pset) => {
unprocessed.add(pset.link);
});
response.data.unhandled = Array.from(unprocessed);
}
return response;
});
}
batchGet(request, params) {
return __awaiter(this, void 0, void 0, function* () {
let url = `batch-get`;
if (params) {
const query = [];
if (params.deleted) {
query.push('deleted');
}
if (query.length > 0) {
url += `?${query.join('&')}`;
}
}
return this.makeRequest(url, 'POST', JSON.stringify(request));
});
}
updatePSet(link, libId, defId, request) {
return __awaiter(this, void 0, void 0, function* () {
const url = `psets/${encodeURIComponent(link)}/${encodeURIComponent(libId)}/${encodeURIComponent(defId)}`;
return this.makeRequest(url, 'PATCH', JSON.stringify(request));
});
}
deletePSet(link, libId, defId, params) {
return __awaiter(this, void 0, void 0, function* () {
const url = `psets/${encodeURIComponent(link)}/${encodeURIComponent(libId)}/${encodeURIComponent(defId)}`;
let headers;
if (params && params.v !== undefined) {
headers = new Headers({ 'If-Match': `W/"${params.v}"` });
}
return this.makeRequest(url, 'DELETE', undefined, headers);
});
}
changeset(changeset) {
return __awaiter(this, void 0, void 0, function* () {
const url = 'psets/changeset';
return this.makeRequest(url, 'POST', JSON.stringify(changeset));
});
}
changesetAsync() {
return __awaiter(this, void 0, void 0, function* () {
const url = 'psets/changeset-async';
return this.makeRequest(url, 'POST');
});
}
changesetStatus(changesetId) {
return __awaiter(this, void 0, void 0, function* () {
const url = `psets/changeset/${encodeURIComponent(changesetId)}`;
return this.makeRequest(url);
});
}
subscribeWS() {
return __awaiter(this, void 0, void 0, function* () {
const url = 'subscribe';
return this.makeRequest(url, 'GET');
});
}
}
exports.PSet = PSet;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHNldC5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicHNldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFZQSx5Q0FBNkM7QUFDN0MsdUNBQW9DO0FBSXZCLFFBQUEscUJBQXFCLEdBQUcsMENBQTBDLENBQUM7QUFFaEYsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBaUI7SUFDaEQsQ0FBQyxXQUFXLEVBQUUsb0RBQW9ELENBQUM7SUFDbkUsQ0FBQyxnQkFBZ0IsRUFBRSx5REFBeUQsQ0FBQztJQUM3RSxDQUFDLFdBQVcsRUFBRSxvREFBb0QsQ0FBQztDQUNwRSxDQUFDLENBQUM7QUFHSCxTQUFTLHVCQUF1QjtJQUM5QixPQUFPO1FBQ0wsTUFBTSxFQUFFLFdBQVc7UUFDbkIsVUFBVSxFQUFFLDZCQUFxQjtLQUNsQyxDQUFDO0FBQ0osQ0FBQztBQTZqQkQsTUFBYSxJQUFLLFNBQVEsaUJBQU87SUFNL0IsWUFBWSxNQUErQjtRQUN6QyxNQUFNLGVBQWUscUJBQWdDLE1BQU0sQ0FBRSxDQUFDO1FBRTlELElBQ0UsZUFBZTtZQUNmLGVBQWUsQ0FBQyxNQUFNO1lBQ3RCLGVBQWUsQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUN4QztZQUNBLElBQUksaUJBQWlCLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDakQsZUFBZSxDQUFDLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQ2hELGVBQWUsQ0FBQyxNQUFNLENBQ3ZCLENBQUM7YUFDSDtpQkFBTTtnQkFDTCxNQUFNLElBQUksS0FBSyxDQUNiLG1CQUNFLGVBQWUsQ0FBQyxNQUNsQixvQkFBb0IsS0FBSyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUN0RSxDQUFDO2FBQ0g7U0FDRjtRQUVELEtBQUssaUNBQU0sdUJBQXVCLEVBQUUsR0FBSyxlQUFlLEVBQUcsQ0FBQztJQUM5RCxDQUFDO0lBTVksV0FBVyxDQUN0QixNQUEyQjs7WUFFM0IsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDO1lBQ2YsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUNqQixJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUU7b0JBQ2YsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDcEI7Z0JBRUQsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFO29CQUNsQixLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUN2QjtnQkFFRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUNwQixHQUFHLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7aUJBQzlCO2FBQ0Y7WUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQW1CLEdBQUcsQ0FBQyxDQUFDO1FBQ2pELENBQUM7S0FBQTtJQVNZLFVBQVUsQ0FDckIsS0FBYSxFQUNiLE1BQTBCOztZQUUxQixNQUFNLEdBQUcsR0FBRyxRQUFRLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxHQUMzQyxNQUFNLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUMxQyxFQUFFLENBQUM7WUFDSCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQWtCLEdBQUcsQ0FBQyxDQUFDO1FBQ2hELENBQUM7S0FBQTtJQVFZLGFBQWEsQ0FDeEIsT0FBNkI7O1lBRTdCLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQztZQUNuQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQ3JCLEdBQUcsRUFDSCxNQUFNLEVBQ04sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FDeEIsQ0FBQztRQUNKLENBQUM7S0FBQTtJQVNZLGFBQWEsQ0FDeEIsS0FBYSxFQUNiLE9BQTZCOztZQUU3QixNQUFNLEdBQUcsR0FBRyxRQUFRLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDaEQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUNyQixHQUFHLEVBQ0gsT0FBTyxFQUNQLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQ3hCLENBQUM7UUFDSixDQUFDO0tBQUE7SUFTWSxhQUFhLENBQ3hCLEtBQWEsRUFDYixNQUFzQjs7WUFFdEIsTUFBTSxHQUFHLEdBQUcsUUFBUSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBRWhELElBQUksT0FBNEIsQ0FBQztZQUNqQyxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtnQkFDcEMsT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQzthQUMxRDtZQUVELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBa0IsR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDOUUsQ0FBQztLQUFBO0lBT1ksZ0JBQWdCLENBQzNCLEtBQWE7O1lBRWIsTUFBTSxHQUFHLEdBQUcsUUFBUSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1lBQ3ZELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBUyxHQUFHLENBQUMsQ0FBQztRQUN2QyxDQUFDO0tBQUE7SUFRWSxnQkFBZ0IsQ0FDM0IsS0FBYSxFQUNiLE1BQWM7O1lBRWQsTUFBTSxHQUFHLEdBQUcsUUFBUSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1lBQ3ZELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBTyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNwRSxDQUFDO0tBQUE7SUFVWSxlQUFlLENBQzFCLEtBQWEsRUFDYixNQUErQjs7WUFFL0IsSUFBSSxHQUFHLEdBQUcsUUFBUSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO1lBRW5ELElBQUksTUFBTSxFQUFFO2dCQUNWLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDakIsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFO29CQUNsQixLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUN2QjtnQkFFRCxJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ2hFO2dCQUVELElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRTtvQkFDcEIsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ2pFO2dCQUVELElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRTtvQkFDakIsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQzNEO2dCQUVELElBQUksTUFBTSxDQUFDLElBQUksRUFBRTtvQkFDZixLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDdkQ7Z0JBRUQsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDcEIsR0FBRyxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2lCQUM5QjthQUNGO1lBRUQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUEwQixHQUFHLENBQUMsQ0FBQztRQUN4RCxDQUFDO0tBQUE7SUFVWSxzQkFBc0IsQ0FDakMsS0FBYSxFQUNiLEtBQWEsRUFDYixNQUFzQzs7WUFFdEMsSUFBSSxHQUFHLEdBQUcsUUFBUSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsU0FBUyxrQkFBa0IsQ0FDcEUsS0FBSyxDQUNOLFdBQVcsQ0FBQztZQUViLElBQUksTUFBTSxFQUFFO2dCQUNWLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDakIsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFO29CQUNsQixLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUN2QjtnQkFFRCxJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ2hFO2dCQUVELElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRTtvQkFDcEIsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ2pFO2dCQUVELElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQ3BCLEdBQUcsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztpQkFDOUI7YUFDRjtZQUVELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBMEIsR0FBRyxDQUFDLENBQUM7UUFDeEQsQ0FBQztLQUFBO0lBVVksYUFBYSxDQUN4QixLQUFhLEVBQ2IsS0FBYSxFQUNiLE1BQTZCOztZQUU3QixNQUFNLEdBQUcsR0FBRyxRQUFRLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxTQUFTLGtCQUFrQixDQUN0RSxLQUFLLENBQ04sR0FBRyxNQUFNLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNqRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQXFCLEdBQUcsQ0FBQyxDQUFDO1FBQ25ELENBQUM7S0FBQTtJQVVZLG9CQUFvQixDQUMvQixLQUFhLEVBQ2IsS0FBYSxFQUNiLEdBQVc7O1lBRVgsTUFBTSxHQUFHLEdBQUcsUUFBUSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsU0FBUyxrQkFBa0IsQ0FDdEUsS0FBSyxDQUNOLGFBQWEsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNuRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQXFCLEdBQUcsQ0FBQyxDQUFDO1FBQ25ELENBQUM7S0FBQTtJQVVZLDRCQUE0QixDQUN2QyxLQUFhLEVBQ2IsS0FBYSxFQUNiLEdBQVc7O1lBRVgsTUFBTSxHQUFHLEdBQUcsUUFBUSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsU0FBUyxrQkFBa0IsQ0FDdEUsS0FBSyxDQUNOLFdBQVcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNqRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQXFCLEdBQUcsQ0FBQyxDQUFDO1FBQ25ELENBQUM7S0FBQTtJQVlZLGtCQUFrQixDQUM3QixLQUFhLEVBQ2IsR0FBcUIsRUFDckIsTUFBNkI7OztZQUU3QixNQUFNLGVBQWUsR0FBd0IsRUFBRSxDQUFDO1lBQ2hELE1BQU0sY0FBYyxHQUF3QixFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsT0FBTyxFQUFFLENBQUM7WUFFekUsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQXNCLENBQUM7WUFDM0MsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDeEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDckUsQ0FBQyxDQUFDLENBQUM7WUFDSCxlQUFlLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFeEMsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQzFDLGVBQWUsRUFDZixjQUFjLENBQ2YsQ0FBQztZQUNGLE1BQU0sUUFBUSxHQUNaLElBQUksMEJBQWUsQ0FDakIsSUFBSSxFQUNKLGdCQUFnQixDQUFDLFFBQVEsRUFDekIsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FDaEQsQ0FBQztZQUVKLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7Z0JBQ3JDLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO2dCQUN6QyxNQUFBLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSwwQ0FBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDakQsTUFBTSxDQUFDLEdBQUcsQ0FBQzt3QkFDVCxJQUFJLEVBQUU7NEJBQ0osRUFBRSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSzs0QkFDbEIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQzs0QkFDYixPQUFPLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPO3lCQUMxQjt3QkFDRCxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7d0JBQ2QsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPO3FCQUNyQixDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUMzQztZQUVELElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUU7Z0JBQzFDLE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxFQUFhLENBQUM7Z0JBQ3pDLE1BQUEsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLDBDQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUN0RCxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUNyRSxDQUFDLENBQUMsQ0FBQztnQkFDSCxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ3JEO1lBRUQsT0FBTyxRQUFRLENBQUM7O0tBQ2pCO0lBU1ksZ0JBQWdCLENBQzNCLEtBQWEsRUFDYixPQUFnQzs7WUFFaEMsTUFBTSxHQUFHLEdBQUcsUUFBUSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQ3JELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FDckIsR0FBRyxFQUNILE1BQU0sRUFDTixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUN4QixDQUFDO1FBQ0osQ0FBQztLQUFBO0lBVVksZ0JBQWdCLENBQzNCLEtBQWEsRUFDYixLQUFhLEVBQ2IsT0FBZ0M7O1lBRWhDLE1BQU0sR0FBRyxHQUFHLFFBQVEsa0JBQWtCLENBQUMsS0FBSyxDQUFDLFNBQVMsa0JBQWtCLENBQ3RFLEtBQUssQ0FDTixFQUFFLENBQUM7WUFDSixPQUFPLElBQUksQ0FBQyxXQUFXLENBQ3JCLEdBQUcsRUFDSCxPQUFPLEVBQ1AsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FDeEIsQ0FBQztRQUNKLENBQUM7S0FBQTtJQVVZLGdCQUFnQixDQUMzQixLQUFhLEVBQ2IsS0FBYSxFQUNiLE1BQXNCOztZQUV0QixNQUFNLEdBQUcsR0FBRyxRQUFRLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxTQUFTLGtCQUFrQixDQUN0RSxLQUFLLENBQ04sRUFBRSxDQUFDO1lBRUosSUFBSSxPQUE0QixDQUFDO1lBQ2pDLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFO2dCQUNwQyxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUM7b0JBQ3BCLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRztpQkFDN0QsQ0FBQyxDQUFDO2FBQ0o7WUFFRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQ3JCLEdBQUcsRUFDSCxRQUFRLEVBQ1IsU0FBUyxFQUNULE9BQU8sQ0FDUixDQUFDO1FBQ0osQ0FBQztLQUFBO0lBV1ksUUFBUSxDQUNuQixLQUFhLEVBQ2IsS0FBYSxFQUNiLE9BQXdCLEVBQ3hCLE1BQXdCOztZQUV4QixJQUFJLEdBQUcsR0FBRyxRQUFRLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxTQUFTLGtCQUFrQixDQUNwRSxLQUFLLENBQ04sV0FBVyxDQUFDO1lBRWIsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUNqQixJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUU7b0JBQ2xCLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQ3ZCO2dCQUVELElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRTtvQkFDcEIsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ2pFO2dCQUVELElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQ3BCLEdBQUcsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztpQkFDOUI7YUFDRjtZQUVELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FDckIsR0FBRyxFQUNILE1BQU0sRUFDTixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUN4QixDQUFDO1FBQ0osQ0FBQztLQUFBO0lBU1ksZ0JBQWdCLENBQzNCLElBQXNCLEVBQ3RCLE9BQXdCOztZQUV4QixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNyQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQ3JCLElBQUksQ0FBQyxJQUFJLEVBQ1QsTUFBTSxFQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQ3hCLENBQUM7YUFDSDtpQkFBTTtnQkFDTCxNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7YUFDM0M7UUFDSCxDQUFDO0tBQUE7SUFVWSxTQUFTLENBQ3BCLElBQVksRUFDWixNQUF5Qjs7WUFFekIsSUFBSSxHQUFHLEdBQUcsU0FBUyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBRTlDLElBQUksTUFBTSxFQUFFO2dCQUNWLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDakIsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFO29CQUNsQixLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUN2QjtnQkFFRCxJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ2hFO2dCQUVELElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRTtvQkFDcEIsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ2pFO2dCQUVELElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQ3BCLEdBQUcsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztpQkFDOUI7YUFDRjtZQUVELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBb0IsR0FBRyxDQUFDLENBQUM7UUFDbEQsQ0FBQztLQUFBO0lBV1kscUJBQXFCLENBQ2hDLEtBQWEsRUFDYixLQUFhLEVBQ2IsTUFBcUM7O1lBRXJDLElBQUksR0FBRyxHQUFHLFFBQVEsa0JBQWtCLENBQUMsS0FBSyxDQUFDLFNBQVMsa0JBQWtCLENBQ3BFLEtBQUssQ0FDTixRQUFRLENBQUM7WUFFVixJQUFJLE1BQU0sRUFBRTtnQkFDVixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQ2pCLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRTtvQkFDbEIsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDdkI7Z0JBRUQsSUFBSSxNQUFNLENBQUMsR0FBRyxFQUFFO29CQUNkLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUNoRTtnQkFFRCxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUU7b0JBQ3BCLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUNqRTtnQkFFRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUU7b0JBQ2YsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ3ZEO2dCQUVELElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQ3BCLEdBQUcsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztpQkFDOUI7YUFDRjtZQUVELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBb0IsR0FBRyxDQUFDLENBQUM7UUFDbEQsQ0FBQztLQUFBO0lBV1ksZ0JBQWdCLENBQzNCLElBQVksRUFDWixLQUFhLEVBQ2IsS0FBYSxFQUNiLE1BQWdDOztZQUVoQyxJQUFJLEdBQUcsR0FBRyxTQUFTLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLGtCQUFrQixDQUMvRCxLQUFLLENBQ04sSUFBSSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO1lBRTFDLElBQUksTUFBTSxFQUFFO2dCQUNWLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDakIsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFO29CQUNsQixLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUN2QjtnQkFFRCxJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ2hFO2dCQUVELElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRTtvQkFDcEIsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ2pFO2dCQUVELElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQ3BCLEdBQUcsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztpQkFDOUI7YUFDRjtZQUVELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBb0IsR0FBRyxDQUFDLENBQUM7UUFDbEQsQ0FBQztLQUFBO0lBV1ksT0FBTyxDQUNsQixJQUFZLEVBQ1osS0FBYSxFQUNiLEtBQWEsRUFDYixNQUE2Qjs7WUFFN0IsTUFBTSxHQUFHLEdBQUcsU0FBUyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxrQkFBa0IsQ0FDakUsS0FBSyxDQUNOLElBQUksa0JBQWtCLENBQUMsS0FBSyxDQUFDLEdBQzVCLE1BQU0sSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQzFDLEVBQUUsQ0FBQztZQUNILE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBZSxHQUFHLENBQUMsQ0FBQztRQUM3QyxDQUFDO0tBQUE7SUFZWSxjQUFjLENBQ3pCLElBQVksRUFDWixLQUFhLEVBQ2IsS0FBYSxFQUNiLEdBQVc7O1lBRVgsTUFBTSxHQUFHLEdBQUcsU0FBUyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxrQkFBa0IsQ0FDakUsS0FBSyxDQUNOLElBQUksa0JBQWtCLENBQUMsS0FBSyxDQUFDLGFBQWEsa0JBQWtCLENBQzNELEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FDZixFQUFFLENBQUM7WUFDSixPQUFPLElBQUksQ0FBQyxXQUFXLENBQWUsR0FBRyxDQUFDLENBQUM7UUFDN0MsQ0FBQztLQUFBO0lBVVksUUFBUSxDQUNuQixJQUFvQixFQUNwQixNQUE2Qjs7O1lBRTdCLE1BQU0sZUFBZSxHQUF3QixFQUFFLENBQUM7WUFDaEQsTUFBTSxjQUFjLEdBQXdCLEVBQUUsT0FBTyxFQUFFLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxPQUFPLEVBQUUsQ0FBQztZQUV6RSxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBZ0IsQ0FBQztZQUN0QyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUMxQixLQUFLLENBQUMsR0FBRyxDQUFDO29CQUNSLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztvQkFDakIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO29CQUNqQixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ1QsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2lCQUNoQixDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUNILGVBQWUsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUUxQyxNQUFNLGdCQUFnQixHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FDMUMsZUFBZSxFQUNmLGNBQWMsQ0FDZixDQUFDO1lBQ0YsTUFBTSxRQUFRLEdBQ1osSUFBSSwwQkFBZSxDQUNqQixJQUFJLEVBQ0osZ0JBQWdCLENBQUMsUUFBUSxFQUN6QixFQUFFLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsQ0FDdkQsQ0FBQztZQUVKLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUU7Z0JBQzNDLE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxFQUFXLENBQUM7Z0JBQ3ZDLE1BQUEsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLDBDQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO29CQUN4RCxXQUFXLENBQUMsR0FBRyxDQUFDO3dCQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSzt3QkFDakIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO3dCQUNqQixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7d0JBQ1QsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO3FCQUNoQixDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUNuRDtZQUVELE9BQU8sUUFBUSxDQUFDOztLQUNqQjtJQVlZLG9CQUFvQixDQUMvQixLQUFhLEVBQ2IsS0FBYSxFQUNiLEtBQWtCLEVBQ2xCLE1BQTZCOzs7WUFFN0IsTUFBTSxlQUFlLEdBQXdCLEVBQUUsQ0FBQztZQUNoRCxNQUFNLGNBQWMsR0FBd0IsRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLE9BQU8sRUFBRSxDQUFDO1lBRXpFLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxFQUFnQixDQUFDO1lBQ3RDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQzNCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDcEMsQ0FBQyxDQUFDLENBQUM7WUFDSCxlQUFlLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFMUMsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQzFDLGVBQWUsRUFDZixjQUFjLENBQ2YsQ0FBQztZQUNGLE1BQU0sUUFBUSxHQUNaLElBQUksMEJBQWUsQ0FDakIsSUFBSSxFQUNKLGdCQUFnQixDQUFDLFFBQVEsRUFDekIsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLElBQUksRUFBRSxFQUFFLENBQ3ZELENBQUM7WUFFSixJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFO2dCQUMzQyxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO2dCQUN0QyxNQUFBLGdCQUFnQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSywwQ0FBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDeEQsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzdCLENBQUMsQ0FBQyxDQUFDO2dCQUNILFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDbkQ7WUFFRCxPQUFPLFFBQVEsQ0FBQzs7S0FDakI7SUFVWSxRQUFRLENBQ25CLE9BQTRCLEVBQzVCLE1BQTRCOztZQUU1QixJQUFJLEdBQUcsR0FBRyxXQUFXLENBQUM7WUFFdEIsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUNqQixJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUU7b0JBQ2xCLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQ3ZCO2dCQUVELElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQ3BCLEdBQUcsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztpQkFDOUI7YUFDRjtZQUVELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FDckIsR0FBRyxFQUNILE1BQU0sRUFDTixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUN4QixDQUFDO1FBQ0osQ0FBQztLQUFBO0lBV1ksVUFBVSxDQUNyQixJQUFZLEVBQ1osS0FBYSxFQUNiLEtBQWEsRUFDYixPQUFvQjs7WUFFcEIsTUFBTSxHQUFHLEdBQUcsU0FBUyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxrQkFBa0IsQ0FDakUsS0FBSyxDQUNOLElBQUksa0JBQWtCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNqQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQ3JCLEdBQUcsRUFDSCxPQUFPLEVBQ1AsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FDeEIsQ0FBQztRQUNKLENBQUM7S0FBQTtJQVdZLFVBQVUsQ0FDckIsSUFBWSxFQUNaLEtBQWEsRUFDYixLQUFhLEVBQ2IsTUFBc0I7O1lBRXRCLE1BQU0sR0FBRyxHQUFHLFNBQVMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksa0JBQWtCLENBQ2pFLEtBQUssQ0FDTixJQUFJLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFFakMsSUFBSSxPQUE0QixDQUFDO1lBQ2pDLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFO2dCQUNwQyxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2FBQzFEO1lBRUQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFlLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzNFLENBQUM7S0FBQTtJQVFZLFNBQVMsQ0FDcEIsU0FBK0I7O1lBSS9CLE1BQU0sR0FBRyxHQUFHLGlCQUFpQixDQUFDO1lBRTlCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FDckIsR0FBRyxFQUNILE1BQU0sRUFDTixJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUMxQixDQUFDO1FBQ0osQ0FBQztLQUFBO0lBT1ksY0FBYzs7WUFHekIsTUFBTSxHQUFHLEdBQUcsdUJBQXVCLENBQUM7WUFFcEMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUE2QixHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbkUsQ0FBQztLQUFBO0lBUVksZUFBZSxDQUMxQixXQUFtQjs7WUFFbkIsTUFBTSxHQUFHLEdBQUcsbUJBQW1CLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFFakUsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUF3QixHQUFHLENBQUMsQ0FBQztRQUN0RCxDQUFDO0tBQUE7SUFPWSxXQUFXOztZQUN0QixNQUFNLEdBQUcsR0FBRyxXQUFXLENBQUM7WUFDeEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUF5QixHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDOUQsQ0FBQztLQUFBO0NBQ0Y7QUF0NEJELG9CQXM0QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEZWxldGVPcHRpb25zLFxuICBHZXRPcHRpb25zLFxuICBMaXN0T3B0aW9ucyxcbiAgUGFnZWRJdGVtcyxcbiAgUmVzb3VyY2VJZGVudGl0eVdpdGhFcnJvcixcbiAgVXNlckluZm9HZXRPcHRpb25zLFxuICBVc2VySW5mb1Jlc3BvbnNlLFxuICBXU1N1YnNjcmlwdGlvblJlc3BvbnNlLFxufSBmcm9tICcuL2NvbW1vbic7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgUG9saWN5IH0gZnJvbSAnLi9wb2xpY3knO1xuaW1wb3J0IHsgU2VydmljZVJlc3BvbnNlIH0gZnJvbSAnLi9yZXNwb25zZSc7XG5pbXBvcnQgeyBTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tIGNvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBjb25zdCBEZWZhdWx0UFNldFNlcnZpY2VVcmkgPSAnaHR0cHM6Ly9wc2V0LWFwaS5jb25uZWN0LnRyaW1ibGUuY29tL3YxLyc7XG5cbmNvbnN0IFBzZXRTZXJ2aWNlVXJpTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1xuICBbJ3VzLWVhc3QtMScsICdodHRwczovL3BzZXQtYXBpLnVzLWVhc3QtMS5jb25uZWN0LnRyaW1ibGUuY29tL3YxLyddLFxuICBbJ2FwLXNvdXRoZWFzdC0xJywgJ2h0dHBzOi8vcHNldC1hcGkuYXAtc291dGhlYXN0LTEuY29ubmVjdC50cmltYmxlLmNvbS92MS8nXSxcbiAgWydldS13ZXN0LTEnLCAnaHR0cHM6Ly9wc2V0LWFwaS5ldS13ZXN0LTEuY29ubmVjdC50cmltYmxlLmNvbS92MS8nXSxcbl0pO1xuXG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBnZXREZWZhdWx0Q29uZmlndXJhdGlvbigpOiBDb25maWd1cmF0aW9uIHtcbiAgcmV0dXJuIHtcbiAgICByZWdpb246ICdldS13ZXN0LTEnLFxuICAgIHNlcnZpY2VVcmk6IERlZmF1bHRQU2V0U2VydmljZVVyaSxcbiAgfTtcbn1cblxuLyoqXG4gKiBUaGUgcmVxdWVzdCBib2R5IGZvciB0aGUgQHNlZSBQU2V0I2NyZWF0ZUxpYnJhcnkgb3BlcmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUxpYnJhcnlSZXF1ZXN0IHtcbiAgLyoqIFRoZSBvcHRpb25hbCBpZGVudGlmaWVyIGZvciB0aGUgbmV3IGxpYnJhcnksIGlmIG5vdCBwcm92aWRlZCBzZXJ2aWNlIHdpbGwgZ2VuZXJhdGUgYW4gdW5pcXVlIGlkZW50aWZpZXIuICovXG4gIGlkPzogc3RyaW5nO1xuICAvKiogVGhlIGFjY2VzcyBjb25yb2wgcG9saWN5IGRvY3VtZW50IHRvIGJlIGF0dGFjaGVkIHRvIHRoZSBsaWJyYXJ5LiAqL1xuICBwb2xpY3k/OiBQb2xpY3k7XG4gIC8qKiBUaGUgb3B0aW9uYWwgbGlicmFyeSBuYW1lLiAqL1xuICBuYW1lPzogc3RyaW5nO1xuICAvKiogVGhlIG9wdGlvbmFsIGRlc2NyaXB0aW9uLiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcmVxdWVzdCBwYXJhbWV0ZXJzIGZvciB0aGUgQHNlZSBQU2V0I2dldExpYnJhcnkgb3BlcmF0aW9uLlxuICovXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tZW1wdHktaW50ZXJmYWNlXG5leHBvcnQgaW50ZXJmYWNlIEdldExpYnJhcnlPcHRpb25zIGV4dGVuZHMgR2V0T3B0aW9ucyB7fVxuXG4vKipcbiAqIFRoZSByZXF1ZXN0IHBhcmFtZXRlcnMgZm9yIHRoZSBAc2VlIFBTZXQjZ2V0RGVmaW5pdGlvbiBvcGVyYXRpb24uXG4gKi9cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1lbXB0eS1pbnRlcmZhY2VcbmV4cG9ydCBpbnRlcmZhY2UgR2V0RGVmaW5pdGlvbk9wdGlvbnMgZXh0ZW5kcyBHZXRPcHRpb25zIHt9XG5cbi8qKlxuICogVGhlIHJlcXVlc3QgYm9keSBmb3IgdGhlIEBzZWUgUFNldCN1cGRhdGVMaWJyYXJ5IG9wZXJhdGlvbi5cbiAqIEFsbCBwcm9wZXJ0aWVzIGFyZSBvcHRpb25hbCwgaWYgcHJvcGVydHkgaXMgbm90IHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0IHRoZSBwcm9wZXJ0eSB3aWxsIHJldGFpbiBpdCdzIG9sZCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVMaWJyYXJ5UmVxdWVzdCB7XG4gIC8qKlxuICAgKiBUaGUgbGFzdCBzZWVuIHZlcnNpb24gb2YgdGhlIHRyZWUgZGVzY3JpcHRvci5cbiAgICogSWYgcHJvdmlkZWQgc2VydmljZSB3aWxsIHVzZSB0aGlzIGluZm9ybWF0aW9uIGZvciB0aGUgY29uY3VyZW5jeSBjb250cm9sIGFuZCB3aWxsIHJlZnVzZSB0byBhcHBseSBjaGFuZ2VzIGlmIGN1cnJlbnQgdmVyc2lvbiBpcyBub3QgZXF1YWwgdG8gdmVyc2lvbiBwcm92aWRlZCBpbiB0aGUgcmVxdWVzdC5cbiAgICovXG4gIHY/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgYWNjZXNzIGNvbnJvbCBwb2xpY3kgZG9jdW1lbnQgdG8gYmUgYXR0YWNoZWQgdG8gdGhlIGxpYnJhcnkuXG4gICAqIElmIHByb3BlcnR5IGlzIHNwZWNpZmllZCBjYWxsZXIgbXVzdCBoYXZlIG9yZzpVcGRhdGVMaWJyYXJ5UG9saWN5IHJpZ2h0IHRvIGV4ZWN1dGUgdGhpcyBvcGVyYXRpb24gaW4gYWRkaXRpb24gdG8gb3JnOlVwZGF0ZUxpYnJhcnkuXG4gICAqL1xuICBwb2xpY3k/OiBQb2xpY3k7XG4gIC8qKiBUaGUgbmV3IG5hbWUuICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKiBUaGUgbmV3IGRlc2NyaXB0aW9uLiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgdHJlZSBkZXNjcmlwdG9yIHJldHVybmVkIGZyb20gQHNlZSBQU2V0I2NyZWF0ZUxpYnJhcnkgLCBAc2VlIFBTZXQjdXBkYXRlTGlicmFyeSAsIEBzZWUgUFNldCNkZWxldGVMaWJyYXJ5IGFuZCBAc2VlIFBTZXQjZ2V0TGlicmFyeSBvcGVyYXRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpYnJhcnlSZXNwb25zZSB7XG4gIC8qKiBUaGUgdW5pcXVlIGxpYnJhcnkgaWRlbnRpZmllci4gKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIFRoZSBjcmVhdGlvbiB0aW1lc3RhbXAgaW4gSVNPIGZvcm1hdC4gKi9cbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIC8qKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgcHJpbmNpcGFsIHdobyBjcmVhdGVkIHRoZSB0cmVlLiAqL1xuICBjcmVhdGVkQnk6IHN0cmluZztcbiAgLyoqIFRoZSBsYXN0IG1vZGlmaWNhdGlvbiB0aW1lc3RhbXAgaW4gSVNPIGZvcm1hdC4gKi9cbiAgbW9kaWZpZWRBdDogc3RyaW5nO1xuICAvKiogVGhlIGlkZW50aWZpZXIgb2YgdGhlIHByaW5jaWxhdCB3aG8gbGFzdCBtb2RpZmllZCB0aGUgdHJlZSBkZXNjcmlwdG9yLiAqL1xuICBtb2RpZmllZEJ5OiBzdHJpbmc7XG4gIC8qKiBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSB0cmVlIGRlc2NyaXB0b3IuICovXG4gIHY6IG51bWJlcjtcbiAgLyoqIFRoZSBhY2Nlc3MgY29ucm9sIHBvbGljeSBkb2N1bWVudCBhdHRhY2hlZCB0byB0aGUgbGlicmFyeS4gVGhpcyBwcm9wZXJ0eSBpcyByZXR1cm5lZCBvbmx5IGlmIGNhbGxlciBoYXMgcHNldDpHZXRMaWJyYXJ5UG9saWN5IHJpZ2h0LiAqL1xuICBwb2xpY3k/OiBQb2xpY3k7XG4gIC8qKiBUaGUgZGVsZXRpb24gbWFya2VyLiBJZiBub3QgcHJlc2VudCBvciBmYWxzZSB0aGUgdHJlZSBpcyBhY3RpdmUsIG90aGVyd2lzZSB0aGUgdHJlZSBpcyBtYXJrZWQgYXMgZGVsZXRlZC4gKi9cbiAgZGVsZXRlZD86IGJvb2xlYW47XG4gIC8qKiBUaGUgbGlicmFyeSBuYW1lLiAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBUaGUgb3B0aW9uYWwgZGVzY3JpcHRpb24uICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKiogVGhlIGNvbGxlY3Rpb24gb2YgYWN0aW9ucyBjdXJyZW50IHVzZXIgaGFzIHJpZ2h0cyB0byBwZXJmb3JtIG9uIHRoaXMgcmVzb3VyY2UgYXQgdGhlIG1vbWVudCB0aGUgcmVzcG9uc2UgaXMgZ2VuZXJhdGVkIGJ5IHNlcnZpY2UuIE5vdCByZXR1cm5lZCB3aGVuIHNwZWNpZmljIHZlcnNpb24gaXMgcmVxdWVzdGVkLiAqL1xuICBfYWN0aW9ucz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFRoZSByZXF1ZXN0IGJvZHkgZm9yIHRoZSBAc2VlIFBTZXQjY3JlYXRlRGVmaW5pdGlvbiBvcGVyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlRGVmaW5pdGlvblJlcXVlc3Qge1xuICAvKiogVGhlIG9wdGlvbmFsIGlkZW50aWZpZXIgZm9yIHRoZSBuZXcgcHNldCBkZWZpbml0aW9uLCBpZiBub3QgcHJvdmlkZWQgc2VydmljZSB3aWxsIGdlbmVyYXRlIGFuIHVuaXF1ZSBpZGVudGlmaWVyLiAqL1xuICBpZD86IHN0cmluZztcbiAgLyoqIFRoZSBwc2V0IG5hbWUuICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIFRoZSBvcHRpb25hbCBkZXNjcmlwdGlvbi4gKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKiBUaGUgb3B0aW9uYWwgY29sbGVjdGlvbiBvZiByZXNvdXJjZSB0eXBlcyB0aGUgcHNldCBhcHBsaWNhYmxlIHRvLiAqL1xuICB0eXBlcz86IHN0cmluZ1tdO1xuICAvKiogVGhlIHBzZXQgc2NoZW1hLiAqL1xuICBzY2hlbWE6IG9iamVjdDtcbiAgLyoqIFRoZSBpbnRlcm5hdGlvbmFsaXphdGlvbiBwYXJ0IHdpdGggdHJhbnNsYXRpb24gdGFibGVzLiAqL1xuICBpMThuPzogb2JqZWN0O1xufVxuXG4vKipcbiAqIFRoZSByZXF1ZXN0IGJvZHkgZm9yIHRoZSBAc2VlIFBTZXQjdXBkYXRlRGVmaW5pdGlvbiBvcGVyYXRpb24uXG4gKiBBbGwgcHJvcGVydGllcyBhcmUgb3B0aW9uYWwsIGlmIHByb3BlcnR5IG5vdCBwcm92aWRlZCBpbiB0aGUgcmVxdWVzdCB0aGUgcHJvcGVydHkgd2lsbCByZXRhaW4gaXQncyBvbGQgdmFsdWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlRGVmaW5pdGlvblJlcXVlc3Qge1xuICAvKipcbiAgICogVGhlIGxhc3Qgc2VlbiB2ZXJzaW9uIG9mIHRoZSB0cmVlIGRlc2NyaXB0b3IuXG4gICAqIElmIHByb3ZpZGVkIHNlcnZpY2Ugd2lsbCB1c2UgdGhpcyBpbmZvcm1hdGlvbiBmb3IgdGhlIGNvbmN1cmVuY3kgY29udHJvbCBhbmQgd2lsbCByZWZ1c2UgdG8gYXBwbHkgY2hhbmdlcyBpZiBjdXJyZW50IHZlcnNpb24gaXMgbm90IGVxdWFsIHRvIHZlcnNpb24gcHJvdmlkZWQgaW4gdGhlIHJlcXVlc3QuXG4gICAqL1xuICB2PzogbnVtYmVyO1xuICAvKiogVGhlIG5ldyBuYW1lLiAqL1xuICBuYW1lPzogc3RyaW5nO1xuICAvKiogVGhlIG5ldyBkZXNjcmlwdGlvbi4gKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKiBUaGUgbmV3IGNvbGxlY3Rpb24gb2YgcmVzb3VyY2UgdHlwZXMgdGhlIHBzZXQgYXBwbGljYWJsZSB0by4gKi9cbiAgdHlwZXM/OiBzdHJpbmdbXTtcbiAgLyoqIFRoZSBuZXcgcHNldCBzY2hlbWEuICovXG4gIHNjaGVtYT86IG9iamVjdDtcbiAgLyoqIFRoZSBpbnRlcm5hdGlvbmFsaXphdGlvbiBwYXJ0IHdpdGggdHJhbnNsYXRpb24gdGFibGVzLiAqL1xuICBpMThuPzogb2JqZWN0O1xufVxuXG4vKipcbiAqIFRoZSBwc2V0IGRlZmluaXRpb24gZGVzY3JpcHRvciByZXR1cm5lZCBmcm9tIEBzZWUgUFNldCNjcmVhdGVEZWZpbml0aW9uLCBAc2VlIFBTZXQjdXBkYXRlRGVmaW5pdGlvbiwgQHNlZSBQU2V0I2RlbGV0ZU5vZGUsIEBzZWUgUFNldCNnZXREZWZpbml0aW9uIGFuZCBAc2VlIE9yZ2FuaXNlciNnZXREZWZpbml0aW9uVmVyc2lvbiBvcGVyYXRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlZmluaXRpb25SZXNwb25zZSB7XG4gIC8qKiBUaGUgbGlicmFyeSBpZGVudGlmaWVyLiAqL1xuICBsaWJJZDogc3RyaW5nO1xuICAvKiogVGhlIGRlZmluaXRpb24gaWRlbnRpZmllci4gVW5pcXVlIGluc2lkZSB0aGUgbGlicmFyeS4gKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIFRoZSBjcmVhdGlvbiB0aW1lc3RhbXAgaW4gSVNPIGZvcm1hdC4gKi9cbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIC8qKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgcHJpbmNpcGFsIHdobyBjcmVhdGVkIHRoZSBub2RlLiAqL1xuICBjcmVhdGVkQnk6IHN0cmluZztcbiAgLyoqIFRoZSBsYXN0IG1vZGlmaWNhdGlvbiB0aW1lc3RhbXAgaW4gSVNPIGZvcm1hdC4gKi9cbiAgbW9kaWZpZWRBdDogc3RyaW5nO1xuICAvKiogVGhlIGlkZW50aWZpZXIgb2YgdGhlIHByaW5jaWxhdCB3aG8gbGFzdCBtb2RpZmllZCB0aGUgbm9kZS4gKi9cbiAgbW9kaWZpZWRCeTogc3RyaW5nO1xuICAvKiogVGhlIHZlcnNpb24gbnVtYmVyLiAqL1xuICB2OiBudW1iZXI7XG4gIC8qKiBUaGUgZGVsZXRpb24gbWFya2VyLiBJZiBub3QgcHJlc2VudCBvciBmYWxzZSB0aGUgbm9kZSBpcyBhY3RpdmUsIG90aGVyd2lzZSB0aGUgbm9kZSBpcyBtYXJrZWQgYXMgZGVsZXRlZC4gKi9cbiAgZGVsZXRlZD86IGJvb2xlYW47XG4gIC8qKiBUaGUgbmFtZS4gKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogVGhlIG9wdGlvbmFsIGRlc2NyaXB0aW9uLiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqIFRoZSBjb2xsZWN0aW9uIG9mIHJlc291cmNlIHR5cGVzIHRoZSBwc2V0IGFwcGxpY2FibGUgdG8uIElmIG5vdCBwcmVzZW50IHBzZXQgY2FuIGJlIGF0dGFjaGVkIHRvIGFsbCByZXNvdXJjZSB0eXBlcy4gKi9cbiAgdHlwZXM/OiBzdHJpbmdbXTtcbiAgLyoqIFRoZSBwc2V0IHNjaGVtYS4gKi9cbiAgc2NoZW1hOiBvYmplY3Q7XG4gIC8qKiBUaGUgaW50ZXJuYXRpb25hbGl6YXRpb24gcGFydCB3aXRoIHRyYW5zbGF0aW9uIHRhYmxlcy4gKi9cbiAgaTE4bjogb2JqZWN0O1xuICAvKiogVGhlIGNvbGxlY3Rpb24gb2YgYWN0aW9ucyBjdXJyZW50IHVzZXIgaGFzIHJpZ2h0cyB0byBwZXJmb3JtIG9uIHRoaXMgcmVzb3VyY2UgYXQgdGhlIG1vbWVudCB0aGUgcmVzcG9uc2UgaXMgZ2VuZXJhdGVkIGJ5IHNlcnZpY2UuIE5vdCByZXR1cm5lZCB3aGVuIHNwZWNpZmljIHZlcnNpb24gaXMgcmVxdWVzdGVkLiAqL1xuICBfYWN0aW9ucz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFRoZSByZXF1ZXN0IG9wdGlvbnMgdG8gdmFsaWRhdGUgcHNldHMgYWdhaW5zdCBhIG5ldyBzY2hlbWEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBpZiBkZWZpbmVkIGFuZCB0cnVlIGluZm9ybXMgc2VydmVyIHRoYXQgZW50aXRpZXMgbWFya2VkIGFzIGRlbGV0ZWQgc2hvdWxkIGJlIHJldHVybmVkIGFzIHdlbGwuXG4gICAqIFRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIHRvIHNraXAvaGlkZSBlbnRpdGllZCBtYXJrZWQgYXMgZGVsZXRlZC5cbiAgICovXG4gIGRlbGV0ZWQ/OiBib29sZWFuO1xuICAvKiogVGhlIHNraXAgdG9rZW4gdXNlZCBhIGFzIGN1cnNvciB0byBpbmRpY2F0ZSB0aGUgcGxhY2Ugd2hlcmUgbmV4dCBwYWdlIG9mIHJlc3VsdHMgc2hvdWxkIGZldGNoZWQgZnJvbS4gKi9cbiAgc2tpcHRva2VuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSByZXF1ZXN0IGJvZHkgZm9yIHRoZSBAc2VlIFBTZXQjdmFsaWRhdGUgb3BlcmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRlUmVxdWVzdCB7XG4gIC8qKiBUaGUgc2NoZW1hIHRvIHZhbGlkYXRlIGV4aXN0aW5nIGRhdGEgYWdhaW5zdC4gKi9cbiAgc2NoZW1hOiBvYmplY3Q7XG59XG5cbi8qKlxuICogVGhlIHJlc3BvbnNlIGJvZHkgZm9yIHRoZSBAc2VlIFBTZXQjdmFsaWRhdGUgb3BlcmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRlUmVzcG9uc2Uge1xuICAvKiogVGhlIG51bWJlciBvZiB2YWxpZCBwc2V0cy4gKi9cbiAgdmFsaWRJdGVtc0NvdW50OiBudW1iZXI7XG4gIC8qKiBUaGUgbnVtYmVyIG9mIG5vdCB2YWxpZCBwc2V0cy4gKi9cbiAgaW52YWxpZEl0ZW1zQ291bnQ6IG51bWJlcjtcbiAgLyoqIFRoZSBjb2xsZWN0aW9uIG9mIGVycm9yIG1lc3NhZ2VzIGZvciBmb3VuZCBpbnZhbGlkIHBzZXRzLiBPbmx5IGZpcnN0IDEwMCB1bmlxdWUgZXJyb3IgbWVzc2FnZXMgYXJlIHJldHVybmVkLiAqL1xuICBlcnJvcnM/OiBzdHJpbmdbXTtcbiAgLyoqIFRoZSBsaW5rIHRvIHRoZSBuZXh0IHBhZ2UuIElmIG5vdCBwcmVzZW50LCB0aGlzIGlzIHRoZSBsYXN0IHBhZ2UuICovXG4gIG5leHQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGRlLXNlcmlhbGl6ZWQgZGF0YSByZXR1cm5lZCBmcm9tIHRoZSByZXF1ZXN0IHdpdGggbGlzdCBvZiBwc2V0IGRlZmluaXRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpc3REZWZpbml0aW9uc1Jlc3BvbnNlXG4gIGV4dGVuZHMgUGFnZWRJdGVtczxEZWZpbml0aW9uUmVzcG9uc2U+IHt9XG5cbi8qKlxuICogVGhlIGR