UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

197 lines (195 loc) 28.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const constants_1 = require("../../constants"); const Helper_1 = require("../Helper"); class EqualsEqualsEqualsHelper extends Helper_1.Helper { constructor(options) { super(); this.leftType = options.leftType; this.leftKnownType = options.leftKnownType; this.rightType = options.rightType; this.rightKnownType = options.rightKnownType; } emit(sb, node, options) { if (!options.pushValue) { sb.emitOp(node, 'DROP'); sb.emitOp(node, 'DROP'); return; } const pushFalse = () => { sb.emitOp(node, 'DROP'); sb.emitOp(node, 'DROP'); sb.emitPushBoolean(node, false); }; const pushTrue = () => { sb.emitOp(node, 'DROP'); sb.emitOp(node, 'DROP'); sb.emitPushBoolean(node, true); }; const compare = (type) => (innerOptions) => { sb.emitHelper(node, innerOptions, sb.helpers.unwrapVal({ type })); sb.emitOp(node, 'SWAP'); sb.emitHelper(node, innerOptions, sb.helpers.unwrapVal({ type })); sb.emitOp(node, 'EQUAL'); }; const compareStorageValue = () => { sb.emitPushInt(node, 1); sb.emitOp(node, 'PICKITEM'); sb.emitOp(node, 'SWAP'); sb.emitPushInt(node, 1); sb.emitOp(node, 'PICKITEM'); sb.emitOp(node, 'EQUAL'); }; const compareNumber = (innerOptions) => { sb.emitHelper(node, innerOptions, sb.helpers.unwrapNumber); sb.emitOp(node, 'SWAP'); sb.emitHelper(node, innerOptions, sb.helpers.unwrapNumber); sb.emitOp(node, 'NUMEQUAL'); }; const createProcess = (value, type, compareValue = compare(type)) => (innerOptions) => { sb.emitOp(node, 'SWAP'); sb.emitHelper(node, innerOptions, sb.helpers.forBuiltinType({ type: this.leftType, knownType: this.leftKnownType, array: pushFalse, arrayStorage: pushFalse, boolean: pushFalse, buffer: pushFalse, null: pushFalse, number: pushFalse, object: pushFalse, string: pushFalse, symbol: pushFalse, undefined: pushFalse, map: pushFalse, mapStorage: pushFalse, set: pushFalse, setStorage: pushFalse, error: pushFalse, forwardValue: pushFalse, iteratorResult: pushFalse, iterable: pushFalse, iterableIterator: pushFalse, transaction: pushFalse, output: pushFalse, attribute: pushFalse, input: pushFalse, account: pushFalse, asset: pushFalse, contract: pushFalse, header: pushFalse, block: pushFalse, [value]: compareValue, })); }; const createProcessStorage = (value) => (innerOptions) => { sb.emitOp(node, 'SWAP'); sb.emitHelper(node, innerOptions, sb.helpers.forBuiltinType({ type: this.leftType, knownType: this.leftKnownType, array: pushFalse, arrayStorage: pushFalse, boolean: pushFalse, buffer: pushFalse, null: pushFalse, number: pushFalse, object: pushFalse, string: pushFalse, symbol: pushFalse, undefined: pushFalse, map: pushFalse, mapStorage: pushFalse, set: pushFalse, setStorage: pushFalse, error: pushFalse, forwardValue: pushFalse, iteratorResult: pushFalse, iterable: pushFalse, iterableIterator: pushFalse, transaction: pushFalse, output: pushFalse, attribute: pushFalse, input: pushFalse, account: pushFalse, asset: pushFalse, contract: pushFalse, header: pushFalse, block: pushFalse, [value]: compareStorageValue, })); }; const createProcessNullOrUndefined = (value) => (innerOptions) => { sb.emitOp(node, 'SWAP'); sb.emitHelper(node, innerOptions, sb.helpers.forBuiltinType({ type: this.leftType, knownType: this.leftKnownType, array: pushFalse, arrayStorage: pushFalse, boolean: pushFalse, buffer: pushFalse, null: pushFalse, number: pushFalse, object: pushFalse, string: pushFalse, symbol: pushFalse, undefined: pushFalse, map: pushFalse, mapStorage: pushFalse, set: pushFalse, setStorage: pushFalse, error: pushFalse, forwardValue: pushFalse, iteratorResult: pushFalse, iterable: pushFalse, iterableIterator: pushFalse, transaction: pushFalse, output: pushFalse, attribute: pushFalse, input: pushFalse, account: pushFalse, asset: pushFalse, contract: pushFalse, header: pushFalse, block: pushFalse, [value]: pushTrue, })); }; const createProcessIterable = () => (innerOptions) => { sb.emitHelper(node, innerOptions, sb.helpers.throwTypeError); }; sb.emitHelper(node, options, sb.helpers.forBuiltinType({ type: this.rightType, knownType: this.rightKnownType, array: createProcess('array', constants_1.Types.Array), arrayStorage: createProcessStorage('arrayStorage'), boolean: createProcess('boolean', constants_1.Types.Boolean), buffer: createProcess('buffer', constants_1.Types.Buffer), null: createProcessNullOrUndefined('null'), number: createProcess('number', constants_1.Types.Number, compareNumber), object: createProcess('object', constants_1.Types.Object), string: createProcess('string', constants_1.Types.String), symbol: createProcess('symbol', constants_1.Types.Symbol), undefined: createProcessNullOrUndefined('undefined'), map: createProcess('map', constants_1.Types.Map), mapStorage: createProcessStorage('mapStorage'), set: createProcess('set', constants_1.Types.Set), setStorage: createProcessStorage('setStorage'), error: createProcess('error', constants_1.Types.Error), forwardValue: createProcess('error', constants_1.Types.ForwardValue), iteratorResult: createProcess('iteratorResult', constants_1.Types.IteratorResult), iterable: createProcessIterable(), iterableIterator: createProcess('iterableIterator', constants_1.Types.IterableIterator), transaction: createProcess('transaction', constants_1.Types.Transaction), output: createProcess('output', constants_1.Types.Output), attribute: createProcess('attribute', constants_1.Types.Attribute), input: createProcess('input', constants_1.Types.Input), account: createProcess('account', constants_1.Types.Account), asset: createProcess('asset', constants_1.Types.Asset), contract: createProcess('contract', constants_1.Types.Contract), header: createProcess('header', constants_1.Types.Header), block: createProcess('block', constants_1.Types.Block), })); } } exports.EqualsEqualsEqualsHelper = EqualsEqualsEqualsHelper; //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkVxdWFsc0VxdWFsc0VxdWFsc0hlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLCtDQUF1RDtBQUd2RCxzQ0FBbUM7QUFZbkMsTUFBYSx3QkFBeUIsU0FBUSxlQUFNO0lBTWxELFlBQW1CLE9BQXdDO1FBQ3pELEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztRQUMzQyxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDO0lBQy9DLENBQUM7SUFFTSxJQUFJLENBQUMsRUFBaUIsRUFBRSxJQUFhLEVBQUUsT0FBcUI7UUFDakUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFDdEIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDeEIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFFeEIsT0FBTztTQUNSO1FBRUQsTUFBTSxTQUFTLEdBQUcsR0FBRyxFQUFFO1lBRXJCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRXhCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRXhCLEVBQUUsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRTtZQUVwQixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUV4QixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUV4QixF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U0FBUyxFQUFFLGFBQWEsQ0FBQyxXQUFXLEVBQUUsaUJBQUssQ0FBQyxTQUFTLENBQUM7WUFDdEQsS0FBSyxFQUFFLGFBQWEsQ0FBQyxPQUFPLEVBQUUsaUJBQUssQ0FBQyxLQUFLLENBQUM7WUFDMUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxTQUFTLEVBQUUsaUJBQUssQ0FBQyxPQUFPLENBQUM7WUFDaEQsS0FBSyxFQUFFLGFBQWEsQ0FBQyxPQUFPLEVBQUUsaUJBQUssQ0FBQyxLQUFLLENBQUM7WUFDMUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxVQUFVLEVBQUUsaUJBQUssQ0FBQyxRQUFRLENBQUM7WUFDbkQsTUFBTSxFQUFFLGFBQWEsQ0FBQyxRQUFRLEVBQUUsaUJBQUssQ0FBQyxNQUFNLENBQUM7WUFDN0MsS0FBSyxFQUFFLGFBQWEsQ0FBQyxPQUFPLEVBQUUsaUJBQUssQ0FBQyxLQUFLLENBQUM7U0FDM0MsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0NBQ0Y7QUF2T0QsNERBdU9DIiwiZmlsZSI6Im5lby1vbmUtc21hcnQtY29udHJhY3QtY29tcGlsZXIvc3JjL2NvbXBpbGUvaGVscGVyL3JlbGF0aW9uYWwvRXF1YWxzRXF1YWxzRXF1YWxzSGVscGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuaW1wb3J0IHsgVHlwZXMsIFdyYXBwYWJsZVR5cGUgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgU2NyaXB0QnVpbGRlciB9IGZyb20gJy4uLy4uL3NiJztcbmltcG9ydCB7IFZpc2l0T3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEhlbHBlciB9IGZyb20gJy4uL0hlbHBlcic7XG5pbXBvcnQgeyBGb3JCdWlsdGluVHlwZUhlbHBlck9wdGlvbnMgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXF1YWxzRXF1YWxzRXF1YWxzSGVscGVyT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGxlZnRUeXBlOiB0cy5UeXBlIHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBsZWZ0S25vd25UeXBlPzogVHlwZXM7XG4gIHJlYWRvbmx5IHJpZ2h0VHlwZTogdHMuVHlwZSB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgcmlnaHRLbm93blR5cGU/OiBUeXBlcztcbn1cblxuLy8gSW5wdXQ6IFtyaWdodCwgbGVmdF1cbi8vIE91dHB1dDogW2Jvb2xlYW5dXG5leHBvcnQgY2xhc3MgRXF1YWxzRXF1YWxzRXF1YWxzSGVscGVyIGV4dGVuZHMgSGVscGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBsZWZ0VHlwZTogdHMuVHlwZSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBsZWZ0S25vd25UeXBlPzogVHlwZXM7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmlnaHRUeXBlOiB0cy5UeXBlIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IHJpZ2h0S25vd25UeXBlPzogVHlwZXM7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEVxdWFsc0VxdWFsc0VxdWFsc0hlbHBlck9wdGlvbnMpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubGVmdFR5cGUgPSBvcHRpb25zLmxlZnRUeXBlO1xuICAgIHRoaXMubGVmdEtub3duVHlwZSA9IG9wdGlvbnMubGVmdEtub3duVHlwZTtcbiAgICB0aGlzLnJpZ2h0VHlwZSA9IG9wdGlvbnMucmlnaHRUeXBlO1xuICAgIHRoaXMucmlnaHRLbm93blR5cGUgPSBvcHRpb25zLnJpZ2h0S25vd25UeXBlO1xuICB9XG5cbiAgcHVibGljIGVtaXQoc2I6IFNjcmlwdEJ1aWxkZXIsIG5vZGU6IHRzLk5vZGUsIG9wdGlvbnM6IFZpc2l0T3B0aW9ucyk6IHZvaWQge1xuICAgIGlmICghb3B0aW9ucy5wdXNoVmFsdWUpIHtcbiAgICAgIHNiLmVtaXRPcChub2RlLCAnRFJPUCcpO1xuICAgICAgc2IuZW1pdE9wKG5vZGUsICdEUk9QJyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwdXNoRmFsc2UgPSAoKSA9PiB7XG4gICAgICAvLyBbcmlnaHRdXG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICAgIC8vIFtdXG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICAgIC8vIFtib29sZWFuXVxuICAgICAgc2IuZW1pdFB1c2hCb29sZWFuKG5vZGUsIGZhbHNlKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcHVzaFRydWUgPSAoKSA9PiB7XG4gICAgICAvLyBbcmlnaHRdXG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICAgIC8vIFtdXG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICAgIC8vIFtib29sZWFuXVxuICAgICAgc2IuZW1pdFB1c2hCb29sZWFuKG5vZGUsIHRydWUpO1xuICAgIH07XG5cbiAgICBjb25zdCBjb21wYXJlID0gKHR5cGU6IFdyYXBwYWJsZVR5cGUpID0+IChpbm5lck9wdGlvbnM6IFZpc2l0T3B0aW9ucykgPT4ge1xuICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMudW53cmFwVmFsKHsgdHlwZSB9KSk7XG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ1NXQVAnKTtcbiAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLnVud3JhcFZhbCh7IHR5cGUgfSkpO1xuICAgICAgc2IuZW1pdE9wKG5vZGUsICdFUVVBTCcpO1xuICAgIH07XG5cbiAgICBjb25zdCBjb21wYXJlU3RvcmFnZVZhbHVlID0gKCkgPT4ge1xuICAgICAgc2IuZW1pdFB1c2hJbnQobm9kZSwgMSk7XG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ1BJQ0tJVEVNJyk7XG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ1NXQVAnKTtcbiAgICAgIHNiLmVtaXRQdXNoSW50KG5vZGUsIDEpO1xuICAgICAgc2IuZW1pdE9wKG5vZGUsICdQSUNLSVRFTScpO1xuICAgICAgc2IuZW1pdE9wKG5vZGUsICdFUVVBTCcpO1xuICAgIH07XG5cbiAgICBjb25zdCBjb21wYXJlTnVtYmVyID0gKGlubmVyT3B0aW9uczogVmlzaXRPcHRpb25zKSA9PiB7XG4gICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVyT3B0aW9ucywgc2IuaGVscGVycy51bndyYXBOdW1iZXIpO1xuICAgICAgc2IuZW1pdE9wKG5vZGUsICdTV0FQJyk7XG4gICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVyT3B0aW9ucywgc2IuaGVscGVycy51bndyYXBOdW1iZXIpO1xuICAgICAgc2IuZW1pdE9wKG5vZGUsICdOVU1FUVVBTCcpO1xuICAgIH07XG5cbiAgICBjb25zdCBjcmVhdGVQcm9jZXNzID0gKFxuICAgICAgdmFsdWU6IGtleW9mIEZvckJ1aWx0aW5UeXBlSGVscGVyT3B0aW9ucyxcbiAgICAgIHR5cGU6IFdyYXBwYWJsZVR5cGUsXG4gICAgICBjb21wYXJlVmFsdWUgPSBjb21wYXJlKHR5cGUpLFxuICAgICkgPT4gKGlubmVyT3B0aW9uczogVmlzaXRPcHRpb25zKSA9PiB7XG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ1NXQVAnKTtcbiAgICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICAgIG5vZGUsXG4gICAgICAgIGlubmVyT3B0aW9ucyxcbiAgICAgICAgc2IuaGVscGVycy5mb3JCdWlsdGluVHlwZSh7XG4gICAgICAgICAgdHlwZTogdGhpcy5sZWZ0VHlwZSxcbiAgICAgICAgICBrbm93blR5cGU6IHRoaXMubGVmdEtub3duVHlwZSxcbiAgICAgICAgICBhcnJheTogcHVzaEZhbHNlLFxuICAgICAgICAgIGFycmF5U3RvcmFnZTogcHVzaEZhbHNlLFxuICAgICAgICAgIGJvb2xlYW46IHB1c2hGYWxzZSxcbiAgICAgICAgICBidWZmZXI6IHB1c2hGYWxzZSxcbiAgICAgICAgICBudWxsOiBwdXNoRmFsc2UsXG4gICAgICAgICAgbnVtYmVyOiBwdXNoRmFsc2UsXG4gICAgICAgICAgb2JqZWN0OiBwdXNoRmFsc2UsXG4gICAgICAgICAgc3RyaW5nOiBwdXNoRmFsc2UsXG4gICAgICAgICAgc3ltYm9sOiBwdXNoRmFsc2UsXG4gICAgICAgICAgdW5kZWZpbmVkOiBwdXNoRmFsc2UsXG4gICAgICAgICAgbWFwOiBwdXNoRmFsc2UsXG4gICAgICAgICAgbWFwU3RvcmFnZTogcHVzaEZhbHNlLFxuICAgICAgICAgIHNldDogcHVzaEZhbHNlLFxuICAgICAgICAgIHNldFN0b3JhZ2U6IHB1c2hGYWxzZSxcbiAgICAgICAgICBlcnJvcjogcHVzaEZhbHNlLFxuICAgICAgICAgIGZvcndhcmRWYWx1ZTogcHVzaEZhbHNlLFxuICAgICAgICAgIGl0ZXJhdG9yUmVzdWx0OiBwdXNoRmFsc2UsXG4gICAgICAgICAgaXRlcmFibGU6IHB1c2hGYWxzZSxcbiAgICAgICAgICBpdGVyYWJsZUl0ZXJhdG9yOiBwdXNoRmFsc2UsXG4gICAgICAgICAgdHJhbnNhY3Rpb246IHB1c2hGYWxzZSxcbiAgICAgICAgICBvdXRwdXQ6IHB1c2hGYWxzZSxcbiAgICAgICAgICBhdHRyaWJ1dGU6IHB1c2hGYWxzZSxcbiAgICAgICAgICBpbnB1dDogcHVzaEZhbHNlLFxuICAgICAgICAgIGFjY291bnQ6IHB1c2hGYWxzZSxcbiAgICAgICAgICBhc3NldDogcHVzaEZhbHNlLFxuICAgICAgICAgIGNvbnRyYWN0OiBwdXNoRmFsc2UsXG4gICAgICAgICAgaGVhZGVyOiBwdXNoRmFsc2UsXG4gICAgICAgICAgYmxvY2s6IHB1c2hGYWxzZSxcbiAgICAgICAgICBbdmFsdWVdOiBjb21wYXJlVmFsdWUsXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgY29uc3QgY3JlYXRlUHJvY2Vzc1N0b3JhZ2UgPSAodmFsdWU6IGtleW9mIEZvckJ1aWx0aW5UeXBlSGVscGVyT3B0aW9ucykgPT4gKGlubmVyT3B0aW9uczogVmlzaXRPcHRpb25zKSA9PiB7XG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ1NXQVAnKTtcbiAgICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICAgIG5vZGUsXG4gICAgICAgIGlubmVyT3B0aW9ucyxcbiAgICAgICAgc2IuaGVscGVycy5mb3JCdWlsdGluVHlwZSh7XG4gICAgICAgICAgdHlwZTogdGhpcy5sZWZ0VHlwZSxcbiAgICAgICAgICBrbm93blR5cGU6IHRoaXMubGVmdEtub3duVHlwZSxcbiAgICAgICAgICBhcnJheTogcHVzaEZhbHNlLFxuICAgICAgICAgIGFycmF5U3RvcmFnZTogcHVzaEZhbHNlLFxuICAgICAgICAgIGJvb2xlYW46IHB1c2hGYWxzZSxcbiAgICAgICAgICBidWZmZXI6IHB1c2hGYWxzZSxcbiAgICAgICAgICBudWxsOiBwdXNoRmFsc2UsXG4gICAgICAgICAgbnVtYmVyOiBwdXNoRmFsc2UsXG4gICAgICAgICAgb2JqZWN0OiBwdXNoRmFsc2UsXG4gICAgICAgICAgc3RyaW5nOiBwdXNoRmFsc2UsXG4gICAgICAgICAgc3ltYm9sOiBwdXNoRmFsc2UsXG4gICAgICAgICAgdW5kZWZpbmVkOiBwdXNoRmFsc2UsXG4gICAgICAgICAgbWFwOiBwdXNoRmFsc2UsXG4gICAgICAgICAgbWFwU3RvcmFnZTogcHVzaEZhbHNlLFxuICAgICAgICAgIHNldDogcHVzaEZhbHNlLFxuICAgICAgICAgIHNldFN0b3JhZ2U6IHB1c2hGYWxzZSxcbiAgICAgICAgICBlcnJvcjogcHVzaEZhbHNlLFxuICAgICAgICAgIGZvcndhcmRWYWx1ZTogcHVzaEZhbHNlLFxuICAgICAgICAgIGl0ZXJhdG9yUmVzdWx0OiBwdXNoRmFsc2UsXG4gICAgICAgICAgaXRlcmFibGU6IHB1c2hGYWxzZSxcbiAgICAgICAgICBpdGVyYWJsZUl0ZXJhdG9yOiBwdXNoRmFsc2UsXG4gICAgICAgICAgdHJhbnNhY3Rpb246IHB1c2hGYWxzZSxcbiAgICAgICAgICBvdXRwdXQ6IHB1c2hGYWxzZSxcbiAgICAgICAgICBhdHRyaWJ1dGU6IHB1c2hGYWxzZSxcbiAgICAgICAgICBpbnB1dDogcHVzaEZhbHNlLFxuICAgICAgICAgIGFjY291bnQ6IHB1c2hGYWxzZSxcbiAgICAgICAgICBhc3NldDogcHVzaEZhbHNlLFxuICAgICAgICAgIGNvbnRyYWN0OiBwdXNoRmFsc2UsXG4gICAgICAgICAgaGVhZGVyOiBwdXNoRmFsc2UsXG4gICAgICAgICAgYmxvY2s6IHB1c2hGYWxzZSxcbiAgICAgICAgICBbdmFsdWVdOiBjb21wYXJlU3RvcmFnZVZhbHVlLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfTtcblxuICAgIGNvbnN0IGNyZWF0ZVByb2Nlc3NOdWxsT3JVbmRlZmluZWQgPSAodmFsdWU6IGtleW9mIEZvckJ1aWx0aW5UeXBlSGVscGVyT3B0aW9ucykgPT4gKGlubmVyT3B0aW9uczogVmlzaXRPcHRpb25zKSA9PiB7XG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ1NXQVAnKTtcbiAgICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICAgIG5vZGUsXG4gICAgICAgIGlubmVyT3B0aW9ucyxcbiAgICAgICAgc2IuaGVscGVycy5mb3JCdWlsdGluVHlwZSh7XG4gICAgICAgICAgdHlwZTogdGhpcy5sZWZ0VHlwZSxcbiAgICAgICAgICBrbm93blR5cGU6IHRoaXMubGVmdEtub3duVHlwZSxcbiAgICAgICAgICBhcnJheTogcHVzaEZhbHNlLFxuICAgICAgICAgIGFycmF5U3RvcmFnZTogcHVzaEZhbHNlLFxuICAgICAgICAgIGJvb2xlYW46IHB1c2hGYWxzZSxcbiAgICAgICAgICBidWZmZXI6IHB1c2hGYWxzZSxcbiAgICAgICAgICBudWxsOiBwdXNoRmFsc2UsXG4gICAgICAgICAgbnVtYmVyOiBwdXNoRmFsc2UsXG4gICAgICAgICAgb2JqZWN0OiBwdXNoRmFsc2UsXG4gICAgICAgICAgc3RyaW5nOiBwdXNoRmFsc2UsXG4gICAgICAgICAgc3ltYm9sOiBwdXNoRmFsc2UsXG4gICAgICAgICAgdW5kZWZpbmVkOiBwdXNoRmFsc2UsXG4gICAgICAgICAgbWFwOiBwdXNoRmFsc2UsXG4gICAgICAgICAgbWFwU3RvcmFnZTogcHVzaEZhbHNlLFxuICAgICAgICAgIHNldDogcHVzaEZhbHNlLFxuICAgICAgICAgIHNldFN0b3JhZ2U6IHB1c2hGYWxzZSxcbiAgICAgICAgICBlcnJvcjogcHVzaEZhbHNlLFxuICAgICAgICAgIGZvcndhcmRWYWx1ZTogcHVzaEZhbHNlLFxuICAgICAgICAgIGl0ZXJhdG9yUmVzdWx0OiBwdXNoRmFsc2UsXG4gICAgICAgICAgaXRlcmFibGU6IHB1c2hGYWxzZSxcbiAgICAgICAgICBpdGVyYWJsZUl0ZXJhdG9yOiBwdXNoRmFsc2UsXG4gICAgICAgICAgdHJhbnNhY3Rpb246IHB1c2hGYWxzZSxcbiAgICAgICAgICBvdXRwdXQ6IHB1c2hGYWxzZSxcbiAgICAgICAgICBhdHRyaWJ1dGU6IHB1c2hGYWxzZSxcbiAgICAgICAgICBpbnB1dDogcHVzaEZhbHNlLFxuICAgICAgICAgIGFjY291bnQ6IHB1c2hGYWxzZSxcbiAgICAgICAgICBhc3NldDogcHVzaEZhbHNlLFxuICAgICAgICAgIGNvbnRyYWN0OiBwdXNoRmFsc2UsXG4gICAgICAgICAgaGVhZGVyOiBwdXNoRmFsc2UsXG4gICAgICAgICAgYmxvY2s6IHB1c2hGYWxzZSxcbiAgICAgICAgICBbdmFsdWVdOiBwdXNoVHJ1ZSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH07XG5cbiAgICBjb25zdCBjcmVhdGVQcm9jZXNzSXRlcmFibGUgPSAoKSA9PiAoaW5uZXJPcHRpb25zOiBWaXNpdE9wdGlvbnMpID0+IHtcbiAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLnRocm93VHlwZUVycm9yKTtcbiAgICB9O1xuXG4gICAgc2IuZW1pdEhlbHBlcihcbiAgICAgIG5vZGUsXG4gICAgICBvcHRpb25zLFxuICAgICAgc2IuaGVscGVycy5mb3JCdWlsdGluVHlwZSh7XG4gICAgICAgIHR5cGU6IHRoaXMucmlnaHRUeXBlLFxuICAgICAgICBrbm93blR5cGU6IHRoaXMucmlnaHRLbm93blR5cGUsXG4gICAgICAgIGFycmF5OiBjcmVhdGVQcm9jZXNzKCdhcnJheScsIFR5cGVzLkFycmF5KSxcbiAgICAgICAgYXJyYXlTdG9yYWdlOiBjcmVhdGVQcm9jZXNzU3RvcmFnZSgnYXJyYXlTdG9yYWdlJyksXG4gICAgICAgIGJvb2xlYW46IGNyZWF0ZVByb2Nlc3MoJ2Jvb2xlYW4nLCBUeXBlcy5Cb29sZWFuKSxcbiAgICAgICAgYnVmZmVyOiBjcmVhdGVQcm9jZXNzKCdidWZmZXInLCBUeXBlcy5CdWZmZXIpLFxuICAgICAgICBudWxsOiBjcmVhdGVQcm9jZXNzTnVsbE9yVW5kZWZpbmVkKCdudWxsJyksXG4gICAgICAgIG51bWJlcjogY3JlYXRlUHJvY2VzcygnbnVtYmVyJywgVHlwZXMuTnVtYmVyLCBjb21wYXJlTnVtYmVyKSxcbiAgICAgICAgb2JqZWN0OiBjcmVhdGVQcm9jZXNzKCdvYmplY3QnLCBUeXBlcy5PYmplY3QpLFxuICAgICAgICBzdHJpbmc6IGNyZWF0ZVByb2Nlc3MoJ3N0cmluZycsIFR5cGVzLlN0cmluZyksXG4gICAgICAgIHN5bWJvbDogY3JlYXRlUHJvY2Vzcygnc3ltYm9sJywgVHlwZXMuU3ltYm9sKSxcbiAgICAgICAgdW5kZWZpbmVkOiBjcmVhdGVQcm9jZXNzTnVsbE9yVW5kZWZpbmVkKCd1bmRlZmluZWQnKSxcbiAgICAgICAgbWFwOiBjcmVhdGVQcm9jZXNzKCdtYXAnLCBUeXBlcy5NYXApLFxuICAgICAgICBtYXBTdG9yYWdlOiBjcmVhdGVQcm9jZXNzU3RvcmFnZSgnbWFwU3RvcmFnZScpLFxuICAgICAgICBzZXQ6IGNyZWF0ZVByb2Nlc3MoJ3NldCcsIFR5cGVzLlNldCksXG4gICAgICAgIHNldFN0b3JhZ2U6IGNyZWF0ZVByb2Nlc3NTdG9yYWdlKCdzZXRTdG9yYWdlJyksXG4gICAgICAgIGVycm9yOiBjcmVhdGVQcm9jZXNzKCdlcnJvcicsIFR5cGVzLkVycm9yKSxcbiAgICAgICAgZm9yd2FyZFZhbHVlOiBjcmVhdGVQcm9jZXNzKCdlcnJvcicsIFR5cGVzLkZvcndhcmRWYWx1ZSksXG4gICAgICAgIGl0ZXJhdG9yUmVzdWx0OiBjcmVhdGVQcm9jZXNzKCdpdGVyYXRvclJlc3VsdCcsIFR5cGVzLkl0ZXJhdG9yUmVzdWx0KSxcbiAgICAgICAgaXRlcmFibGU6IGNyZWF0ZVByb2Nlc3NJdGVyYWJsZSgpLFxuICAgICAgICBpdGVyYWJsZUl0ZXJhdG9yOiBjcmVhdGVQcm9jZXNzKCdpdGVyYWJsZUl0ZXJhdG9yJywgVHlwZXMuSXRlcmFibGVJdGVyYXRvciksXG4gICAgICAgIHRyYW5zYWN0aW9uOiBjcmVhdGVQcm9jZXNzKCd0cmFuc2FjdGlvbicsIFR5cGVzLlRyYW5zYWN0aW9uKSxcbiAgICAgICAgb3V0cHV0OiBjcmVhdGVQcm9jZXNzKCdvdXRwdXQnLCBUeXBlcy5PdXRwdXQpLFxuICAgICAgICBhdHRyaWJ1dGU6IGNyZWF0ZVByb2Nlc3MoJ2F0dHJpYnV0ZScsIFR5cGVzLkF0dHJpYnV0ZSksXG4gICAgICAgIGlucHV0OiBjcmVhdGVQcm9jZXNzKCdpbnB1dCcsIFR5cGVzLklucHV0KSxcbiAgICAgICAgYWNjb3VudDogY3JlYXRlUHJvY2VzcygnYWNjb3VudCcsIFR5cGVzLkFjY291bnQpLFxuICAgICAgICBhc3NldDogY3JlYXRlUHJvY2VzcygnYXNzZXQnLCBUeXBlcy5Bc3NldCksXG4gICAgICAgIGNvbnRyYWN0OiBjcmVhdGVQcm9jZXNzKCdjb250cmFjdCcsIFR5cGVzLkNvbnRyYWN0KSxcbiAgICAgICAgaGVhZGVyOiBjcmVhdGVQcm9jZXNzKCdoZWFkZXInLCBUeXBlcy5IZWFkZXIpLFxuICAgICAgICBibG9jazogY3JlYXRlUHJvY2VzcygnYmxvY2snLCBUeXBlcy5CbG9jayksXG4gICAgICB9KSxcbiAgICApO1xuICB9XG59XG4iXX0=