UNPKG

@neo-one/smart-contract-compiler

Version:

NEO•ONE TypeScript smart contract compiler.

381 lines (380 loc) 55.3 kB
"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