trimble-connect-sdk
Version:
Trimble Connect SDK for JavaScript
396 lines • 105 kB
JavaScript
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());
});
};
import { isBrowser, isWebWorker } from 'browser-or-node';
import { ServiceResponse } from './response';
import { Service } from './service';
export const DefaultOrganizerServiceUri = 'https://org-api.connect.trimble.com/v1/';
const OrgServiceUriMap = new Map([
['us-east-1', 'https://org-api.us-east-1.connect.trimble.com/v1/'],
['ap-southeast-1', 'https://org-api.ap-southeast-1.connect.trimble.com/v1/'],
['ap-southeast-2', 'https://org-api.ap-southeast-2.connect.trimble.com/v1/'],
['eu-west-1', 'https://org-api.eu-west-1.connect.trimble.com/v1/'],
['eu-west-2', 'https://org-api.eu-west-2.connect.trimble.com/v1/'],
]);
function getDefaultConfiguration() {
return {
region: 'eu-west-1',
serviceUri: DefaultOrganizerServiceUri,
};
}
export class Organizer extends Service {
constructor(config) {
const sanitizedConfig = Object.assign({}, config);
if (sanitizedConfig &&
sanitizedConfig.region &&
sanitizedConfig.serviceUri === undefined) {
if (OrgServiceUriMap.has(sanitizedConfig.region)) {
sanitizedConfig.serviceUri = OrgServiceUriMap.get(sanitizedConfig.region);
}
else {
throw new Error(`Unknown region: ${sanitizedConfig.region}, allowed values ${Array.from(OrgServiceUriMap.keys()).join(', ')}`);
}
}
super(Object.assign(Object.assign({}, getDefaultConfiguration()), sanitizedConfig));
}
getUserInfo() {
return __awaiter(this, void 0, void 0, function* () {
return this.makeRequest('me');
});
}
listTrees(forestId, params) {
return __awaiter(this, void 0, void 0, function* () {
let url = `forests/${encodeURIComponent(forestId)}/trees`;
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.fields) {
query.push(`fields=${encodeURIComponent(params.fields)}`);
}
if (query.length > 0) {
url += `?${query.join('&')}`;
}
}
return this.makeRequest(url);
});
}
getTree(forestId, treeId, params) {
return __awaiter(this, void 0, void 0, function* () {
let url = `forests/${encodeURIComponent(forestId)}/trees/${encodeURIComponent(treeId)}`;
if (params) {
const query = [];
if (params.deleted) {
query.push('deleted');
}
if (params.fields) {
query.push(`fields=${encodeURIComponent(params.fields)}`);
}
if (query.length > 0) {
url += `?${query.join('&')}`;
}
}
return this.makeRequest(url);
});
}
createTree(forestId, request, params) {
return __awaiter(this, void 0, void 0, function* () {
let url = `forests/${encodeURIComponent(forestId)}/trees`;
if (params === null || params === void 0 ? void 0 : params.fields) {
url += `?fields=${encodeURIComponent(params.fields)}`;
}
return this.makeRequest(url, 'POST', JSON.stringify(request));
});
}
updateTree(forestId, treeId, request, params) {
return __awaiter(this, void 0, void 0, function* () {
let url = `forests/${encodeURIComponent(forestId)}/trees/${encodeURIComponent(treeId)}`;
if (params === null || params === void 0 ? void 0 : params.fields) {
url += `?fields=${encodeURIComponent(params.fields)}`;
}
return this.makeRequest(url, 'PATCH', JSON.stringify(request));
});
}
deleteTree(forestId, treeId, params) {
return __awaiter(this, void 0, void 0, function* () {
const url = `forests/${encodeURIComponent(forestId)}/trees/${encodeURIComponent(treeId)}`;
let headers;
if (params && params.v !== undefined) {
headers = new Headers({ 'If-Match': `W/"${params.v}"` });
}
return this.makeRequest(url, 'DELETE', undefined, headers);
});
}
getTreePolicy(forestId, treeId) {
return __awaiter(this, void 0, void 0, function* () {
const url = `forests/${encodeURIComponent(forestId)}/trees/${encodeURIComponent(treeId)}/policy`;
return this.makeRequest(url);
});
}
putTreePolicy(forestId, treeId, policy) {
return __awaiter(this, void 0, void 0, function* () {
const url = `forests/${encodeURIComponent(forestId)}/trees/${encodeURIComponent(treeId)}/policy`;
return this.makeRequest(url, 'PUT', JSON.stringify(policy));
});
}
searchNodes(forestId, params) {
return __awaiter(this, void 0, void 0, function* () {
let url = params.treeId
? `forests/${encodeURIComponent(forestId)}/trees/${encodeURIComponent(params.treeId)}/search`
: `forests/${encodeURIComponent(forestId)}/search`;
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 (params.nolinks) {
query.push('nolinks');
}
if (params.fields) {
query.push(`fields=${encodeURIComponent(params.fields)}`);
}
if (query.length > 0) {
url += `?${query.join('&')}`;
}
}
return this.makeRequest(url);
});
}
listNodes(forestId, treeId, params) {
return __awaiter(this, void 0, void 0, function* () {
let url = `forests/${encodeURIComponent(forestId)}/trees/${encodeURIComponent(treeId)}/nodes`;
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.nolinks) {
query.push('nolinks');
}
if (params.fields) {
query.push(`fields=${encodeURIComponent(params.fields)}`);
}
if (query.length > 0) {
url += `?${query.join('&')}`;
}
}
return this.makeRequest(url);
});
}
listNodeVersions(forestId, treeId, nodeId, params) {
return __awaiter(this, void 0, void 0, function* () {
let url = `forests/${encodeURIComponent(forestId)}/trees/${encodeURIComponent(treeId)}/nodes/${encodeURIComponent(nodeId)}/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 (params.nolinks) {
query.push('nolinks');
}
if (params.fields) {
query.push(`fields=${encodeURIComponent(params.fields)}`);
}
if (query.length > 0) {
url += `?${query.join('&')}`;
}
}
return this.makeRequest(url);
});
}
getNode(forestId, treeId, nodeId, params) {
return __awaiter(this, void 0, void 0, function* () {
let url = `forests/${encodeURIComponent(forestId)}/trees/${encodeURIComponent(treeId)}/nodes/${encodeURIComponent(nodeId)}`;
if (params) {
const query = [];
if (params.deleted) {
query.push('deleted');
}
if (params.nolinks) {
query.push('nolinks');
}
if (params.fields) {
query.push(`fields=${encodeURIComponent(params.fields)}`);
}
if (query.length > 0) {
url += `?${query.join('&')}`;
}
}
return this.makeRequest(url);
});
}
getNodeLinks(forestId, treeId, nodeId, params) {
return __awaiter(this, void 0, void 0, function* () {
const url = `forests/${encodeURIComponent(forestId)}/trees/${encodeURIComponent(treeId)}/nodes/${encodeURIComponent(nodeId)}/links${params && params.deleted ? '?deleted' : ''}`;
return this.makeRequest(url);
});
}
createNode(forestId, treeId, node, params) {
return __awaiter(this, void 0, void 0, function* () {
let url = `forests/${encodeURIComponent(forestId)}/trees/${encodeURIComponent(treeId)}/nodes`;
if (params === null || params === void 0 ? void 0 : params.fields) {
url += `?fields=${encodeURIComponent(params.fields)}`;
}
return this.makeRequest(url, 'POST', JSON.stringify(node));
});
}
updateNode(forestId, treeId, nodeId, node, params) {
return __awaiter(this, void 0, void 0, function* () {
let url = `forests/${encodeURIComponent(forestId)}/trees/${encodeURIComponent(treeId)}/nodes/${encodeURIComponent(nodeId)}`;
if (params === null || params === void 0 ? void 0 : params.fields) {
url += `?fields=${encodeURIComponent(params.fields)}`;
}
return this.makeRequest(url, 'PATCH', JSON.stringify(node));
});
}
deleteNode(forestId, treeId, nodeId, params) {
return __awaiter(this, void 0, void 0, function* () {
const url = `forests/${encodeURIComponent(forestId)}/trees/${encodeURIComponent(treeId)}/nodes/${encodeURIComponent(nodeId)}`;
let headers;
if (params && params.v !== undefined) {
headers = new Headers({ 'If-Match': `W/"${params.v}"` });
}
return this.makeRequest(url, 'DELETE', undefined, headers);
});
}
getNodeGeometry(forestId, treeId, nodeId, params) {
return __awaiter(this, void 0, void 0, function* () {
if (!isBrowser && !isWebWorker) {
throw new Error('Not supported in NodeJS environment.');
}
const url = `forests/${encodeURIComponent(forestId)}/trees/${encodeURIComponent(treeId)}/nodes/${encodeURIComponent(nodeId)}`;
return this.commonGetNodeGeometry(url, !!(params && params.deleted));
});
}
getNodeVersionGeometry(forestId, treeId, nodeId, version) {
return __awaiter(this, void 0, void 0, function* () {
if (!isBrowser && !isWebWorker) {
throw new Error('Not supported in NodeJS environment.');
}
const url = `forests/${encodeURIComponent(forestId)}/trees/${encodeURIComponent(treeId)}/nodes/${encodeURIComponent(nodeId)}/versions/${version}`;
return this.commonGetNodeGeometry(url, false);
});
}
putNodeGeometry(forestId, treeId, nodeId, data, params) {
return __awaiter(this, void 0, void 0, function* () {
if (!isBrowser && !isWebWorker) {
throw new Error('Not supported in NodeJS environment.');
}
const headers = new Headers({ 'Content-Type': data.type });
if (params && params.v !== undefined) {
headers.set('If-Match', `W/"${params.v}"`);
}
const url = `forests/${encodeURIComponent(forestId)}/trees/${encodeURIComponent(treeId)}/nodes/${encodeURIComponent(nodeId)}/geometry`;
return this.request(url, 'PUT', data, headers);
});
}
batchGetNodes(forestId, treeId, request, params) {
var _a;
return __awaiter(this, void 0, void 0, function* () {
(_a = request.nodes) === null || _a === void 0 ? void 0 : _a.forEach((node) => {
node.forestId = forestId;
node.treeId = treeId;
});
return this.batchGet(request, params);
});
}
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 (params.nolinks) {
query.push('nolinks');
}
if (params.fields) {
query.push(`fields=${encodeURIComponent(params.fields)}`);
}
if (query.length > 0) {
url += `?${query.join('&')}`;
}
}
return this.makeRequest(url, 'POST', JSON.stringify(request));
});
}
changeset(forestId, treeId, changeset, params) {
return __awaiter(this, void 0, void 0, function* () {
let url = `forests/${encodeURIComponent(forestId)}/trees/${encodeURIComponent(treeId)}/changeset`;
if (params) {
const query = [];
if (params.nolinks) {
query.push('nolinks');
}
if (params.fields) {
query.push(`fields=${encodeURIComponent(params.fields)}`);
}
if (query.length > 0) {
url += `?${query.join('&')}`;
}
}
return this.makeRequest(url, 'POST', JSON.stringify(changeset));
});
}
changesetAsync(forestId, treeId, changesetConfig, params) {
return __awaiter(this, void 0, void 0, function* () {
let url = `forests/${encodeURIComponent(forestId)}/trees/${encodeURIComponent(treeId)}/changeset-async`;
if (params) {
const query = [];
if (params.fields) {
query.push(`fields=${encodeURIComponent(params.fields)}`);
}
if (query.length > 0) {
url += `?${query.join('&')}`;
}
}
return this.makeRequest(url, 'POST', JSON.stringify(changesetConfig));
});
}
changesetStatus(changesetId) {
return __awaiter(this, void 0, void 0, function* () {
const url = `changeset/${encodeURIComponent(changesetId)}`;
return this.makeRequest(url);
});
}
subscribeWS() {
return __awaiter(this, void 0, void 0, function* () {
const url = 'subscribe';
return this.makeRequest(url, 'GET');
});
}
commonGetNodeGeometry(urlWithoutParams, includeDeleted) {
return __awaiter(this, void 0, void 0, function* () {
const urlParams = `?nolinks${includeDeleted ? '&deleted' : ''}`;
const node = yield this.makeRequest(urlWithoutParams + urlParams);
if (node.data.geometry && node.data.geometry.url) {
const geometry = (yield this.request(node.data.geometry.url, 'GET', undefined, undefined, false));
if (geometry.response.status !== 204) {
const blob = yield geometry.response.blob();
geometry.data = blob;
return geometry;
}
}
return new ServiceResponse(this, new Response(), undefined);
});
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemVyLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJvcmdhbml6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQVl6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFJcEMsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQ3JDLHlDQUF5QyxDQUFDO0FBRTVDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQWlCO0lBQy9DLENBQUMsV0FBVyxFQUFFLG1EQUFtRCxDQUFDO0lBQ2xFLENBQUMsZ0JBQWdCLEVBQUUsd0RBQXdELENBQUM7SUFDNUUsQ0FBQyxnQkFBZ0IsRUFBRSx3REFBd0QsQ0FBQztJQUM1RSxDQUFDLFdBQVcsRUFBRSxtREFBbUQsQ0FBQztJQUNsRSxDQUFDLFdBQVcsRUFBRSxtREFBbUQsQ0FBQztDQUNuRSxDQUFDLENBQUM7QUFHSCxTQUFTLHVCQUF1QjtJQUM5QixPQUFPO1FBQ0wsTUFBTSxFQUFFLFdBQVc7UUFDbkIsVUFBVSxFQUFFLDBCQUEwQjtLQUN2QyxDQUFDO0FBQ0osQ0FBQztBQW9nQkQsTUFBTSxPQUFPLFNBQVUsU0FBUSxPQUFPO0lBTXBDLFlBQVksTUFBK0I7UUFDekMsTUFBTSxlQUFlLHFCQUFnQyxNQUFNLENBQUUsQ0FBQztRQUU5RCxJQUNFLGVBQWU7WUFDZixlQUFlLENBQUMsTUFBTTtZQUN0QixlQUFlLENBQUMsVUFBVSxLQUFLLFNBQVMsRUFDeEM7WUFDQSxJQUFJLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ2hELGVBQWUsQ0FBQyxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUMvQyxlQUFlLENBQUMsTUFBTSxDQUN2QixDQUFD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QUFBO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0Jyb3dzZXIsIGlzV2ViV29ya2VyIH0gZnJvbSAnYnJvd3Nlci1vci1ub2RlJztcbmltcG9ydCB7XG4gIERlbGV0ZU9wdGlvbnMsXG4gIEdldE9wdGlvbnMsXG4gIExpc3RPcHRpb25zLFxuICBQYWdlZEl0ZW1zLFxuICBSZXNvdXJjZUlkZW50aXR5V2l0aEVycm9yLFxuICBVc2VySW5mb1Jlc3BvbnNlLFxuICBXU1N1YnNjcmlwdGlvblJlc3BvbnNlLFxufSBmcm9tICcuL2NvbW1vbic7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgUG9saWN5IH0gZnJvbSAnLi9wb2xpY3knO1xuaW1wb3J0IHsgU2VydmljZVJlc3BvbnNlIH0gZnJvbSAnLi9yZXNwb25zZSc7XG5pbXBvcnQgeyBTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tIGNvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBjb25zdCBEZWZhdWx0T3JnYW5pemVyU2VydmljZVVyaSA9XG4gICdodHRwczovL29yZy1hcGkuY29ubmVjdC50cmltYmxlLmNvbS92MS8nO1xuXG5jb25zdCBPcmdTZXJ2aWNlVXJpTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1xuICBbJ3VzLWVhc3QtMScsICdodHRwczovL29yZy1hcGkudXMtZWFzdC0xLmNvbm5lY3QudHJpbWJsZS5jb20vdjEvJ10sXG4gIFsnYXAtc291dGhlYXN0LTEnLCAnaHR0cHM6Ly9vcmctYXBpLmFwLXNvdXRoZWFzdC0xLmNvbm5lY3QudHJpbWJsZS5jb20vdjEvJ10sXG4gIFsnYXAtc291dGhlYXN0LTInLCAnaHR0cHM6Ly9vcmctYXBpLmFwLXNvdXRoZWFzdC0yLmNvbm5lY3QudHJpbWJsZS5jb20vdjEvJ10sXG4gIFsnZXUtd2VzdC0xJywgJ2h0dHBzOi8vb3JnLWFwaS5ldS13ZXN0LTEuY29ubmVjdC50cmltYmxlLmNvbS92MS8nXSxcbiAgWydldS13ZXN0LTInLCAnaHR0cHM6Ly9vcmctYXBpLmV1LXdlc3QtMi5jb25uZWN0LnRyaW1ibGUuY29tL3YxLyddLFxuXSk7XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmZ1bmN0aW9uIGdldERlZmF1bHRDb25maWd1cmF0aW9uKCk6IENvbmZpZ3VyYXRpb24ge1xuICByZXR1cm4ge1xuICAgIHJlZ2lvbjogJ2V1LXdlc3QtMScsXG4gICAgc2VydmljZVVyaTogRGVmYXVsdE9yZ2FuaXplclNlcnZpY2VVcmksXG4gIH07XG59XG5cbi8qKlxuICogVGhlIHJlcXVlc3QgYm9keSBmb3IgdGhlIEBzZWUgT3JnYW5pemVyI2NyZWF0ZVRyZWUgb3BlcmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZVRyZWVSZXF1ZXN0IHtcbiAgLyoqIFRoZSBvcHRpb25hbCBpZGVudGlmaWVyIGZvciB0aGUgbmV3IHRyZWUsIGlmIG5vdCBwcm92aWRlZCBzZXJ2aWNlIHdpbGwgZ2VuZXJhdGUgYW4gdW5pcXVlIGlkZW50aWZpZXIuICovXG4gIGlkPzogc3RyaW5nO1xuICAvKiogVGhlIGFjY2VzcyBjb250cm9sIHBvbGljeSBkb2N1bWVudCB0byBiZSBhdHRhY2hlZCB0byB0aGUgdHJlZS4gKi9cbiAgcG9saWN5PzogUG9saWN5O1xuICAvKiogVGhlIG9wdGlvbmFsIHRyZWUgbmFtZS4gKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqIFRoZSBvcHRpb25hbCBkZXNjcmlwdGlvbi4gKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKiBUaGUgdHlwZSBvZiB0aGUgdHJlZSB0aGF0IGRlZmluZXMgdGhlIHNlbWFudGljLiAqL1xuICB0eXBlOiBzdHJpbmc7XG4gIC8qKiBUaGUgb3B0aW9uYWwgbm9kZSBtZXRhZGF0YS4gKi9cbiAgbWV0YWRhdGE/OiBvYmplY3Q7XG59XG5cbi8qKlxuICogVGhlIHJlcXVlc3QgcGFyYW1ldGVycyBmb3IgdGhlIEBzZWUgT3JnYW5pemVyI2dldFRyZWUgb3BlcmF0aW9uLlxuICovXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tZW1wdHktaW50ZXJmYWNlXG5leHBvcnQgaW50ZXJmYWNlIEdldFRyZWVPcHRpb25zIGV4dGVuZHMgR2V0T3B0aW9ucyB7XG4gIC8qKiBDb250cm9scyB3aGljaCBvcHRpb25hbCBub2RlIGF0dHJpYnV0ZXMgYXJlIHJldHVybmVkLCBjdXJyZW50bHkgb25seSBtZXRhZGF0YSBpcyBzdXBwb3J0ZWQuICovXG4gIGZpZWxkcz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcmVxdWVzdCBwYXJhbWV0ZXJzIGZvciB0aGUgQHNlZSBPcmdhbml6ZXIjZ2V0Tm9kZSBvcGVyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0Tm9kZU9wdGlvbnMgZXh0ZW5kcyBHZXRPcHRpb25zIHtcbiAgLyoqIENvbnRyb2xzIHdoZXRoZXIgdG8gc2VuZCBsaXN0IG9mIGxpbmsgdG9nZXRoZXIgd2l0aCB0aGUgbm9kZSBkZXNjcmlwdG9yLiBCeSBkZWZhdWx0IGxpbmtzIGFyZSBzZW50LiBBcHAgY2FuIHJlZHVjZSB0aGUgcGF5bG9hZCBzaXplIGJ5IHVzaW5nIHRoaXMgcGFyYW1ldGVyLiAqL1xuICBub2xpbmtzPzogYm9vbGVhbjtcbiAgLyoqIENvbnRyb2xzIHdoaWNoIG9wdGlvbmFsIG5vZGUgYXR0cmlidXRlcyBhcmUgcmV0dXJuZWQsIGN1cnJlbnRseSBvbmx5IG1ldGFkYXRhIGlzIHN1cHBvcnRlZC4gKi9cbiAgZmllbGRzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSByZXF1ZXN0IHBhcmFtZXRlcnMgZm9yIHRoZSBAc2VlIE9yZ2FuaXplciNwdXROb2RlR2VvbWV0cnkgb3BlcmF0aW9uLlxuICogRG9lcyBub3QgZXh0ZW5kIEdldE9wdGlvbnMgYmVjYXVzZSB0aGUgZmxhZyBkZWZpbmVkIHRoZXJlIGhhcyBubyBtZWFuaW5nIGhlcmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHV0R2VvbWV0cnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBsYXN0IHNlZW4gdmVyc2lvbiBvZiB0aGUgbm9kZSBkZXNjcmlwdG9yLlxuICAgKiBJZiBwcm92aWRlZCBzZXJ2aWNlIHdpbGwgdXNlIHRoaXMgaW5mb3JtYXRpb24gZm9yIHRoZSBjb25jdXJyZW5jeSBjb250cm9sIGFuZCB3aWxsIHJlZnVzZSB0byBhcHBseSBjaGFuZ2VzIGlmIGN1cnJlbnQgdmVyc2lvbiBpcyBub3QgZXF1YWwgdG8gdmVyc2lvbiBwcm92aWRlZCBpbiB0aGUgcmVxdWVzdC5cbiAgICovXG4gIHY/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIGNyZWF0ZSB0cmVlIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVUcmVlT3B0aW9ucyB7XG4gIC8qKiBDb250cm9scyB3aGljaCBvcHRpb25hbCBub2RlIGF0dHJpYnV0ZXMgYXJlIHJldHVybmVkLCBjdXJyZW50bHkgb25seSBtZXRhZGF0YSBpcyBzdXBwb3J0ZWQuICovXG4gIGZpZWxkcz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcmVxdWVzdCBib2R5IGZvciB0aGUgQHNlZSBPcmdhbml6ZXIjdXBkYXRlVHJlZSBvcGVyYXRpb24uXG4gKiBBbGwgcHJvcGVydGllcyBhcmUgb3B0aW9uYWwsIGlmIHByb3BlcnR5IGlzIG5vdCBwcm92aWRlZCBpbiB0aGUgcmVxdWVzdCB0aGUgcHJvcGVydHkgd2lsbCByZXRhaW4gaXQncyBvbGQgdmFsdWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlVHJlZVJlcXVlc3Qge1xuICAvKipcbiAgICogVGhlIGxhc3Qgc2VlbiB2ZXJzaW9uIG9mIHRoZSB0cmVlIGRlc2NyaXB0b3IuXG4gICAqIElmIHByb3ZpZGVkIHNlcnZpY2Ugd2lsbCB1c2UgdGhpcyBpbmZvcm1hdGlvbiBmb3IgdGhlIGNvbmN1cnJlbmN5IGNvbnRyb2wgYW5kIHdpbGwgcmVmdXNlIHRvIGFwcGx5IGNoYW5nZXMgaWYgY3VycmVudCB2ZXJzaW9uIGlzIG5vdCBlcXVhbCB0byB2ZXJzaW9uIHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0LlxuICAgKi9cbiAgdj86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBhY2Nlc3MgY29udHJvbCBwb2xpY3kgZG9jdW1lbnQgdG8gYmUgYXR0YWNoZWQgdG8gdGhlIHRyZWUuXG4gICAqIElmIHByb3BlcnR5IGlzIHNwZWNpZmllZCBjYWxsZXIgbXVzdCBoYXZlIG9yZzpVcGRhdGVUcmVlUG9saWN5IHJpZ2h0IHRvIGV4ZWN1dGUgdGhpcyBvcGVyYXRpb24gaW4gYWRkaXRpb24gdG8gb3JnOlVwZGF0ZVRyZWUuXG4gICAqL1xuICBwb2xpY3k/OiBQb2xpY3k7XG4gIC8qKiBUaGUgbmV3IG5hbWUuICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKiBUaGUgbmV3IGRlc2NyaXB0aW9uLiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqIFRoZSBvcHRpb25hbCBub2RlIG1ldGFkYXRhLiAqL1xuICBtZXRhZGF0YT86IG9iamVjdDtcbn1cblxuLyoqXG4gKiBUaGUgdXBkYXRlIHRyZWUgb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZVRyZWVPcHRpb25zIHtcbiAgLyoqIENvbnRyb2xzIHdoaWNoIG9wdGlvbmFsIG5vZGUgYXR0cmlidXRlcyBhcmUgcmV0dXJuZWQsIGN1cnJlbnRseSBvbmx5IG1ldGFkYXRhIGlzIHN1cHBvcnRlZC4gKi9cbiAgZmllbGRzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSB0cmVlIGRlc2NyaXB0b3IgcmV0dXJuZWQgZnJvbSBAc2VlIE9yZ2FuaXplciNjcmVhdGVUcmVlICwgQHNlZSBPcmdhbml6ZXIjdXBkYXRlVHJlZSAsIEBzZWUgT3JnYW5pemVyI2RlbGV0ZVRyZWUgYW5kIEBzZWUgT3JnYW5pemVyI2dldFRyZWUgb3BlcmF0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmVlUmVzcG9uc2Uge1xuICAvKiogVGhlIHVuaXF1ZSB0cmVlIGlkZW50aWZpZXIuICovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBUaGUgY3JlYXRpb24gdGltZXN0YW1wIGluIElTTyBmb3JtYXQuICovXG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICAvKiogVGhlIGlkZW50aWZpZXIgb2YgdGhlIHByaW5jaXBhbCB3aG8gY3JlYXRlZCB0aGUgdHJlZS4gKi9cbiAgY3JlYXRlZEJ5OiBzdHJpbmc7XG4gIC8qKiBUaGUgbGFzdCBtb2RpZmljYXRpb24gdGltZXN0YW1wIGluIElTTyBmb3JtYXQuICovXG4gIG1vZGlmaWVkQXQ6IHN0cmluZztcbiAgLyoqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBwcmluY2lwYWwgd2hvIGxhc3QgbW9kaWZpZWQgdGhlIHRyZWUgZGVzY3JpcHRvci4gKi9cbiAgbW9kaWZpZWRCeTogc3RyaW5nO1xuICAvKiogVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgdHJlZSBkZXNjcmlwdG9yLiAqL1xuICB2OiBudW1iZXI7XG4gIC8qKiBUaGUgYWNjZXNzIGNvbnRyb2wgcG9saWN5IGRvY3VtZW50IGF0dGFjaGVkIHRvIHRoZSB0cmVlLiBUaGlzIHByb3BlcnR5IGlzIHJldHVybmVkIG9ubHkgaWYgY2FsbGVyIGhhcyBvcmc6R2V0VHJlZVBvbGljeSByaWdodC4gKi9cbiAgcG9saWN5PzogUG9saWN5O1xuICAvKiogVGhlIGRlbGV0aW9uIG1hcmtlci4gSWYgbm90IHByZXNlbnQgb3IgZmFsc2UgdGhlIHRyZWUgaXMgYWN0aXZlLCBvdGhlcndpc2UgdGhlIHRyZWUgaXMgbWFya2VkIGFzIGRlbGV0ZWQuICovXG4gIGRlbGV0ZWQ/OiBib29sZWFuO1xuICAvKiogVGhlIHRyZWUgc2hvcnQgbmFtZS4gKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqIFRoZSBvcHRpb25hbCBkZXNjcmlwdGlvbi4gKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKiBUaGUgdHJlZSB0eXBlIHRoYXQgZGVmaW5lcyB0aGUgc2VtYW50aWMuICovXG4gIHR5cGU6IHN0cmluZztcbiAgLyoqIFRoZSBjb2xsZWN0aW9uIG9mIGFjdGlvbnMgY3VycmVudCB1c2VyIGhhcyByaWdodHMgdG8gcGVyZm9ybSBvbiB0aGlzIHJlc291cmNlIGF0IHRoZSBtb21lbnQgdGhlIHJlc3BvbnNlIGlzIGdlbmVyYXRlZCBieSBzZXJ2aWNlLiBOb3QgcmV0dXJuZWQgd2hlbiBzcGVjaWZpYyB2ZXJzaW9uIGlzIHJlcXVlc3RlZC4gKi9cbiAgX2FjdGlvbnM/OiBzdHJpbmdbXTtcbiAgLyoqIFRoZSBub2RlIG1ldGFkYXRhLiAqL1xuICBtZXRhZGF0YT86IG9iamVjdDtcbn1cblxuLyoqXG4gKiBUaGUgcmVxdWVzdCBib2R5IGZvciB0aGUgQHNlZSBPcmdhbml6ZXIjY3JlYXRlTm9kZSBvcGVyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlTm9kZVJlcXVlc3Qge1xuICAvKiogVGhlIG9wdGlvbmFsIGlkZW50aWZpZXIgZm9yIHRoZSBuZXcgdHJlZSwgaWYgbm90IHByb3ZpZGVkIHNlcnZpY2Ugd2lsbCBnZW5lcmF0ZSBhbiB1bmlxdWUgaWRlbnRpZmllci4gKi9cbiAgaWQ/OiBzdHJpbmc7XG4gIC8qKiBUaGUgbm9kZSBuYW1lLiBUbyBwcmVzZW50IGEgdHJlZS1saWtlIHN0cnVjdHVyZSB0aGlzIG5hbWUgaXMgaW50ZXJwcmV0ZWQgYXMgYSBmdWxsIHBhdGggaW4gYSB0cmVlIHdpdGggJy8nIGNoYXJhY3RlciBhcyBhIHNlcGFyYXRvciBiZXR3ZWVuIHBhdGggc2VnbWVudHMuICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKiBUaGUgb3B0aW9uYWwgY29sbGVjdGlvbiBvZiBsaW5rcyB0byByZXNvdXJjZXMgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBub2RlLiAqL1xuICBsaW5rcz86IHN0cmluZ1tdO1xuICAvKiogVGhlIG9wdGlvbmFsIG5vZGUgbWV0YWRhdGEuICovXG4gIG1ldGFkYXRhPzogb2JqZWN0O1xuICAvKiogVGhlIG9wdGlvbmFsIGdlb21ldHJ5IGRhdGEgdG8gYXR0YWNoIHRvIHRoZSBub2RlLiAqL1xuICBnZW9tZXRyeT86IHtcbiAgICAvKiogVGhlIGJhc2U2NCBlbmNvZGVkIGdlb21ldHJ5IGRhdGEuICovXG4gICAgZGF0YTogc3RyaW5nO1xuICAgIC8qKiBUaGUgY29udGVudCB0eXBlIChNSU1FKSBvZiB0aGUgZ2VvbWV0cnkgZGF0YS4gKi9cbiAgICBjb250ZW50VHlwZTogc3RyaW5nO1xuICB9O1xufVxuXG4vKipcbiAqIFRoZSBjcmVhdGUgbm9kZSBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlTm9kZU9wdGlvbnMge1xuICAvKiogQ29udHJvbHMgd2hpY2ggb3B0aW9uYWwgbm9kZSBhdHRyaWJ1dGVzIGFyZSByZXR1cm5lZCwgY3VycmVudGx5IG9ubHkgbWV0YWRhdGEgaXMgc3VwcG9ydGVkLiAqL1xuICBmaWVsZHM/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHJlcXVlc3QgYm9keSBmb3IgdGhlIEBzZWUgT3JnYW5pemVyI3VwZGF0ZU5vZGUgb3BlcmF0aW9uLiBBbHNvIGtub3duIGFzIFVwc2VydE5vZGVSZXF1ZXN0LlxuICogQWxsIHByb3BlcnRpZXMgYXJlIG9wdGlvbmFsLCBpZiBwcm9wZXJ0eSBub3QgcHJvdmlkZWQgaW4gdGhlIHJlcXVlc3QgdGhlIHByb3BlcnR5IHdpbGwgcmV0YWluIGl0J3Mgb2xkIHZhbHVlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZU5vZGVSZXF1ZXN0IHtcbiAgLyoqXG4gICAqIFRoZSBsYXN0IHNlZW4gdmVyc2lvbiBvZiB0aGUgdHJlZSBkZXNjcmlwdG9yLlxuICAgKiBJZiBwcm92aWRlZCBzZXJ2aWNlIHdpbGwgdXNlIHRoaXMgaW5mb3JtYXRpb24gZm9yIHRoZSBjb25jdXJyZW5jeSBjb250cm9sIGFuZCB3aWxsIHJlZnVzZSB0byBhcHBseSBjaGFuZ2VzIGlmIGN1cnJlbnQgdmVyc2lvbiBpcyBub3QgZXF1YWwgdG8gdmVyc2lvbiBwcm92aWRlZCBpbiB0aGUgcmVxdWVzdC5cbiAgICovXG4gIHY/OiBudW1iZXI7XG4gIC8qKiBUaGUgbmV3IG5hbWUuICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKiBUaGUgbmV3IHNldCBvZiBsaW5rcyB0byByZXNvdXJjZXMuIElmIHRoaXMgcHJvcGVydHkgaXMgcHJvdmlkZWQgaXQgd2lsbCBvdmVycmlkZSBhbGwgZXhpc3RpbmcgbGlua3MgYXNzb2NpYXRlZC4gRm9yIGRpZmZlcmVudGlhbCBjaGFuZ2VzIHVzZSBAc2VlIGFkZCBhbmQgQHNlZSByZW1vdmUgcHJvcGVydGllcy4gKi9cbiAgbGlua3M/OiBzdHJpbmdbXTtcbiAgLyoqIFRoZSBzZXQgb2YgbGlua3MgdG8gYWRkIHRvIHRoZSBhc3NvY2lhdGlvbnMgY29sbGVjdGlvbiAoQHNlZSBOb2RlUmVzcG9uc2UjbGlua3MgKSBhbGwgY3VycmVudGx5IGFzc29jaWF0ZWQgbGlua3MgcmVtYWluIHVuY2hhbmdlZC4gKi9cbiAgYWRkPzogc3RyaW5nW107XG4gIC8qKiBUaGUgc2V0IG9mIGxpbmtzIHRvIGJlIHJlbW92ZWQgZnJvbSB0byB0aGUgYXNzb2NpYXRpb25zIGNvbGxlY3Rpb24gKEBzZWUgTm9kZVJlc3BvbnNlI2xpbmtzICkuIExpbmtzIHRoYXQgYXJlIG5vdCBhc3NvY2lhdGVkIGFscmVhZHksIGFyZSBpZ25vcmVkLiAqL1xuICByZW1vdmU/OiBzdHJpbmdbXTtcbiAgLyoqIFRoZSBvcHRpb25hbCBub2RlIG1ldGFkYXRhLiAqL1xuICBtZXRhZGF0YT86IG9iamVjdDtcbiAgLyoqIFRoZSBvcHRpb25hbCBnZW9tZXRyeSBkYXRhIHRvIGF0dGFjaCB0byB0aGUgbm9kZSBvciByZXBsYWNlIHRoZSBleGlzdGluZyBvbmUuICovXG4gIGdlb21ldHJ5Pzoge1xuICAgIC8qKiBUaGUgYmFzZTY0IGVuY29kZWQgZ2VvbWV0cnkgZGF0YS4gVG8gcmVtb3ZlIHRoZSBnZW9tZXRyeSBmcm9tIHRoZSBub2RlIHBhc3MgYW4gZW1wdHkgc3RyaW5nLiAqL1xuICAgIGRhdGE6IHN0cmluZztcbiAgICAvKiogVGhlIGNvbnRlbnQgdHlwZSAoTUlNRSkgb2YgdGhlIGdlb21ldHJ5IGRhdGEuICovXG4gICAgY29udGVudFR5cGU6IHN0cmluZztcbiAgfTtcbn1cblxuLyoqXG4gKiBUaGUgdXBkYXRlIG5vZGUgb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZU5vZGVPcHRpb25zIHtcbiAgLyoqIENvbnRyb2xzIHdoaWNoIG9wdGlvbmFsIG5vZGUgYXR0cmlidXRlcyBhcmUgcmV0dXJuZWQsIGN1cnJlbnRseSBvbmx5IG1ldGFkYXRhIGlzIHN1cHBvcnRlZC4gKi9cbiAgZmllbGRzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSB0cmVlIGRlc2NyaXB0b3IgcmV0dXJuZWQgZnJvbSBAc2VlIE9yZ2FuaXplciNjcmVhdGVOb2RlLCBAc2VlIE9yZ2FuaXplciN1cGRhdGVOb2RlLCBAc2VlIE9yZ2FuaXplciNkZWxldGVOb2RlIGFuZCBAc2VlIE9yZ2FuaXplciNnZXROb2RlIG9wZXJhdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm9kZVJlc3BvbnNlIHtcbiAgLyoqIFRoZSBmb3Jlc3QgaWRlbnRpZmllci4gKi9cbiAgZm9yZXN0SWQ6IHN0cmluZztcbiAgLyoqIFRoZSB0cmVlIGlkZW50aWZpZXIuICovXG4gIHRyZWVJZDogc3RyaW5nO1xuICAvKiogVGhlIHVuaXF1ZSBub2RlIGlkZW50aWZpZXIuICovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBUaGUgY3JlYXRpb24gdGltZXN0YW1wIGluIElTTyBmb3JtYXQuICovXG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICAvKiogVGhlIGlkZW50aWZpZXIgb2YgdGhlIHByaW5jaXBhbCB3aG8gY3JlYXRlZCB0aGUgbm9kZS4gKi9cbiAgY3JlYXRlZEJ5OiBzdHJpbmc7XG4gIC8qKiBUaGUgbGFzdCBtb2RpZmljYXRpb24gdGltZXN0YW1wIGluIElTTyBmb3JtYXQuICovXG4gIG1vZGlmaWVkQXQ6IHN0cmluZztcbiAgLyoqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBwcmluY2lwYWwgd2hvIGxhc3QgbW9kaWZpZWQgdGhlIG5vZGUuICovXG4gIG1vZGlmaWVkQnk6IHN0cmluZztcbiAgLyoqIFRoZSB2ZXJzaW9uIG9mIHRoZSBub2RlLiAqL1xuICB2OiBudW1iZXI7XG4gIC8qKiBUaGUgZGVsZXRpb24gbWFya2VyLiBJZiBub3QgcHJlc2VudCBvciBmYWxzZSB0aGUgbm9kZSBpcyBhY3RpdmUsIG90aGVyd2lzZSB0aGUgbm9kZSBpcyBtYXJrZWQgYXMgZGVsZXRlZC4gKi9cbiAgZGVsZXRlZD86IGJvb2xlYW47XG4gIC8qKiBUaGUgbmFtZS4gKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGNvbGxlY3Rpb24gb2YgbGlua3MgdG8gcmVzb3VyY2VzIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgbm9kZS4gTWlnaHQgYmUgYWJzZW50IGlmIGNsaWVudCByZXF1ZXN0ZWQgdG8gc2tpcCB0aGlzIHByb3BlcnR5IGZyb20gdGhlIHJlc3BvbnNlLlxuICAgKiBJZiBwcm9wZXJ0eSBpcyByZXF1ZXN0ZWQgYW5kIHRoZXJlIGFyZSBubyBhc3NvY2lhdGlvbnMgdGhlbiBlbXB0eSBhcnJheSBpcyByZXR1cm5lZC5cbiAgICogSW4gY2FzZSBvZiBleHRlcm5hbGl6ZWQgbGlua3MgdGhpcyBwcm9wZXJ0eSBpcyBub3QgcmV0dXJuZWQuXG4gICAqL1xuICBsaW5rcz86IHN0cmluZ1tdO1xuICAvKiogVGhlIG51bWJlciBvZiBsaW5rcyBhc3NvY2lhdGVkIHdpdGggdGhlIG5vZGUuICovXG4gIGNvdW50OiBudW1iZXI7XG4gIC8qKiBVUkwgdG8gZXh0ZXJuYWxpemVkIGxpbmtzLCBpZiB0aGF0J3MgdGhlIGNhc2UuIFRoaXMgaXMgcmV0dXJuZWQgZXZlbiB3aGVuIHRoZSBub2xpbmtzIG9wdGlvbiB3YXMgdXNlZCBpbiB0aGUgcmVxdWVzdC4gKi9cbiAgbGlua3NVcmw/OiBzdHJpbmc7XG4gIC8qKiBUaGUgY29sbGVjdGlvbiBvZiBhY3Rpb25zIGN1cnJlbnQgdXNlciBoYXMgcmlnaHRzIHRvIHBlcmZvcm0gb24gdGhpcyByZXNvdXJjZSBhdCB0aGUgbW9tZW50IHRoZSByZXNwb25zZSBpcyBnZW5lcmF0ZWQgYnkgc2VydmljZS4gTm90IHJldHVybmVkIHdoZW4gc3BlY2lmaWMgdmVyc2lvbiBpcyByZXF1ZXN0ZWQuICovXG4gIF9hY3Rpb25zPzogc3RyaW5nW107XG4gIC8qKiBUaGUgbm9kZSBtZXRhZGF0YS4gKi9cbiAgbWV0YWRhdGE/OiBvYmplY3Q7XG4gIC8qKiBUaGUgYXNzb2NpYXRlZCBnZW9tZXRyeSBpbmZvcm1hdGlvbiwgaWYgZXhpc3RzIGZvciB0aGlzIG5vZGUuIERvIG5vdCBzdG9yZSB0aGlzIGZvciBhIGxvbmdlciB0aW1lIChzZWUgdXJsIHByb3BlcnR5KS4gKi9cbiAgZ2VvbWV0cnk/OiB7XG4gICAgLyoqIFRoZSBjb250ZW50IHR5cGUgKE1JTUUpIG9mIHRoZSBnZW9tZXRyeSBkYXRhLiAqL1xuICAgIGNvbnRlbnRUeXBlOiBzdHJpbmc7XG4gICAgLyoqIFRoZSB1cmwgdG8gZG93bmxvYWQgZ2VvbWV0cnkgZGF0YS4gSXQgaGFzIGFuIGV4cGlyYXRpb24gdGltZSwgbm90IHN1aXRhYmxlIGZvciB2ZXJ5IGRlbGF5ZWQgZG93bmxvYWRzLiBUbyBiZSB1c2VkIGFzIGlzLCBubyBhZGRpdGlvbmFsIGhlYWRlcnMuICovXG4gICAgdXJsOiBzdHJpbmc7XG4gIH07XG59XG5cbi8qKlxuICogVGhlIGRlLXNlcmlhbGl6ZWQgZGF0YSByZXR1cm5lZCBmcm9tIHRoZSByZXF1ZXN0IHdpdGggbGlzdCBvZiB0cmVlIGRlc2NyaXB0b3JzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpc3RUcmVlc1Jlc3BvbnNlIGV4dGVuZHMgUGFnZWRJdGVtczxUcmVlUmVzcG9uc2U+IHsgfVxuXG4vKipcbiAqIFRoZSBkZS1zZXJpYWxpemVkIGRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgcmVxdW