UNPKG

@valueflows/vf-graphql-holochain

Version:

GraphQL schema bindings for the Holochain implementation of ValueFlows

122 lines 18.4 kB
/** * base types for GraphQL query layer * * @package: HoloREA * @since: 2019-05-20 */ import { GraphQLScalarType } from 'graphql'; import { Kind } from 'graphql/language/index.js'; import Big from 'big.js'; export function addTypename(name) { return (obj) => { obj['__typename'] = name; return obj; }; } export function injectTypename(name, fn) { return async (root, args) => { const data = await fn(root, args); data['__typename'] = name; return data; }; } // VfModule listing. // for the reference, see: // https://lab.allmende.io/valueflows/vf-schemas/vf-graphql/-/tree/sprout/lib/schemas // enum containing the not yet implemented VfModule // obviously, move the variant to VfModule if implementing // it var UnimplementedVfModule; (function (UnimplementedVfModule) { UnimplementedVfModule["Geolocation"] = "geolocation"; UnimplementedVfModule["History"] = "history"; UnimplementedVfModule["Recipe"] = "recipe"; UnimplementedVfModule["Scenario"] = "scenario"; UnimplementedVfModule["ProductBatch"] = "product_batch"; UnimplementedVfModule["Appreciation"] = "appreciation"; UnimplementedVfModule["Claim"] = "claim"; UnimplementedVfModule["Filtering"] = "filtering"; UnimplementedVfModule["Ordering"] = "ordering"; })(UnimplementedVfModule || (UnimplementedVfModule = {})); // enum containing the implemented VF modules. // separate from above so that developers can import the enum and not turn on useless // features export var VfModule; (function (VfModule) { // always required regardless // see: https://lab.allmende.io/valueflows/vf-schemas/vf-graphql/-/blob/sprout/lib/index.js#L29 VfModule["Util"] = "util"; VfModule["Pagination"] = "pagination"; VfModule["History"] = "history"; // optional to enable VfModule["Agent"] = "agent"; VfModule["Agreement"] = "agreement"; VfModule["Action"] = "action"; VfModule["ProcessSpecification"] = "process_specification"; VfModule["ResourceSpecification"] = "resource_specification"; VfModule["Measurement"] = "measurement"; VfModule["Observation"] = "observation"; VfModule["Process"] = "process"; VfModule["Plan"] = "plan"; VfModule["Fulfillment"] = "fulfillment"; VfModule["Intent"] = "intent"; VfModule["Commitment"] = "commitment"; VfModule["Satisfaction"] = "satisfaction"; VfModule["Proposal"] = "proposal"; })(VfModule || (VfModule = {})); // default 'full suite' VF module set supported by hREA export const DEFAULT_VF_MODULES = [ VfModule.History, // Specification DNA VfModule.Action, VfModule.ProcessSpecification, VfModule.ResourceSpecification, VfModule.Measurement, // Agent DNA VfModule.Agent, // Agreement DNA VfModule.Agreement, // Observation DNA VfModule.Observation, VfModule.Process, // Proposal DNA VfModule.Proposal, // Plan DNA VfModule.Plan, // Planning DNA VfModule.Fulfillment, VfModule.Intent, VfModule.Commitment, VfModule.Satisfaction, ]; // scalar types export const URI = new GraphQLScalarType({ name: 'URI', description: 'The `URI` type declares a reference to any resolvable resource.', serialize: (v) => v, parseValue: (v) => v, parseLiteral(ast) { if (ast.kind === Kind.STRING) { if (!ast.value.match(/^\w+:/)) { throw new Error('Unable to parse URI- invalid format'); } return ast.value; } return null; }, }); // :TODO: this should be a GraphQLScalarType<Big, string> to avoid precision loss at API boundary export const Decimal = new GraphQLScalarType({ name: 'Decimal', description: 'The `Decimal` scalar type to handle precision arithmetic and potentially large values.', serialize: (v) => v.toNumber(), parseValue: (v) => Big(v), parseLiteral(ast) { if (ast.kind !== Kind.STRING && ast.kind !== Kind.INT && ast.kind !== Kind.FLOAT) { // @ts-ignore throw new TypeError(String(ast.value) + ' is not a valid decimal value.'); } return Big(ast.value); } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUlILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQUMzQyxPQUFPLEVBQUUsSUFBSSxFQUEyQixNQUFNLDJCQUEyQixDQUFBO0FBQ3pFLE9BQU8sR0FBRyxNQUFNLFFBQVEsQ0FBQTtBQW9HeEIsTUFBTSxVQUFVLFdBQVcsQ0FBSyxJQUFZO0lBQzFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUNiLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUE7UUFDeEIsT0FBTyxHQUFHLENBQUE7SUFDWixDQUFDLENBQUE7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWMsQ0FBSyxJQUFZLEVBQUUsRUFBZTtJQUM5RCxPQUFPLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFjLEVBQUU7UUFDdEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQ2pDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUE7UUFDekIsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDLENBQUE7QUFDSCxDQUFDO0FBRUQsb0JBQW9CO0FBQ3BCLDBCQUEwQjtBQUMxQixxRkFBcUY7QUFFckYsbURBQW1EO0FBQ25ELDBEQUEwRDtBQUMxRCxLQUFLO0FBQ0wsSUFBSyxxQkFVSjtBQVZELFdBQUsscUJBQXFCO0lBQ3hCLG9EQUEyQixDQUFBO0lBQzNCLDRDQUFtQixDQUFBO0lBQ25CLDBDQUFpQixDQUFBO0lBQ2pCLDhDQUFxQixDQUFBO0lBQ3JCLHVEQUE4QixDQUFBO0lBQzlCLHNEQUE2QixDQUFBO0lBQzdCLHdDQUFlLENBQUE7SUFDZixnREFBdUIsQ0FBQTtJQUN2Qiw4Q0FBcUIsQ0FBQTtBQUN2QixDQUFDLEVBVkkscUJBQXFC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Q0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsZ0NBQWdDLENBQUMsQ0FBQTtTQUMxRTtRQUVELE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUN2QixDQUFDO0NBQ0YsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBiYXNlIHR5cGVzIGZvciBHcmFwaFFMIHF1ZXJ5IGxheWVyXG4gKlxuICogQHBhY2thZ2U6IEhvbG9SRUFcbiAqIEBzaW5jZTogICAyMDE5LTA1LTIwXG4gKi9cblxuaW1wb3J0IHsgQXBwU2lnbmFsQ2IsIENlbGxJZCB9IGZyb20gJ0Bob2xvY2hhaW4vY2xpZW50J1xuaW1wb3J0IHsgSVJlc29sdmVycyB9IGZyb20gJ0BncmFwaHFsLXRvb2xzL3V0aWxzJ1xuaW1wb3J0IHsgR3JhcGhRTFNjYWxhclR5cGUgfSBmcm9tICdncmFwaHFsJ1xuaW1wb3J0IHsgS2luZCwgVmFsdWVOb2RlLCBWYXJpYWJsZU5vZGUgfSBmcm9tICdncmFwaHFsL2xhbmd1YWdlL2luZGV4LmpzJ1xuaW1wb3J0IEJpZyBmcm9tICdiaWcuanMnXG5cbi8vIENvbmZpZ3VyYXRpb24gb2JqZWN0IHRvIGFsbG93IHNwZWNpZnlpbmcgY3VzdG9tIGNvbmR1Y3RvciBETkEgSURzIHRvIGJpbmQgdG8uXG4vLyBEZWZhdWx0IGlzIHRvIHVzZSBhIEROQSB3aXRoIHRoZSBzYW1lIElEIGFzIHRoZSBtYXBwaW5nIElEIChpZS4gYWdlbnQgPSBcImFnZW50XCIpXG5leHBvcnQgaW50ZXJmYWNlIEROQUlkTWFwcGluZ3Mge1xuICBhZ2VudD86IENlbGxJZCxcbiAgYWdyZWVtZW50PzogQ2VsbElkLFxuICBvYnNlcnZhdGlvbj86IENlbGxJZCxcbiAgcGxhbm5pbmc/OiBDZWxsSWQsXG4gIHByb3Bvc2FsPzogQ2VsbElkLFxuICBzcGVjaWZpY2F0aW9uPzogQ2VsbElkLFxufVxuXG5leHBvcnQgeyBDZWxsSWQgfVxuXG4vLyBPcHRpb25zIGZvciByZXNvbHZlciBnZW5lcmF0b3JcbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZXJPcHRpb25zIHtcbiAgLy8gQXJyYXkgb2YgVmFsdWVGbG93cyBtb2R1bGVzIHRvIGluY2x1ZGUgaW4gdGhlIHNjaGVtYVxuICAvLyBAc2VlIGh0dHBzOi8vbGFiLmFsbG1lbmRlLmlvL3ZhbHVlZmxvd3MvdmYtc2NoZW1hcy92Zi1ncmFwaHFsI2dlbmVyYXRpbmctc2NoZW1hc1xuICBlbmFibGVkVkZNb2R1bGVzOiBWZk1vZHVsZVtdLFxuXG4gIC8vIE1hcHBpbmcgb2YgRE5BIGlkZW50aWZpZXJzIHRvIHJ1bnRpbWUgYENlbGxJZGBzIHRvIGJpbmQgdG8uXG4gIGRuYUNvbmZpZzogRE5BSWRNYXBwaW5ncyxcblxuICAvLyBDdXN0b20gSG9sb2NoYWluIGNvbmR1Y3RvciBVUkkgdG8gdXNlIHdpdGggdGhpcyBpbnN0YW5jZSwgdG8gc3VwcG9ydCBjb25uZWN0aW5nIHRvIG11bHRpcGxlIGNvbmR1Y3RvcnMuXG4gIC8vIElmIG5vdCBzcGVjaWZpZWQsIGNvbm5lY3RzIHRvIHRoZSBsb2NhbCBjb25kdWN0b3Igb3IgdGhlIFVSSSBzdG9yZWQgaW4gYHByb2Nlc3MuZW52LlJFQUNUX0FQUF9IQ19DT05OX1VSTGAuXG4gIGNvbmR1Y3RvclVyaTogc3RyaW5nLFxuXG4gIC8vIEN1c3RvbSBBZG1pbiBIb2xvY2hhaW4gY29uZHVjdG9yIFVSSSB0byB1c2Ugd2l0aCB0aGlzIGluc3RhbmNlLCB0byBzdXBwb3J0IGNvbm5lY3RpbmcgdG8gbXVsdGlwbGUgY29uZHVjdG9ycy5cbiAgLy8gSWYgbm90IHNwZWNpZmllZCwgY29ubmVjdHMgdG8gdGhlIGxvY2FsIGNvbmR1Y3RvciBvciB0aGUgVVJJIHN0b3JlZCBpbiBgcHJvY2Vzcy5lbnYuUkVBQ1RfQVBQX0hDX0FETUlOX0NPTk5fVVJMYC5cbiAgYWRtaW5Db25kdWN0b3JVcmk6IHN0cmluZyxcblxuICAvLyBUaGlzIGlzIG5lZWRlZCBpbiBvcmRlciB0byBmZXRjaCB0aGUgaW5zdGFsbGVkIENlbGxJZCdzIGFuZCBncmFudCBhdXRob3JpemF0aW9uXG4gIC8vIGJ5IHRoZSBBZG1pbiBBUEkgZm9yIGFueSB6b21lIGZ1bmN0aW9ucyBvbiB0aG9zZSBDZWxscyB0byBiZSBjYWxsZWRcbiAgYXBwSWQ6IHN0cmluZyxcblxuICAvLyBDYWxsYmFjayB0byBsaXN0ZW4gZm9yIHNpZ25hbHMgZnJvbSB0aGUgSG9sb2NoYWluIGFwcCB3ZWJzb2NrZXQsIHRvIHN1cHBvcnQgcmVhbHRpbWUgZXZlbnQgbm90aWZpY2F0aW9ucy5cbiAgdHJhY2VBcHBTaWduYWxzPzogQXBwU2lnbmFsQ2IsXG59XG5cbi8vIFNjaGVtYSBnZW5lcmF0aW9uIG9wdGlvbnMgdG8gYmUgcGFzc2VkIHRvIHZmLWdyYXBocWxcbi8vIEBzZWUgaHR0cHM6Ly9sYWIuYWxsbWVuZGUuaW8vdmFsdWVmbG93cy92Zi1zY2hlbWFzL3ZmLWdyYXBocWwjZ2VuZXJhdGluZy1zY2hlbWFzXG5leHBvcnQgaW50ZXJmYWNlIEV4dGVuc2lvbk9wdGlvbnMge1xuICAvLyBBcnJheSBvZiBhZGRpdGlvbmFsIFNETCBzY2hlbWEgc3RyaW5ncyB0byBidW5kbGUgaW50byB0aGUgcmVzdWx0YW50IHNjaGVtYSBpbiBhZGRpdGlvbiB0byB0aGVcbiAgLy8gc3BlY2lmaWVkIG1vZHVsYXIgc3ViLXNlY3Rpb24gb2YgdGhlIFZhbHVlRmxvd3Mgc3BlYy5cbiAgZXh0ZW5zaW9uU2NoZW1hcz86IHN0cmluZ1tdLFxuXG4gIC8vIEFkZGl0aW9uYWwgcmVzb2x2ZXIgY2FsbGJhY2tzIHRvIGluamVjdCBpbnRvIHRoZSBzY2hlbWEgaW4gYWRkaXRpb24gdG8gdGhlIHNwZWNpZmllZCBib3VuZFxuICAvLyBzZXQgb2YgaFJFQSBETkEgcmVzb2x2ZXJzLlxuICAvLyBVc2VkIGZvciBpbmplY3RpbmcgaW1wbGVtZW50YXRpb24gbG9naWMgZm9yIGBleHRlbnNpb25TY2hlbWFzYDogbm90IHJlY29tbWVuZGVkIGZvciBvdmVycmlkaW5nXG4gIC8vIHBhcnRzIG9mIHRoZSBoUkVBIGNvcmUgYmVoYXZpb3VyIVxuICBleHRlbnNpb25SZXNvbHZlcnM/OiBJUmVzb2x2ZXJzLFxufVxuXG5leHBvcnQgdHlwZSBCaW5kU2NoZW1hT3B0aW9ucyA9IFBpY2s8UmVzb2x2ZXJPcHRpb25zLCAnZG5hQ29uZmlnJyB8ICdjb25kdWN0b3JVcmknIHwgJ2FkbWluQ29uZHVjdG9yVXJpJyB8ICdhcHBJZCcgfCAndHJhY2VBcHBTaWduYWxzJz5cbiAgJiB7XG4gICAgLy8gb3B0aW9uYWwgYmVjYXVzZSBERUZBVUxUX1ZGX01PRFVMRVMgaXMgYXNzaWduZWQgYXMgZmFsbGJhY2tcbiAgICBlbmFibGVkVkZNb2R1bGVzPzogVmZNb2R1bGVbXSBcbiAgfVxuICAmIEV4dGVuc2lvbk9wdGlvbnNcblxuLy8gVHlwZXMgdGhhdCBzZXJpYWxpemUgZm9yIHJ1c3Qgem9tZSBjYWxsc1xuLy8gc3RhcnQgb2Ygc2VjdGlvblxuZXhwb3J0IGludGVyZmFjZSBSZWFkUGFyYW1zIHtcbiAgYWRkcmVzczogQWRkcmVzc2FibGVJZGVudGlmaWVyLFxufVxuZXhwb3J0IGludGVyZmFjZSBCeUlkIHtcbiAgaWQ6IEFkZHJlc3NhYmxlSWRlbnRpZmllcixcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQnlSZXZpc2lvbiB7XG4gIHJldmlzaW9uSWQ6IEFkZHJlc3NhYmxlSWRlbnRpZmllcixcbn1cblxuZXhwb3J0IHR5cGUgQWRkcmVzc2FibGVJZGVudGlmaWVyID0gc3RyaW5nXG5leHBvcnQgdHlwZSBDb21taXRtZW50QWRkcmVzcyA9IEFkZHJlc3NhYmxlSWRlbnRpZmllclxuZXhwb3J0IHR5cGUgUHJvY2Vzc0FkZHJlc3MgPSBBZGRyZXNzYWJsZUlkZW50aWZpZXJcbmV4cG9ydCB0eXBlIEZ1bGZpbGxtZW50QWRkcmVzcyA9IEFkZHJlc3NhYmxlSWRlbnRpZmllclxuZXhwb3J0IHR5cGUgU2F0aXNmYWN0aW9uQWRkcmVzcyA9IEFkZHJlc3NhYmxlSWRlbnRpZmllclxuZXhwb3J0IHR5cGUgQWdyZWVtZW50QWRkcmVzcyA9IEFkZHJlc3NhYmxlSWRlbnRpZmllclxuZXhwb3J0IHR5cGUgUGxhbkFkZHJlc3MgPSBBZGRyZXNzYWJsZUlkZW50aWZpZXJcbmV4cG9ydCB0eXBlIFByb3Bvc2FsQWRkcmVzcyA9IEFkZHJlc3NhYmxlSWRlbnRpZmllclxuZXhwb3J0IHR5cGUgSW50ZW50QWRkcmVzcyA9IEFkZHJlc3NhYmxlSWRlbnRpZmllclxuZXhwb3J0IHR5cGUgQWdlbnRBZGRyZXNzID0gQWRkcmVzc2FibGVJZGVudGlmaWVyXG5leHBvcnQgdHlwZSBFY29ub21pY1Jlc291cmNlQWRkcmVzcyA9IEFkZHJlc3NhYmxlSWRlbnRpZmllclxuZXhwb3J0IHR5cGUgRWNvbm9taWNFdmVudEFkZHJlc3MgPSBBZGRyZXNzYWJsZUlkZW50aWZpZXJcbmV4cG9ydCB0eXBlIFJlc291cmNlU3BlY2lmaWNhdGlvbkFkZHJlc3MgPSBBZGRyZXNzYWJsZUlkZW50aWZpZXJcbmV4cG9ydCB0eXBlIFByb3Bvc2VkSW50ZW50QWRkcmVzcyA9IEFkZHJlc3NhYmxlSWRlbnRpZmllclxuZXhwb3J0IHR5cGUgUHJvY2Vzc1NwZWNpZmljYXRpb25BZGRyZXNzID0gQWRkcmVzc2FibGVJZGVudGlmaWVyXG5cbmV4cG9ydCBpbnRlcmZhY2UgQnlSZXZpc2lvbiB7XG4gIHJldmlzaW9uSWQ6IHN0cmluZ1xufVxuLy8gZW5kIG9mIHNlY3Rpb25cblxuLy8gaGVscGVycyBmb3IgcmVzb2x2ZXJzIHRvIGluamVjdCBfX3R5cGVuYW1lIHBhcmFtZXRlciBmb3IgdW5pb24gdHlwZSBkaXNhbWJpZ3VhdGlvblxuLy8gLi4udGhpcyBtaWdodCBiZSB1bm5lY2Vzc2FyaWx5IHByZXNlbnQgZHVlIHRvIGxhY2sgb2YgZmFtaWxpYXJpdHkgd2l0aCBHcmFwaFFMP1xuXG50eXBlIE9iakRlY29yYXRvcjxUPiA9IChvYmo6IFQpID0+IFRcbnR5cGUgUmVzb2x2ZXI8VD4gPSAocm9vdCwgYXJncykgPT4gUHJvbWlzZTxUPlxuXG5leHBvcnQgZnVuY3Rpb24gYWRkVHlwZW5hbWU8VD4gKG5hbWU6IHN0cmluZyk6IE9iakRlY29yYXRvcjxUPiB7XG4gIHJldHVybiAob2JqKSA9PiB7XG4gICAgb2JqWydfX3R5cGVuYW1lJ10gPSBuYW1lXG4gICAgcmV0dXJuIG9ialxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RUeXBlbmFtZTxUPiAobmFtZTogc3RyaW5nLCBmbjogUmVzb2x2ZXI8VD4pOiBSZXNvbHZlcjxUPiB7XG4gIHJldHVybiBhc3luYyAocm9vdCwgYXJncyk6IFByb21pc2U8VD4gPT4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmbihyb290LCBhcmdzKVxuICAgIGRhdGFbJ19fdHlwZW5hbWUnXSA9IG5hbWVcbiAgICByZXR1cm4gZGF0YVxuICB9XG59XG5cbi8vIFZmTW9kdWxlIGxpc3RpbmcuXG4vLyBmb3IgdGhlIHJlZmVyZW5jZSwgc2VlOlxuLy8gaHR0cHM6Ly9sYWIuYWxsbWVuZGUuaW8vdmFsdWVmbG93cy92Zi1zY2hlbWFzL3ZmLWdyYXBocWwvLS90cmVlL3Nwcm91dC9saWIvc2NoZW1hc1xuXG4vLyBlbnVtIGNvbnRhaW5pbmcgdGhlIG5vdCB5ZXQgaW1wbGVtZW50ZWQgVmZNb2R1bGVcbi8vIG9idmlvdXNseSwgbW92ZSB0aGUgdmFyaWFudCB0byBWZk1vZHVsZSBpZiBpbXBsZW1lbnRpbmdcbi8vIGl0XG5lbnVtIFVuaW1wbGVtZW50ZWRWZk1vZHVsZSB7XG4gIEdlb2xvY2F0aW9uID0gJ2dlb2xvY2F0aW9uJyxcbiAgSGlzdG9yeSA9ICdoaXN0b3J5JyxcbiAgUmVjaXBlID0gJ3JlY2lwZScsXG4gIFNjZW5hcmlvID0gJ3NjZW5hcmlvJyxcbiAgUHJvZHVjdEJhdGNoID0gJ3Byb2R1Y3RfYmF0Y2gnLFxuICBBcHByZWNpYXRpb24gPSAnYXBwcmVjaWF0aW9uJyxcbiAgQ2xhaW0gPSAnY2xhaW0nLFxuICBGaWx0ZXJpbmcgPSAnZmlsdGVyaW5nJyxcbiAgT3JkZXJpbmcgPSAnb3JkZXJpbmcnLFxufVxuXG4vLyBlbnVtIGNvbnRhaW5pbmcgdGhlIGltcGxlbWVudGVkIFZGIG1vZHVsZXMuXG4vLyBzZXBhcmF0ZSBmcm9tIGFib3ZlIHNvIHRoYXQgZGV2ZWxvcGVycyBjYW4gaW1wb3J0IHRoZSBlbnVtIGFuZCBub3QgdHVybiBvbiB1c2VsZXNzXG4vLyBmZWF0dXJlc1xuZXhwb3J0IGVudW0gVmZNb2R1bGUge1xuICAvLyBhbHdheXMgcmVxdWlyZWQgcmVnYXJkbGVzc1xuICAvLyBzZWU6IGh0dHBzOi8vbGFiLmFsbG1lbmRlLmlvL3ZhbHVlZmxvd3MvdmYtc2NoZW1hcy92Zi1ncmFwaHFsLy0vYmxvYi9zcHJvdXQvbGliL2luZGV4LmpzI0wyOVxuICBVdGlsID0gJ3V0aWwnLFxuICBQYWdpbmF0aW9uID0gJ3BhZ2luYXRpb24nLFxuICBIaXN0b3J5ID0gJ2hpc3RvcnknLFxuICAvLyBvcHRpb25hbCB0byBlbmFibGVcbiAgQWdlbnQgPSAnYWdlbnQnLFxuICBBZ3JlZW1lbnQgPSAnYWdyZWVtZW50JyxcbiAgQWN0aW9uID0gJ2FjdGlvbicsXG4gIFByb2Nlc3NTcGVjaWZpY2F0aW9uID0gJ3Byb2Nlc3Nfc3BlY2lmaWNhdGlvbicsXG4gIFJlc291cmNlU3BlY2lmaWNhdGlvbiA9ICdyZXNvdXJjZV9zcGVjaWZpY2F0aW9uJyxcbiAgTWVhc3VyZW1lbnQgPSAnbWVhc3VyZW1lbnQnLFxuICBPYnNlcnZhdGlvbiA9ICdvYnNlcnZhdGlvbicsXG4gIFByb2Nlc3MgPSAncHJvY2VzcycsXG4gIFBsYW4gPSAncGxhbicsXG4gIEZ1bGZpbGxtZW50ID0gJ2Z1bGZpbGxtZW50JyxcbiAgSW50ZW50ID0gJ2ludGVudCcsXG4gIENvbW1pdG1lbnQgPSAnY29tbWl0bWVudCcsXG4gIFNhdGlzZmFjdGlvbiA9ICdzYXRpc2ZhY3Rpb24nLFxuICBQcm9wb3NhbCA9ICdwcm9wb3NhbCcsXG59XG5cbi8vIGRlZmF1bHQgJ2Z1bGwgc3VpdGUnIFZGIG1vZHVsZSBzZXQgc3VwcG9ydGVkIGJ5IGhSRUFcbmV4cG9ydCBjb25zdCBERUZBVUxUX1ZGX01PRFVMRVMgPSBbXG4gIFZmTW9kdWxlLkhpc3RvcnksXG4gIC8vIFNwZWNpZmljYXRpb24gRE5BXG4gIFZmTW9kdWxlLkFjdGlvbixcbiAgVmZNb2R1bGUuUHJvY2Vzc1NwZWNpZmljYXRpb24sXG4gIFZmTW9kdWxlLlJlc291cmNlU3BlY2lmaWNhdGlvbixcbiAgVmZNb2R1bGUuTWVhc3VyZW1lbnQsXG4gIC8vIEFnZW50IEROQVxuICBWZk1vZHVsZS5BZ2VudCxcbiAgLy8gQWdyZWVtZW50IEROQVxuICBWZk1vZHVsZS5BZ3JlZW1lbnQsXG4gIC8vIE9ic2VydmF0aW9uIEROQVxuICBWZk1vZHVsZS5PYnNlcnZhdGlvbixcbiAgVmZNb2R1bGUuUHJvY2VzcyxcbiAgLy8gUHJvcG9zYWwgRE5BXG4gIFZmTW9kdWxlLlByb3Bvc2FsLFxuICAvLyBQbGFuIEROQVxuICBWZk1vZHVsZS5QbGFuLFxuICAvLyBQbGFubmluZyBETkFcbiAgVmZNb2R1bGUuRnVsZmlsbG1lbnQsXG4gIFZmTW9kdWxlLkludGVudCxcbiAgVmZNb2R1bGUuQ29tbWl0bWVudCxcbiAgVmZNb2R1bGUuU2F0aXNmYWN0aW9uLFxuXVxuXG4vLyBzY2FsYXIgdHlwZXNcblxuZXhwb3J0IGNvbnN0IFVSSSA9IG5ldyBHcmFwaFFMU2NhbGFyVHlwZSh7XG4gIG5hbWU6ICdVUkknLFxuICBkZXNjcmlwdGlvbjogJ1RoZSBgVVJJYCB0eXBlIGRlY2xhcmVzIGEgcmVmZXJlbmNlIHRvIGFueSByZXNvbHZhYmxlIHJlc291cmNlLicsXG4gIHNlcmlhbGl6ZTogKHYpID0+IHYsXG4gIHBhcnNlVmFsdWU6ICh2KSA9PiB2LFxuICBwYXJzZUxpdGVyYWwgKGFzdCkge1xuICAgIGlmIChhc3Qua2luZCA9PT0gS2luZC5TVFJJTkcpIHtcbiAgICAgIGlmICghYXN0LnZhbHVlLm1hdGNoKC9eXFx3KzovKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBwYXJzZSBVUkktIGludmFsaWQgZm9ybWF0JylcbiAgICAgIH1cbiAgICAgIHJldHVybiBhc3QudmFsdWVcbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfSxcbn0pXG5cbi8vIDpUT0RPOiB0aGlzIHNob3VsZCBiZSBhIEdyYXBoUUxTY2FsYXJUeXBlPEJpZywgc3RyaW5nPiB0byBhdm9pZCBwcmVjaXNpb24gbG9zcyBhdCBBUEkgYm91bmRhcnlcbmV4cG9ydCBjb25zdCBEZWNpbWFsOiBHcmFwaFFMU2NhbGFyVHlwZTxCaWcsIG51bWJlcj4gPSBuZXcgR3JhcGhRTFNjYWxhclR5cGUoe1xuICBuYW1lOiAnRGVjaW1hbCcsXG4gIGRlc2NyaXB0aW9uOiAnVGhlIGBEZWNpbWFsYCBzY2FsYXIgdHlwZSB0byBoYW5kbGUgcHJlY2lzaW9uIGFyaXRobWV0aWMgYW5kIHBvdGVudGlhbGx5IGxhcmdlIHZhbHVlcy4nLFxuICBzZXJpYWxpemU6ICh2OiB1bmtub3duKSA9PiAodiBhcyBCaWcpLnRvTnVtYmVyKCksXG4gIHBhcnNlVmFsdWU6ICh2OiB1bmtub3duKSA9PiBCaWcodiBhcyBudW1iZXIpLFxuICBwYXJzZUxpdGVyYWwoYXN0OiBWYWx1ZU5vZGUpIHtcbiAgICBpZiAoYXN0LmtpbmQgIT09IEtpbmQuU1RSSU5HICYmIGFzdC5raW5kICE9PSBLaW5kLklOVCAmJiBhc3Qua2luZCAhPT0gS2luZC5GTE9BVCkge1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihTdHJpbmcoYXN0LnZhbHVlKSArICcgaXMgbm90IGEgdmFsaWQgZGVjaW1hbCB2YWx1ZS4nKVxuICAgIH1cblxuICAgIHJldHVybiBCaWcoYXN0LnZhbHVlKVxuICB9XG59KVxuIl19