@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
381 lines (380 loc) • 55.3 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const utils_1 = require("@neo-one/utils");
const utils_2 = require("../../../utils");
const constants_1 = require("../../constants");
const Helper_1 = require("../Helper");
const account_1 = require("./account");
const array_1 = require("./array");
const arrayStorage_1 = require("./arrayStorage");
const asset_1 = require("./asset");
const attribute_1 = require("./attribute");
const block_1 = require("./block");
const boolean_1 = require("./boolean");
const buffer_1 = require("./buffer");
const contract_1 = require("./contract");
const error_1 = require("./error");
const forwardValue_1 = require("./forwardValue");
const header_1 = require("./header");
const input_1 = require("./input");
const iterable_1 = require("./iterable");
const iterableIterator_1 = require("./iterableIterator");
const iteratorResult_1 = require("./iteratorResult");
const map_1 = require("./map");
const mapStorage_1 = require("./mapStorage");
const null_1 = require("./null");
const number_1 = require("./number");
const object_1 = require("./object");
const output_1 = require("./output");
const set_1 = require("./set");
const setStorage_1 = require("./setStorage");
const string_1 = require("./string");
const symbol_1 = require("./symbol");
const transaction_1 = require("./transaction");
const undefined_1 = require("./undefined");
class ForBuiltinTypeHelper extends Helper_1.Helper {
constructor({ type, knownType, single, singleUndefined, singleFalse, optional, array, map, set, boolean: processBoolean, buffer, null: processNull, number: processNumber, object, string: processString, symbol, undefined: processUndefined, arrayStorage, mapStorage, setStorage, error, iteratorResult, iterable, iterableIterator, transaction, output, attribute, input, account, asset, contract, header, block, forwardValue, }) {
super();
this.type = type;
this.knownType = knownType;
this.single = single;
this.singleUndefined = singleUndefined;
this.singleFalse = singleFalse;
this.optional = optional;
this.array = array;
this.map = map;
this.set = set;
this.boolean = processBoolean;
this.buffer = buffer;
this.null = processNull;
this.number = processNumber;
this.object = object;
this.string = processString;
this.symbol = symbol;
this.undefined = processUndefined;
this.arrayStorage = arrayStorage;
this.mapStorage = mapStorage;
this.setStorage = setStorage;
this.error = error;
this.iteratorResult = iteratorResult;
this.iterable = iterable;
this.iterableIterator = iterableIterator;
this.transaction = transaction;
this.output = output;
this.attribute = attribute;
this.input = input;
this.account = account;
this.asset = asset;
this.contract = contract;
this.header = header;
this.block = block;
this.forwardValue = forwardValue;
}
emit(sb, node, options) {
if (this.knownType !== undefined) {
this.processKnownType(this.knownType, options);
return;
}
let tpe = this.type;
if (tpe !== undefined && sb.context.builtins.isType(node, tpe, 'ForwardedValue')) {
tpe = utils_2.getForwardedValueType(tpe);
}
sb.emitHelper(node, options, sb.helpers.forType({
type: tpe,
single: this.single,
singleUndefined: this.singleUndefined,
singleFalse: this.singleFalse,
optional: this.optional,
types: [
{
hasType: (type) => undefined_1.hasUndefined(sb.context, node, type),
isRuntimeType: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.isUndefined);
},
process: this.undefined,
},
{
hasType: (type) => null_1.hasNull(sb.context, node, type),
isRuntimeType: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.isNull);
},
process: this.null,
},
{
hasType: (type) => boolean_1.hasBoolean(sb.context, node, type),
isRuntimeType: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.isBoolean);
},
process: this.boolean,
},
{
hasType: (type) => number_1.hasNumber(sb.context, node, type),
isRuntimeType: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.isNumber);
},
process: this.number,
},
{
hasType: (type) => string_1.hasString(sb.context, node, type),
isRuntimeType: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.isString);
},
process: this.string,
},
{
hasType: (type) => symbol_1.hasSymbol(sb.context, node, type),
isRuntimeType: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.isSymbol);
},
process: this.symbol,
},
{
hasType: (type) => buffer_1.hasBuffer(sb.context, node, type),
isRuntimeType: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.isBuffer);
},
process: this.buffer,
},
{
hasType: (type) => array_1.hasArray(sb.context, node, type),
isRuntimeType: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.isArray);
},
process: this.array,
},
{
hasType: (type) => arrayStorage_1.hasArrayStorage(sb.context, node, type),
isRuntimeType: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.isArrayStorage);
},
process: this.arrayStorage,
},
{
hasType: (type) => map_1.hasMap(sb.context, node, type),
isRuntimeType: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.isMap);
},
process: this.map,
},
{
hasType: (type) => mapStorage_1.hasMapStorage(sb.context, node, type),
isRuntimeType: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.isMapStorage);
},
process: this.mapStorage,
},
{
hasType: (type) => set_1.hasSet(sb.context, node, type),
isRuntimeType: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.isSet);
},
process: this.set,
},
{
hasType: (type) => setStorage_1.hasSetStorage(sb.context, node, type),
isRuntimeType: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.isSetStorage);
},
process: this.setStorage,
},
{
hasType: (type) => error_1.hasError(sb.context, node, type),
isRuntimeType: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.isError);
},
process: this.error,
},
{
hasType: (type) => iteratorResult_1.hasIteratorResult(sb.context, node, type),
isRuntimeType: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.isIteratorResult);
},
process: this.iteratorResult,
},
{
hasType: (type) => iterableIterator_1.hasIterableIterator(sb.context, node, type),
isRuntimeType: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.isIterableIterator);
},
process: this.iterableIterator,
},
{
hasType: (type) => forwardValue_1.hasForwardValue(sb.context, node, type),
isRuntimeType: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.isForwardValue);
},
process: this.forwardValue,
},
{
hasType: (type) => transaction_1.hasTransaction(sb.context, node, type),
isRuntimeType: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.isTransaction);
},
process: this.transaction,
},
{
hasType: (type) => output_1.hasOutput(sb.context, node, type),
isRuntimeType: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.isOutput);
},
process: this.output,
},
{
hasType: (type) => attribute_1.hasAttribute(sb.context, node, type),
isRuntimeType: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.isAttribute);
},
process: this.attribute,
},
{
hasType: (type) => input_1.hasInput(sb.context, node, type),
isRuntimeType: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.isInput);
},
process: this.input,
},
{
hasType: (type) => account_1.hasAccount(sb.context, node, type),
isRuntimeType: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.isAccount);
},
process: this.account,
},
{
hasType: (type) => asset_1.hasAsset(sb.context, node, type),
isRuntimeType: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.isAsset);
},
process: this.asset,
},
{
hasType: (type) => contract_1.hasContract(sb.context, node, type),
isRuntimeType: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.isContract);
},
process: this.contract,
},
{
hasType: (type) => header_1.hasHeader(sb.context, node, type),
isRuntimeType: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.isHeader);
},
process: this.header,
},
{
hasType: (type) => block_1.hasBlock(sb.context, node, type),
isRuntimeType: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.isBlock);
},
process: this.block,
},
{
hasType: (type) => iterable_1.hasIterable(sb.context, node, type),
isRuntimeType: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.isIterable);
},
process: this.iterable,
},
{
hasType: (type) => object_1.hasObject(sb.context, node, type),
isRuntimeType: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.isObject);
},
process: this.object,
},
],
}));
}
processKnownType(knownType, options) {
switch (knownType) {
case constants_1.Types.Array:
this.array(options);
break;
case constants_1.Types.ArrayStorage:
this.arrayStorage(options);
break;
case constants_1.Types.Map:
this.map(options);
break;
case constants_1.Types.MapStorage:
this.mapStorage(options);
break;
case constants_1.Types.Set:
this.set(options);
break;
case constants_1.Types.SetStorage:
this.setStorage(options);
break;
case constants_1.Types.Error:
this.error(options);
break;
case constants_1.Types.IteratorResult:
this.iteratorResult(options);
break;
case constants_1.Types.Iterable:
this.iterable(options);
break;
case constants_1.Types.IterableIterator:
this.iterableIterator(options);
break;
case constants_1.Types.Boolean:
this.boolean(options);
break;
case constants_1.Types.Buffer:
this.buffer(options);
break;
case constants_1.Types.ForwardValue:
this.forwardValue(options);
break;
case constants_1.Types.Null:
this.null(options);
break;
case constants_1.Types.Number:
this.number(options);
break;
case constants_1.Types.Object:
this.object(options);
break;
case constants_1.Types.String:
this.string(options);
break;
case constants_1.Types.Symbol:
this.symbol(options);
break;
case constants_1.Types.Undefined:
this.undefined(options);
break;
case constants_1.Types.Transaction:
this.transaction(options);
break;
case constants_1.Types.Output:
this.output(options);
break;
case constants_1.Types.Attribute:
this.attribute(options);
break;
case constants_1.Types.Input:
this.input(options);
break;
case constants_1.Types.Account:
this.account(options);
break;
case constants_1.Types.Asset:
this.asset(options);
break;
case constants_1.Types.Contract:
this.contract(options);
break;
case constants_1.Types.Header:
this.header(options);
break;
case constants_1.Types.Block:
this.block(options);
break;
default:
utils_1.utils.assertNever(knownType);
}
}
}
exports.ForBuiltinTypeHelper = ForBuiltinTypeHelper;
//# sourceMappingURL=data:application/json;charset=utf8;base64,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QkFFRSxhQUFLLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ2hDO0lBQ0gsQ0FBQztDQUNGO0FBeGFELG9EQXdhQyIsImZpbGUiOiJuZW8tb25lLXNtYXJ0LWNvbnRyYWN0LWNvbXBpbGVyL3NyYy9jb21waWxlL2hlbHBlci90eXBlcy9Gb3JCdWlsdGluVHlwZUhlbHBlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHV0aWxzIH0gZnJvbSAnQG5lby1vbmUvdXRpbHMnO1xuaW1wb3J0IHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuaW1wb3J0IHsgZ2V0Rm9yd2FyZGVkVmFsdWVUeXBlIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgVHlwZXMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgU2NyaXB0QnVpbGRlciB9IGZyb20gJy4uLy4uL3NiJztcbmltcG9ydCB7IFZpc2l0T3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEhlbHBlciB9IGZyb20gJy4uL0hlbHBlcic7XG5pbXBvcnQgeyBoYXNBY2NvdW50IH0gZnJvbSAnLi9hY2NvdW50JztcbmltcG9ydCB7IGhhc0FycmF5IH0gZnJvbSAnLi9hcnJheSc7XG5pbXBvcnQgeyBoYXNBcnJheVN0b3JhZ2UgfSBmcm9tICcuL2FycmF5U3RvcmFnZSc7XG5pbXBvcnQgeyBoYXNBc3NldCB9IGZyb20gJy4vYXNzZXQnO1xuaW1wb3J0IHsgaGFzQXR0cmlidXRlIH0gZnJvbSAnLi9hdHRyaWJ1dGUnO1xuaW1wb3J0IHsgaGFzQmxvY2sgfSBmcm9tICcuL2Jsb2NrJztcbmltcG9ydCB7IGhhc0Jvb2xlYW4gfSBmcm9tICcuL2Jvb2xlYW4nO1xuaW1wb3J0IHsgaGFzQnVmZmVyIH0gZnJvbSAnLi9idWZmZXInO1xuaW1wb3J0IHsgaGFzQ29udHJhY3QgfSBmcm9tICcuL2NvbnRyYWN0JztcbmltcG9ydCB7IGhhc0Vycm9yIH0gZnJvbSAnLi9lcnJvcic7XG5pbXBvcnQgeyBoYXNGb3J3YXJkVmFsdWUgfSBmcm9tICcuL2ZvcndhcmRWYWx1ZSc7XG5pbXBvcnQgeyBoYXNIZWFkZXIgfSBmcm9tICcuL2hlYWRlcic7XG5pbXBvcnQgeyBoYXNJbnB1dCB9IGZyb20gJy4vaW5wdXQnO1xuaW1wb3J0IHsgaGFzSXRlcmFibGUgfSBmcm9tICcuL2l0ZXJhYmxlJztcbmltcG9ydCB7IGhhc0l0ZXJhYmxlSXRlcmF0b3IgfSBmcm9tICcuL2l0ZXJhYmxlSXRlcmF0b3InO1xuaW1wb3J0IHsgaGFzSXRlcmF0b3JSZXN1bHQgfSBmcm9tICcuL2l0ZXJhdG9yUmVzdWx0JztcbmltcG9ydCB7IGhhc01hcCB9IGZyb20gJy4vbWFwJztcbmltcG9ydCB7IGhhc01hcFN0b3JhZ2UgfSBmcm9tICcuL21hcFN0b3JhZ2UnO1xuaW1wb3J0IHsgaGFzTnVsbCB9IGZyb20gJy4vbnVsbCc7XG5pbXBvcnQgeyBoYXNOdW1iZXIgfSBmcm9tICcuL251bWJlcic7XG5pbXBvcnQgeyBoYXNPYmplY3QgfSBmcm9tICcuL29iamVjdCc7XG5pbXBvcnQgeyBoYXNPdXRwdXQgfSBmcm9tICcuL291dHB1dCc7XG5pbXBvcnQgeyBoYXNTZXQgfSBmcm9tICcuL3NldCc7XG5pbXBvcnQgeyBoYXNTZXRTdG9yYWdlIH0gZnJvbSAnLi9zZXRTdG9yYWdlJztcbmltcG9ydCB7IGhhc1N0cmluZyB9IGZyb20gJy4vc3RyaW5nJztcbmltcG9ydCB7IGhhc1N5bWJvbCB9IGZyb20gJy4vc3ltYm9sJztcbmltcG9ydCB7IGhhc1RyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBoYXNVbmRlZmluZWQgfSBmcm9tICcuL3VuZGVmaW5lZCc7XG5cbnR5cGUgUHJvY2Vzc1R5cGUgPSAob3B0aW9uczogVmlzaXRPcHRpb25zKSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZvckJ1aWx0aW5UeXBlSGVscGVyT3B0aW9ucyB7XG4gIHJlYWRvbmx5IHR5cGU6IHRzLlR5cGUgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IGtub3duVHlwZT86IFR5cGVzO1xuICByZWFkb25seSBzaW5nbGU/OiBib29sZWFuO1xuICByZWFkb25seSBzaW5nbGVVbmRlZmluZWQ/OiBQcm9jZXNzVHlwZTtcbiAgcmVhZG9ubHkgc2luZ2xlRmFsc2U/OiBQcm9jZXNzVHlwZTtcbiAgcmVhZG9ubHkgb3B0aW9uYWw/OiBib29sZWFuO1xuICByZWFkb25seSBhcnJheTogUHJvY2Vzc1R5cGU7XG4gIHJlYWRvbmx5IG1hcDogUHJvY2Vzc1R5cGU7XG4gIHJlYWRvbmx5IHNldDogUHJvY2Vzc1R5cGU7XG4gIHJlYWRvbmx5IGJvb2xlYW46IFByb2Nlc3NUeXBlO1xuICByZWFkb25seSBidWZmZXI6IFByb2Nlc3NUeXBlO1xuICByZWFkb25seSBudWxsOiBQcm9jZXNzVHlwZTtcbiAgcmVhZG9ubHkgbnVtYmVyOiBQcm9jZXNzVHlwZTtcbiAgcmVhZG9ubHkgb2JqZWN0OiBQcm9jZXNzVHlwZTtcbiAgcmVhZG9ubHkgc3RyaW5nOiBQcm9jZXNzVHlwZTtcbiAgcmVhZG9ubHkgc3ltYm9sOiBQcm9jZXNzVHlwZTtcbiAgcmVhZG9ubHkgdW5kZWZpbmVkOiBQcm9jZXNzVHlwZTtcbiAgcmVhZG9ubHkgYXJyYXlTdG9yYWdlOiBQcm9jZXNzVHlwZTtcbiAgcmVhZG9ubHkgbWFwU3RvcmFnZTogUHJvY2Vzc1R5cGU7XG4gIHJlYWRvbmx5IHNldFN0b3JhZ2U6IFByb2Nlc3NUeXBlO1xuICByZWFkb25seSBlcnJvcjogUHJvY2Vzc1R5cGU7XG4gIHJlYWRvbmx5IGl0ZXJhdG9yUmVzdWx0OiBQcm9jZXNzVHlwZTtcbiAgcmVhZG9ubHkgaXRlcmFibGU6IFByb2Nlc3NUeXBlO1xuICByZWFkb25seSBpdGVyYWJsZUl0ZXJhdG9yOiBQcm9jZXNzVHlwZTtcbiAgcmVhZG9ubHkgdHJhbnNhY3Rpb246IFByb2Nlc3NUeXBlO1xuICByZWFkb25seSBvdXRwdXQ6IFByb2Nlc3NUeXBlO1xuICByZWFkb25seSBhdHRyaWJ1dGU6IFByb2Nlc3NUeXBlO1xuICByZWFkb25seSBpbnB1dDogUHJvY2Vzc1R5cGU7XG4gIHJlYWRvbmx5IGFjY291bnQ6IFByb2Nlc3NUeXBlO1xuICByZWFkb25seSBhc3NldDogUHJvY2Vzc1R5cGU7XG4gIHJlYWRvbmx5IGNvbnRyYWN0OiBQcm9jZXNzVHlwZTtcbiAgcmVhZG9ubHkgaGVhZGVyOiBQcm9jZXNzVHlwZTtcbiAgcmVhZG9ubHkgYmxvY2s6IFByb2Nlc3NUeXBlO1xuICByZWFkb25seSBmb3J3YXJkVmFsdWU6IFByb2Nlc3NUeXBlO1xufVxuXG4vLyBJbnB1dDogW3ZhbF1cbi8vIE91dHB1dDogW11cbmV4cG9ydCBjbGFzcyBGb3JCdWlsdGluVHlwZUhlbHBlciBleHRlbmRzIEhlbHBlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHlwZTogdHMuVHlwZSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBrbm93blR5cGU/OiBUeXBlcztcbiAgcHJpdmF0ZSByZWFkb25seSBzaW5nbGU/OiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IHNpbmdsZVVuZGVmaW5lZD86IFByb2Nlc3NUeXBlO1xuICBwcml2YXRlIHJlYWRvbmx5IHNpbmdsZUZhbHNlPzogUHJvY2Vzc1R5cGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uYWw/OiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IGFycmF5OiBQcm9jZXNzVHlwZTtcbiAgcHJpdmF0ZSByZWFkb25seSBtYXA6IFByb2Nlc3NUeXBlO1xuICBwcml2YXRlIHJlYWRvbmx5IHNldDogUHJvY2Vzc1R5cGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgYm9vbGVhbjogUHJvY2Vzc1R5cGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgYnVmZmVyOiBQcm9jZXNzVHlwZTtcbiAgcHJpdmF0ZSByZWFkb25seSBudWxsOiBQcm9jZXNzVHlwZTtcbiAgcHJpdmF0ZSByZWFkb25seSBudW1iZXI6IFByb2Nlc3NUeXBlO1xuICBwcml2YXRlIHJlYWRvbmx5IG9iamVjdDogUHJvY2Vzc1R5cGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RyaW5nOiBQcm9jZXNzVHlwZTtcbiAgcHJpdmF0ZSByZWFkb25seSBzeW1ib2w6IFByb2Nlc3NUeXBlO1xuICBwcml2YXRlIHJlYWRvbmx5IHVuZGVmaW5lZDogUHJvY2Vzc1R5cGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXJyYXlTdG9yYWdlOiBQcm9jZXNzVHlwZTtcbiAgcHJpdmF0ZSByZWFkb25seSBtYXBTdG9yYWdlOiBQcm9jZXNzVHlwZTtcbiAgcHJpdmF0ZSByZWFkb25seSBzZXRTdG9yYWdlOiBQcm9jZXNzVHlwZTtcbiAgcHJpdmF0ZSByZWFkb25seSBlcnJvcjogUHJvY2Vzc1R5cGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgaXRlcmF0b3JSZXN1bHQ6IFByb2Nlc3NUeXBlO1xuICBwcml2YXRlIHJlYWRvbmx5IGl0ZXJhYmxlOiBQcm9jZXNzVHlwZTtcbiAgcHJpdmF0ZSByZWFkb25seSBpdGVyYWJsZUl0ZXJhdG9yOiBQcm9jZXNzVHlwZTtcbiAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2FjdGlvbjogUHJvY2Vzc1R5cGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgb3V0cHV0OiBQcm9jZXNzVHlwZTtcbiAgcHJpdmF0ZSByZWFkb25seSBhdHRyaWJ1dGU6IFByb2Nlc3NUeXBlO1xuICBwcml2YXRlIHJlYWRvbmx5IGlucHV0OiBQcm9jZXNzVHlwZTtcbiAgcHJpdmF0ZSByZWFkb25seSBhY2NvdW50OiBQcm9jZXNzVHlwZTtcbiAgcHJpdmF0ZSByZWFkb25seSBhc3NldDogUHJvY2Vzc1R5cGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29udHJhY3Q6IFByb2Nlc3NUeXBlO1xuICBwcml2YXRlIHJlYWRvbmx5IGhlYWRlcjogUHJvY2Vzc1R5cGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgYmxvY2s6IFByb2Nlc3NUeXBlO1xuICBwcml2YXRlIHJlYWRvbmx5IGZvcndhcmRWYWx1ZTogUHJvY2Vzc1R5cGU7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHtcbiAgICB0eXBlLFxuICAgIGtub3duVHlwZSxcbiAgICBzaW5nbGUsXG4gICAgc2luZ2xlVW5kZWZpbmVkLFxuICAgIHNpbmdsZUZhbHNlLFxuICAgIG9wdGlvbmFsLFxuICAgIGFycmF5LFxuICAgIG1hcCxcbiAgICBzZXQsXG4gICAgYm9vbGVhbjogcHJvY2Vzc0Jvb2xlYW4sXG4gICAgYnVmZmVyLFxuICAgIG51bGw6IHByb2Nlc3NOdWxsLFxuICAgIG51bWJlcjogcHJvY2Vzc051bWJlcixcbiAgICBvYmplY3QsXG4gICAgc3RyaW5nOiBwcm9jZXNzU3RyaW5nLFxuICAgIHN5bWJvbCxcbiAgICB1bmRlZmluZWQ6IHByb2Nlc3NVbmRlZmluZWQsXG4gICAgYXJyYXlTdG9yYWdlLFxuICAgIG1hcFN0b3JhZ2UsXG4gICAgc2V0U3RvcmFnZSxcbiAgICBlcnJvcixcbiAgICBpdGVyYXRvclJlc3VsdCxcbiAgICBpdGVyYWJsZSxcbiAgICBpdGVyYWJsZUl0ZXJhdG9yLFxuICAgIHRyYW5zYWN0aW9uLFxuICAgIG91dHB1dCxcbiAgICBhdHRyaWJ1dGUsXG4gICAgaW5wdXQsXG4gICAgYWNjb3VudCxcbiAgICBhc3NldCxcbiAgICBjb250cmFjdCxcbiAgICBoZWFkZXIsXG4gICAgYmxvY2ssXG4gICAgZm9yd2FyZFZhbHVlLFxuICB9OiBGb3JCdWlsdGluVHlwZUhlbHBlck9wdGlvbnMpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5rbm93blR5cGUgPSBrbm93blR5cGU7XG4gICAgdGhpcy5zaW5nbGUgPSBzaW5nbGU7XG4gICAgdGhpcy5zaW5nbGVVbmRlZmluZWQgPSBzaW5nbGVVbmRlZmluZWQ7XG4gICAgdGhpcy5zaW5nbGVGYWxzZSA9IHNpbmdsZUZhbHNlO1xuICAgIHRoaXMub3B0aW9uYWwgPSBvcHRpb25hbDtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG4gICAgdGhpcy5tYXAgPSBtYXA7XG4gICAgdGhpcy5zZXQgPSBzZXQ7XG4gICAgdGhpcy5ib29sZWFuID0gcHJvY2Vzc0Jvb2xlYW47XG4gICAgdGhpcy5idWZmZXIgPSBidWZmZXI7XG4gICAgdGhpcy5udWxsID0gcHJvY2Vzc051bGw7XG4gICAgdGhpcy5udW1iZXIgPSBwcm9jZXNzTnVtYmVyO1xuICAgIHRoaXMub2JqZWN0ID0gb2JqZWN0O1xuICAgIHRoaXMuc3RyaW5nID0gcHJvY2Vzc1N0cmluZztcbiAgICB0aGlzLnN5bWJvbCA9IHN5bWJvbDtcbiAgICB0aGlzLnVuZGVmaW5lZCA9IHByb2Nlc3NVbmRlZmluZWQ7XG4gICAgdGhpcy5hcnJheVN0b3JhZ2UgPSBhcnJheVN0b3JhZ2U7XG4gICAgdGhpcy5tYXBTdG9yYWdlID0gbWFwU3RvcmFnZTtcbiAgICB0aGlzLnNldFN0b3JhZ2UgPSBzZXRTdG9yYWdlO1xuICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcbiAgICB0aGlzLml0ZXJhdG9yUmVzdWx0ID0gaXRlcmF0b3JSZXN1bHQ7XG4gICAgdGhpcy5pdGVyYWJsZSA9IGl0ZXJhYmxlO1xuICAgIHRoaXMuaXRlcmFibGVJdGVyYXRvciA9IGl0ZXJhYmxlSXRlcmF0b3I7XG4gICAgdGhpcy50cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uO1xuICAgIHRoaXMub3V0cHV0ID0gb3V0cHV0O1xuICAgIHRoaXMuYXR0cmlidXRlID0gYXR0cmlidXRlO1xuICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgICB0aGlzLmFjY291bnQgPSBhY2NvdW50O1xuICAgIHRoaXMuYXNzZXQgPSBhc3NldDtcbiAgICB0aGlzLmNvbnRyYWN0ID0gY29udHJhY3Q7XG4gICAgdGhpcy5oZWFkZXIgPSBoZWFkZXI7XG4gICAgdGhpcy5ibG9jayA9IGJsb2NrO1xuICAgIHRoaXMuZm9yd2FyZFZhbHVlID0gZm9yd2FyZFZhbHVlO1xuICB9XG5cbiAgcHVibGljIGVtaXQoc2I6IFNjcmlwdEJ1aWxkZXIsIG5vZGU6IHRzLk5vZGUsIG9wdGlvbnM6IFZpc2l0T3B0aW9ucyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmtub3duVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnByb2Nlc3NLbm93blR5cGUodGhpcy5rbm93blR5cGUsIG9wdGlvbnMpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHRwZSA9IHRoaXMudHlwZTtcbiAgICBpZiAodHBlICE9PSB1bmRlZmluZWQgJiYgc2IuY29udGV4dC5idWlsdGlucy5pc1R5cGUobm9kZSwgdHBlLCAnRm9yd2FyZGVkVmFsdWUnKSkge1xuICAgICAgdHBlID0gZ2V0Rm9yd2FyZGVkVmFsdWVUeXBlKHRwZSk7XG4gICAgfVxuXG4gICAgc2IuZW1pdEhlbHBlcihcbiAgICAgIG5vZGUsXG4gICAgICBvcHRpb25zLFxuICAgICAgc2IuaGVscGVycy5mb3JUeXBlKHtcbiAgICAgICAgdHlwZTogdHBlLFxuICAgICAgICBzaW5nbGU6IHRoaXMuc2luZ2xlLFxuICAgICAgICBzaW5nbGVVbmRlZmluZWQ6IHRoaXMuc2luZ2xlVW5kZWZpbmVkLFxuICAgICAgICBzaW5nbGVGYWxzZTogdGhpcy5zaW5nbGVGYWxzZSxcbiAgICAgICAgb3B0aW9uYWw6IHRoaXMub3B0aW9uYWwsXG4gICAgICAgIHR5cGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaGFzVHlwZTogKHR5cGUpID0+IGhhc1VuZGVmaW5lZChzYi5jb250ZXh0LCBub2RlLCB0eXBlKSxcbiAgICAgICAgICAgIGlzUnVudGltZVR5cGU6IChpbm5lck9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMuaXNVbmRlZmluZWQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IHRoaXMudW5kZWZpbmVkLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaGFzVHlwZTogKHR5cGUpID0+IGhhc051bGwoc2IuY29udGV4dCwgbm9kZSwgdHlwZSksXG4gICAgICAgICAgICBpc1J1bnRpbWVUeXBlOiAoaW5uZXJPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLmlzTnVsbCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogdGhpcy5udWxsLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaGFzVHlwZTogKHR5cGUpID0+IGhhc0Jvb2xlYW4oc2IuY29udGV4dCwgbm9kZSwgdHlwZSksXG4gICAgICAgICAgICBpc1J1bnRpbWVUeXBlOiAoaW5uZXJPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLmlzQm9vbGVhbik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogdGhpcy5ib29sZWFuLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaGFzVHlwZTogKHR5cGUpID0+IGhhc051bWJlcihzYi5jb250ZXh0LCBub2RlLCB0eXBlKSxcbiAgICAgICAgICAgIGlzUnVudGltZVR5cGU6IChpbm5lck9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMuaXNOdW1iZXIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IHRoaXMubnVtYmVyLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaGFzVHlwZTogKHR5cGUpID0+IGhhc1N0cmluZyhzYi5jb250ZXh0LCBub2RlLCB0eXBlKSxcbiAgICAgICAgICAgIGlzUnVudGltZVR5cGU6IChpbm5lck9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMuaXNTdHJpbmcpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IHRoaXMuc3RyaW5nLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaGFzVHlwZTogKHR5cGUpID0+IGhhc1N5bWJvbChzYi5jb250ZXh0LCBub2RlLCB0eXBlKSxcbiAgICAgICAgICAgIGlzUnVudGltZVR5cGU6IChpbm5lck9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMuaXNTeW1ib2wpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IHRoaXMuc3ltYm9sLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaGFzVHlwZTogKHR5cGUpID0+IGhhc0J1ZmZlcihzYi5jb250ZXh0LCBub2RlLCB0eXBlKSxcbiAgICAgICAgICAgIGlzUnVudGltZVR5cGU6IChpbm5lck9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMuaXNCdWZmZXIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IHRoaXMuYnVmZmVyLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaGFzVHlwZTogKHR5cGUpID0+IGhhc0FycmF5KHNiLmNvbnRleHQsIG5vZGUsIHR5cGUpLFxuICAgICAgICAgICAgaXNSdW50aW1lVHlwZTogKGlubmVyT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVyT3B0aW9ucywgc2IuaGVscGVycy5pc0FycmF5KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiB0aGlzLmFycmF5LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaGFzVHlwZTogKHR5cGUpID0+IGhhc0FycmF5U3RvcmFnZShzYi5jb250ZXh0LCBub2RlLCB0eXBlKSxcbiAgICAgICAgICAgIGlzUnVudGltZVR5cGU6IChpbm5lck9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMuaXNBcnJheVN0b3JhZ2UpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IHRoaXMuYXJyYXlTdG9yYWdlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaGFzVHlwZTogKHR5cGUpID0+IGhhc01hcChzYi5jb250ZXh0LCBub2RlLCB0eXBlKSxcbiAgICAgICAgICAgIGlzUnVudGltZVR5cGU6IChpbm5lck9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMuaXNNYXApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IHRoaXMubWFwLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaGFzVHlwZTogKHR5cGUpID0+IGhhc01hcFN0b3JhZ2Uoc2IuY29udGV4dCwgbm9kZSwgdHlwZSksXG4gICAgICAgICAgICBpc1J1bnRpbWVUeXBlOiAoaW5uZXJPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLmlzTWFwU3RvcmFnZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogdGhpcy5tYXBTdG9yYWdlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaGFzVHlwZTogKHR5cGUpID0+IGhhc1NldChzYi5jb250ZXh0LCBub2RlLCB0eXBlKSxcbiAgICAgICAgICAgIGlzUnVudGltZVR5cGU6IChpbm5lck9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMuaXNTZXQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IHRoaXMuc2V0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaGFzVHlwZTogKHR5cGUpID0+IGhhc1NldFN0b3JhZ2Uoc2IuY29udGV4dCwgbm9kZSwgdHlwZSksXG4gICAgICAgICAgICBpc1J1bnRpbWVUeXBlOiAoaW5uZXJPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLmlzU2V0U3RvcmFnZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogdGhpcy5zZXRTdG9yYWdlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaGFzVHlwZTogKHR5cGUpID0+IGhhc0Vycm9yKHNiLmNvbnRleHQsIG5vZGUsIHR5cGUpLFxuICAgICAgICAgICAgaXNSdW50aW1lVHlwZTogKGlubmVyT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVyT3B0aW9ucywgc2IuaGVscGVycy5pc0Vycm9yKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiB0aGlzLmVycm9yLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaGFzVHlwZTogKHR5cGUpID0+IGhhc0l0ZXJhdG9yUmVzdWx0KHNiLmNvbnRleHQsIG5vZGUsIHR5cGUpLFxuICAgICAgICAgICAgaXNSdW50aW1lVHlwZTogKGlubmVyT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVyT3B0aW9ucywgc2IuaGVscGVycy5pc0l0ZXJhdG9yUmVzdWx0KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiB0aGlzLml0ZXJhdG9yUmVzdWx0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaGFzVHlwZTogKHR5cGUpID0+IGhhc0l0ZXJhYmxlSXRlcmF0b3Ioc2IuY29udGV4dCwgbm9kZSwgdHlwZSksXG4gICAgICAgICAgICBpc1J1bnRpbWVUeXBlOiAoaW5uZXJPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLmlzSXRlcmFibGVJdGVyYXRvcik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogdGhpcy5pdGVyYWJsZUl0ZXJhdG9yLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaGFzVHlwZTogKHR5cGUpID0+IGhhc0ZvcndhcmRWYWx1ZShzYi5jb250ZXh0LCBub2RlLCB0eXBlKSxcbiAgICAgICAgICAgIGlzUnVudGltZVR5cGU6IChpbm5lck9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMuaXNGb3J3YXJkVmFsdWUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IHRoaXMuZm9yd2FyZFZhbHVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaGFzVHlwZTogKHR5cGUpID0+IGhhc1RyYW5zYWN0aW9uKHNiLmNvbnRleHQsIG5vZGUsIHR5cGUpLFxuICAgICAgICAgICAgaXNSdW50aW1lVHlwZTogKGlubmVyT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVyT3B0aW9ucywgc2IuaGVscGVycy5pc1RyYW5zYWN0aW9uKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiB0aGlzLnRyYW5zYWN0aW9uLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaGFzVHlwZTogKHR5cGUpID0+IGhhc091dHB1dChzYi5jb250ZXh0LCBub2RlLCB0eXBlKSxcbiAgICAgICAgICAgIGlzUnVudGltZVR5cGU6IChpbm5lck9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMuaXNPdXRwdXQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IHRoaXMub3V0cHV0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaGFzVHlwZTogKHR5cGUpID0+IGhhc0F0dHJpYnV0ZShzYi5jb250ZXh0LCBub2RlLCB0eXBlKSxcbiAgICAgICAgICAgIGlzUnVudGltZVR5cGU6IChpbm5lck9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMuaXNBdHRyaWJ1dGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb2Nlc3M6IHRoaXMuYXR0cmlidXRlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaGFzVHlwZTogKHR5cGUpID0+IGhhc0lucHV0KHNiLmNvbnRleHQsIG5vZGUsIHR5cGUpLFxuICAgICAgICAgICAgaXNSdW50aW1lVHlwZTogKGlubmVyT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVyT3B0aW9ucywgc2IuaGVscGVycy5pc0lucHV0KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9jZXNzOiB0aGlzLmlucHV0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaGFzVHlwZTogKHR5cGUpID0+IGhhc0FjY291bnQoc2IuY29udGV4dCwgbm9kZSwgdHlwZSksXG4gICAgICAgICAgICBpc1J1bnRpbWVUeXBlOiAoaW5uZXJPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLmlzQWNjb3VudCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvY2VzczogdGhpcy5hY2NvdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICA