@leosprograms/vf-graphql-holochain
Version:
GraphQL schema bindings for the Holochain implementation of ValueFlows
95 lines • 18.7 kB
JavaScript
/**
* Resolvers for Process fields
*
* @package: HoloREA
* @since: 2019-09-12
*/
import { injectTypename, DEFAULT_VF_MODULES, VfModule } from '../types.js';
import { mapZomeFn, extractEdges } from '../connection.js';
import planQueries from '../queries/plan.js';
export default (enabledVFModules = DEFAULT_VF_MODULES, dnaConfig, conductorUri) => {
const hasHistory = -1 !== enabledVFModules.indexOf(VfModule.History);
const hasObservation = -1 !== enabledVFModules.indexOf(VfModule.Observation);
const hasProcessSpecification = -1 !== enabledVFModules.indexOf(VfModule.ProcessSpecification);
const hasCommitment = -1 !== enabledVFModules.indexOf(VfModule.Commitment);
const hasIntent = -1 !== enabledVFModules.indexOf(VfModule.Intent);
const hasPlan = -1 !== enabledVFModules.indexOf(VfModule.Plan);
const hasAgent = -1 !== enabledVFModules.indexOf(VfModule.Agent);
const readRevision = mapZomeFn(dnaConfig, conductorUri, 'combined', 'process', 'get_revision');
const readEvents = mapZomeFn(dnaConfig, conductorUri, 'combined', 'indexing', 'query_economic_events');
const readCommitments = mapZomeFn(dnaConfig, conductorUri, 'combined', 'indexing', 'query_commitments');
const readIntents = mapZomeFn(dnaConfig, conductorUri, 'combined', 'indexing', 'query_intents');
const readProcessBasedOn = mapZomeFn(dnaConfig, conductorUri, 'combined', 'process_specification', 'get_process_specification');
const readPlan = planQueries(dnaConfig, conductorUri)['plan'];
const readAgent = mapZomeFn(dnaConfig, conductorUri, 'combined', 'agent', 'get_agent');
return Object.assign({
nextProcesses: () => {
throw new Error('resolver unimplemented');
},
previousProcesses: () => {
throw new Error('resolver unimplemented');
},
}, (hasObservation ? {
observedInputs: injectTypename('EconomicEvent', async (record) => {
const results = await readEvents({ params: { inputOf: record.id } });
return extractEdges(results);
}),
observedOutputs: injectTypename('EconomicEvent', async (record) => {
const results = await readEvents({ params: { outputOf: record.id } });
return extractEdges(results);
}),
unplannedInputs: () => {
throw new Error('resolver unimplemented');
},
unplannedOutputs: () => {
throw new Error('resolver unimplemented');
},
previous: () => {
throw new Error('resolver unimplemented');
},
next: () => {
throw new Error('resolver unimplemented');
},
} : {}), (hasCommitment ? {
committedInputs: injectTypename('Commitment', async (record) => {
const results = await readCommitments({ params: { inputOf: record.id } });
return extractEdges(results);
}),
committedOutputs: injectTypename('Commitment', async (record) => {
const results = await readCommitments({ params: { outputOf: record.id } });
return extractEdges(results);
}),
} : {}), (hasIntent ? {
intendedInputs: async (record) => {
const results = await readIntents({ params: { inputOf: record.id } });
return extractEdges(results);
},
intendedOutputs: async (record) => {
const results = await readIntents({ params: { outputOf: record.id } });
return extractEdges(results);
},
} : {}), (hasProcessSpecification ? {
basedOn: async (record) => {
return (await readProcessBasedOn({ address: record.basedOn })).processSpecification;
},
} : {}), (hasPlan ? {
plannedWithin: async (record) => {
return (await readPlan(record, { id: record.plannedWithin }));
},
} : {}), (hasAgent ? {
involvedAgents: () => {
throw new Error('resolver unimplemented');
},
workingAgents: async (record) => {
return (await Promise.all((record.workingAgents || []).map((address) => readAgent({ address })))).map((agentResponse) => agentResponse.agent);
},
inScopeOf: async (record) => {
return (await Promise.all((record.inScopeOf || []).map((address) => readAgent({ address })))).map((agentResponse) => agentResponse.agent);
},
} : {}), (hasHistory ? {
revision: async (record, args) => {
return (await readRevision(args)).process;
},
} : {}));
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3Jlc29sdmVycy9wcm9jZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFpQixjQUFjLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUE0RixNQUFNLGFBQWEsQ0FBQTtBQUNuTCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBaUIxRCxPQUFPLFdBQVcsTUFBTSxvQkFBb0IsQ0FBQTtBQUk1QyxlQUFlLENBQUMsbUJBQStCLGtCQUFrQixFQUFFLFNBQXdCLEVBQUUsWUFBb0IsRUFBRSxFQUFFO0lBQ25ILE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQyxLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDcEUsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDLEtBQUssZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUM1RSxNQUFNLHVCQUF1QixHQUFHLENBQUMsQ0FBQyxLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQTtJQUM5RixNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUMsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQzFFLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDbEUsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLEtBQUssZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUM5RCxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMs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QUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3ZJLENBQUM7S0FDRixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFDUCxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDWixRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQWUsRUFBRSxJQUEyQyxFQUFvQixFQUFFO1lBQ2pHLE9BQU8sQ0FBQyxNQUFNLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQTtRQUMzQyxDQUFDO0tBQ0YsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQ1IsQ0FBQTtBQUNILENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVzb2x2ZXJzIGZvciBQcm9jZXNzIGZpZWxkc1xuICpcbiAqIEBwYWNrYWdlOiBIb2xvUkVBXG4gKiBAc2luY2U6ICAgMjAxOS0wOS0xMlxuICovXG5cbmltcG9ydCB7IEROQUlkTWFwcGluZ3MsIGluamVjdFR5cGVuYW1lLCBERUZBVUxUX1ZGX01PRFVMRVMsIFZmTW9kdWxlLCBSZWFkUGFyYW1zLCBCeVJldmlzaW9uLCBQcm9jZXNzU3BlY2lmaWNhdGlvbkFkZHJlc3MsIEFnZW50QWRkcmVzcywgQWRkcmVzc2FibGVJZGVudGlmaWVyIH0gZnJvbSAnLi4vdHlwZXMuanMnXG5pbXBvcnQgeyBtYXBab21lRm4sIGV4dHJhY3RFZGdlcyB9IGZyb20gJy4uL2Nvbm5lY3Rpb24uanMnXG5cbmltcG9ydCB7XG4gIFByb2Nlc3MsXG4gIFByb2Nlc3NSZXNwb25zZSxcbiAgRWNvbm9taWNFdmVudCxcbiAgQ29tbWl0bWVudCxcbiAgSW50ZW50LFxuICBQcm9jZXNzU3BlY2lmaWNhdGlvbixcbiAgUGxhbixcbiAgRWNvbm9taWNFdmVudENvbm5lY3Rpb24sXG4gIENvbW1pdG1lbnRDb25uZWN0aW9uLFxuICBJbnRlbnRDb25uZWN0aW9uLFxuICBQcm9jZXNzU3BlY2lmaWNhdGlvblJlc3BvbnNlLFxuICBBZ2VudCxcbiAgQWNjb3VudGluZ1Njb3BlXG59IGZyb20gJ0BsZW9zcHJvZ3JhbXMvdmYtZ3JhcGhxbCdcbmltcG9ydCBwbGFuUXVlcmllcyBmcm9tICcuLi9xdWVyaWVzL3BsYW4uanMnXG5pbXBvcnQgeyBDb21taXRtZW50U2VhcmNoSW5wdXQsIEVjb25vbWljRXZlbnRTZWFyY2hJbnB1dCwgSW50ZW50U2VhcmNoSW5wdXQgfSBmcm9tICcuL3pvbWVTZWFyY2hJbnB1dFR5cGVzLmpzJ1xuaW1wb3J0IHsgQWdlbnRSZXNwb25zZSB9IGZyb20gJy4uL211dGF0aW9ucy9hZ2VudC5qcydcblxuZXhwb3J0IGRlZmF1bHQgKGVuYWJsZWRWRk1vZHVsZXM6IFZmTW9kdWxlW10gPSBERUZBVUxUX1ZGX01PRFVMRVMsIGRuYUNvbmZpZzogRE5BSWRNYXBwaW5ncywgY29uZHVjdG9yVXJpOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgaGFzSGlzdG9yeSA9IC0xICE9PSBlbmFibGVkVkZNb2R1bGVzLmluZGV4T2YoVmZNb2R1bGUuSGlzdG9yeSlcbiAgY29uc3QgaGFzT2JzZXJ2YXRpb24gPSAtMSAhPT0gZW5hYmxlZFZGTW9kdWxlcy5pbmRleE9mKFZmTW9kdWxlLk9ic2VydmF0aW9uKVxuICBjb25zdCBoYXNQcm9jZXNzU3BlY2lmaWNhdGlvbiA9IC0xICE9PSBlbmFibGVkVkZNb2R1bGVzLmluZGV4T2YoVmZNb2R1bGUuUHJvY2Vzc1NwZWNpZmljYXRpb24pXG4gIGNvbnN0IGhhc0NvbW1pdG1lbnQgPSAtMSAhPT0gZW5hYmxlZFZGTW9kdWxlcy5pbmRleE9mKFZmTW9kdWxlLkNvbW1pdG1lbnQpXG4gIGNvbnN0IGhhc0ludGVudCA9IC0xICE9PSBlbmFibGVkVkZNb2R1bGVzLmluZGV4T2YoVmZNb2R1bGUuSW50ZW50KVxuICBjb25zdCBoYXNQbGFuID0gLTEgIT09IGVuYWJsZWRWRk1vZHVsZXMuaW5kZXhPZihWZk1vZHVsZS5QbGFuKVxuICBjb25zdCBoYXNBZ2VudCA9IC0xICE9PSBlbmFibGVkVkZNb2R1bGVzLmluZGV4T2YoVmZNb2R1bGUuQWdlbnQpXG5cbiAgY29uc3QgcmVhZFJldmlzaW9uID0gbWFwWm9tZUZuPEJ5UmV2aXNpb24sIFByb2Nlc3NSZXNwb25zZT4oZG5hQ29uZmlnLCBjb25kdWN0b3JVcmksICdjb21iaW5lZCcsICdwcm9jZXNzJywgJ2dldF9yZXZpc2lvbicpXG4gIGNvbnN0IHJlYWRFdmVudHMgPSBtYXBab21lRm48RWNvbm9taWNFdmVudFNlYXJjaElucHV0LCBFY29ub21pY0V2ZW50Q29ubmVjdGlvbj4oZG5hQ29uZmlnLCBjb25kdWN0b3JVcmksICdjb21iaW5lZCcsICdpbmRleGluZycsICdxdWVyeV9lY29ub21pY19ldmVudHMnKVxuICBjb25zdCByZWFkQ29tbWl0bWVudHMgPSBtYXBab21lRm48Q29tbWl0bWVudFNlYXJjaElucHV0LCBDb21taXRtZW50Q29ubmVjdGlvbj4oZG5hQ29uZmlnLCBjb25kdWN0b3JVcmksICdjb21iaW5lZCcsICdpbmRleGluZycsICdxdWVyeV9jb21taXRtZW50cycpXG4gIGNvbnN0IHJlYWRJbnRlbnRzID0gbWFwWm9tZUZuPEludGVudFNlYXJjaElucHV0LCBJbnRlbnRDb25uZWN0aW9uPihkbmFDb25maWcsIGNvbmR1Y3RvclVyaSwgJ2NvbWJpbmVkJywgJ2luZGV4aW5nJywgJ3F1ZXJ5X2ludGVudHMnKVxuICBjb25zdCByZWFkUHJvY2Vzc0Jhc2VkT24gPSBtYXBab21lRm48UmVhZFBhcmFtcywgUHJvY2Vzc1NwZWNpZmljYXRpb25SZXNwb25zZT4oZG5hQ29uZmlnLCBjb25kdWN0b3JVcmksICdjb21iaW5lZCcsICdwcm9jZXNzX3NwZWNpZmljYXRpb24nLCAnZ2V0X3Byb2Nlc3Nfc3BlY2lmaWNhdGlvbicpXG4gIGNvbnN0IHJlYWRQbGFuID0gcGxhblF1ZXJpZXMoZG5hQ29uZmlnLCBjb25kdWN0b3JVcmkpWydwbGFuJ11cbiAgY29uc3QgcmVhZEFnZW50ID0gbWFwWm9tZUZuPFJlYWRQYXJhbXMsIEFnZW50UmVzcG9uc2U+KGRuYUNvbmZpZywgY29uZHVjdG9yVXJpLCAnY29tYmluZWQnLCAnYWdlbnQnLCAnZ2V0X2FnZW50JylcblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbihcbiAgICB7XG4gICAgICBuZXh0UHJvY2Vzc2VzOiAoKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncmVzb2x2ZXIgdW5pbXBsZW1lbnRlZCcpXG4gICAgICB9LFxuICAgICAgcHJldmlvdXNQcm9jZXNzZXM6ICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXNvbHZlciB1bmltcGxlbWVudGVkJylcbiAgICAgIH0sXG4gICAgfSxcbiAgICAoaGFzT2JzZXJ2YXRpb24gPyB7XG4gICAgICBvYnNlcnZlZElucHV0czogaW5qZWN0VHlwZW5hbWUoJ0Vjb25vbWljRXZlbnQnLCBhc3luYyAocmVjb3JkOiBQcm9jZXNzKTogUHJvbWlzZTxFY29ub21pY0V2ZW50W10+ID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHJlYWRFdmVudHMoeyBwYXJhbXM6IHsgaW5wdXRPZjogcmVjb3JkLmlkIH0gfSlcbiAgICAgICAgcmV0dXJuIGV4dHJhY3RFZGdlcyhyZXN1bHRzKVxuICAgICAgfSksXG5cbiAgICAgIG9ic2VydmVkT3V0cHV0czogaW5qZWN0VHlwZW5hbWUoJ0Vjb25vbWljRXZlbnQnLCBhc3luYyAocmVjb3JkOiBQcm9jZXNzKTogUHJvbWlzZTxFY29ub21pY0V2ZW50W10+ID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHJlYWRFdmVudHMoeyBwYXJhbXM6IHsgb3V0cHV0T2Y6IHJlY29yZC5pZCB9IH0pXG4gICAgICAgIHJldHVybiBleHRyYWN0RWRnZXMocmVzdWx0cylcbiAgICAgIH0pLFxuXG4gICAgICB1bnBsYW5uZWRJbnB1dHM6ICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXNvbHZlciB1bmltcGxlbWVudGVkJylcbiAgICAgIH0sXG4gICAgICB1bnBsYW5uZWRPdXRwdXRzOiAoKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncmVzb2x2ZXIgdW5pbXBsZW1lbnRlZCcpXG4gICAgICB9LFxuICAgICAgcHJldmlvdXM6ICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXNvbHZlciB1bmltcGxlbWVudGVkJylcbiAgICAgIH0sXG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncmVzb2x2ZXIgdW5pbXBsZW1lbnRlZCcpXG4gICAgICB9LFxuICAgIH0gOiB7fSksXG4gICAgKGhhc0NvbW1pdG1lbnQgPyB7XG4gICAgICBjb21taXR0ZWRJbnB1dHM6IGluamVjdFR5cGVuYW1lKCdDb21taXRtZW50JywgYXN5bmMgKHJlY29yZDogUHJvY2Vzcyk6IFByb21pc2U8Q29tbWl0bWVudFtdPiA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCByZWFkQ29tbWl0bWVudHMoeyBwYXJhbXM6IHsgaW5wdXRPZjogcmVjb3JkLmlkIH0gfSlcbiAgICAgICAgcmV0dXJuIGV4dHJhY3RFZGdlcyhyZXN1bHRzKVxuICAgICAgfSksXG5cbiAgICAgIGNvbW1pdHRlZE91dHB1dHM6IGluamVjdFR5cGVuYW1lKCdDb21taXRtZW50JywgYXN5bmMgKHJlY29yZDogUHJvY2Vzcyk6IFByb21pc2U8Q29tbWl0bWVudFtdPiA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCByZWFkQ29tbWl0bWVudHMoeyBwYXJhbXM6IHsgb3V0cHV0T2Y6IHJlY29yZC5pZCB9IH0pXG4gICAgICAgIHJldHVybiBleHRyYWN0RWRnZXMocmVzdWx0cylcbiAgICAgIH0pLFxuICAgIH0gOiB7fSksXG4gICAgKGhhc0ludGVudCA/IHtcbiAgICAgIGludGVuZGVkSW5wdXRzOiBhc3luYyAocmVjb3JkOiBQcm9jZXNzKTogUHJvbWlzZTxJbnRlbnRbXT4gPT4ge1xuICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgcmVhZEludGVudHMoeyBwYXJhbXM6IHsgaW5wdXRPZjogcmVjb3JkLmlkIH0gfSlcbiAgICAgICAgcmV0dXJuIGV4dHJhY3RFZGdlcyhyZXN1bHRzKVxuICAgICAgfSxcblxuICAgICAgaW50ZW5kZWRPdXRwdXRzOiBhc3luYyAocmVjb3JkOiBQcm9jZXNzKTogUHJvbWlzZTxJbnRlbnRbXT4gPT4ge1xuICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgcmVhZEludGVudHMoeyBwYXJhbXM6IHsgb3V0cHV0T2Y6IHJlY29yZC5pZCB9IH0pXG4gICAgICAgIHJldHVybiBleHRyYWN0RWRnZXMocmVzdWx0cylcbiAgICAgIH0sXG4gICAgfSA6IHt9KSxcbiAgICAoaGFzUHJvY2Vzc1NwZWNpZmljYXRpb24gPyB7XG4gICAgICBiYXNlZE9uOiBhc3luYyAocmVjb3JkOiB7IGJhc2VkT246IFByb2Nlc3NTcGVjaWZpY2F0aW9uQWRkcmVzcyB9KTogUHJvbWlzZTxQcm9jZXNzU3BlY2lmaWNhdGlvbj4gPT4ge1xuICAgICAgICByZXR1cm4gKGF3YWl0IHJlYWRQcm9jZXNzQmFzZWRPbih7IGFkZHJlc3M6IHJlY29yZC5iYXNlZE9uIH0pKS5wcm9jZXNzU3BlY2lmaWNhdGlvblxuICAgICAgfSxcbiAgICB9IDoge30pLFxuICAgIChoYXNQbGFuID8ge1xuICAgICAgcGxhbm5lZFdpdGhpbjogYXN5bmMgKHJlY29yZDogUHJvY2Vzcyk6IFByb21pc2U8UGxhbj4gPT4ge1xuICAgICAgICByZXR1cm4gKGF3YWl0IHJlYWRQbGFuKHJlY29yZCwgeyBpZDogcmVjb3JkLnBsYW5uZWRXaXRoaW4gfSkpXG4gICAgICB9LFxuICAgIH0gOiB7fSksXG4gICAgKGhhc0FnZW50ID8ge1xuICAgICAgaW52b2x2ZWRBZ2VudHM6ICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXNvbHZlciB1bmltcGxlbWVudGVkJylcbiAgICAgIH0sXG4gICAgICB3b3JraW5nQWdlbnRzOiBhc3luYyAocmVjb3JkOiB7IHdvcmtpbmdBZ2VudHM6IEFnZW50QWRkcmVzc1tdIH0pOiBQcm9taXNlPEFnZW50W10+ID0+IHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCBQcm9taXNlLmFsbCgocmVjb3JkLndvcmtpbmdBZ2VudHMgfHwgW10pLm1hcCgoYWRkcmVzcyk9PnJlYWRBZ2VudCh7YWRkcmVzc30pKSkpLm1hcCgoYWdlbnRSZXNwb25zZSkgPT4gYWdlbnRSZXNwb25zZS5hZ2VudClcbiAgICAgIH0sXG4gICAgICBpblNjb3BlT2Y6IGFzeW5jIChyZWNvcmQ6IHsgaW5TY29wZU9mOiBBZ2VudEFkZHJlc3NbXSB9KTogUHJvbWlzZTxBY2NvdW50aW5nU2NvcGVbXT4gPT4ge1xuICAgICAgICByZXR1cm4gKGF3YWl0IFByb21pc2UuYWxsKChyZWNvcmQuaW5TY29wZU9mIHx8IFtdKS5tYXAoKGFkZHJlc3MpPT5yZWFkQWdlbnQoe2FkZHJlc3N9KSkpKS5tYXAoKGFnZW50UmVzcG9uc2UpID0+IGFnZW50UmVzcG9uc2UuYWdlbnQpXG4gICAgICB9LFxuICAgIH0gOiB7fSksXG4gICAgKGhhc0hpc3RvcnkgPyB7XG4gICAgICByZXZpc2lvbjogYXN5bmMgKHJlY29yZDogUHJvY2VzcywgYXJnczogeyByZXZpc2lvbklkOiBBZGRyZXNzYWJsZUlkZW50aWZpZXIgfSk6IFByb21pc2U8UHJvY2Vzcz4gPT4ge1xuICAgICAgICByZXR1cm4gKGF3YWl0IHJlYWRSZXZpc2lvbihhcmdzKSkucHJvY2Vzc1xuICAgICAgfSxcbiAgICB9IDoge30pLFxuICApXG59XG4iXX0=