mirror of
https://github.com/fluencelabs/fluence-js.git
synced 2025-03-15 15:30:49 +00:00
alternative to test
This commit is contained in:
parent
187710b12e
commit
c2165ed137
14
package-lock.json
generated
14
package-lock.json
generated
@ -10,7 +10,7 @@
|
|||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@chainsafe/libp2p-noise": "4.0.0",
|
"@chainsafe/libp2p-noise": "4.0.0",
|
||||||
"@fluencelabs/avm": "0.16.0-restriction-operator.9",
|
"@fluencelabs/avm": "0.17.4",
|
||||||
"async": "3.2.0",
|
"async": "3.2.0",
|
||||||
"base64-js": "1.5.1",
|
"base64-js": "1.5.1",
|
||||||
"bs58": "4.0.1",
|
"bs58": "4.0.1",
|
||||||
@ -647,9 +647,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@fluencelabs/avm": {
|
"node_modules/@fluencelabs/avm": {
|
||||||
"version": "0.16.0-restriction-operator.9",
|
"version": "0.17.4",
|
||||||
"resolved": "https://registry.npmjs.org/@fluencelabs/avm/-/avm-0.16.0-restriction-operator.9.tgz",
|
"resolved": "https://registry.npmjs.org/@fluencelabs/avm/-/avm-0.17.4.tgz",
|
||||||
"integrity": "sha512-34vJqo8TIho5H2+WhEAJOa6WxAPiS+c7Z3WKmRZVi+GAsZN3Hv2NiuiCFNFBmPRoD+juzHe4Dmv5cF7HZc6O6w==",
|
"integrity": "sha512-VKD/XaEDXsP0eEgpbncBCsLyHbGDh+f7b96KbYoHld25r3C7mgEbbEVImKLaHGDUiR7ylPBxrtQhNL9MpgKwxA==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"base64-js": "1.5.1"
|
"base64-js": "1.5.1"
|
||||||
}
|
}
|
||||||
@ -8694,9 +8694,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@fluencelabs/avm": {
|
"@fluencelabs/avm": {
|
||||||
"version": "0.16.0-restriction-operator.9",
|
"version": "0.17.4",
|
||||||
"resolved": "https://registry.npmjs.org/@fluencelabs/avm/-/avm-0.16.0-restriction-operator.9.tgz",
|
"resolved": "https://registry.npmjs.org/@fluencelabs/avm/-/avm-0.17.4.tgz",
|
||||||
"integrity": "sha512-34vJqo8TIho5H2+WhEAJOa6WxAPiS+c7Z3WKmRZVi+GAsZN3Hv2NiuiCFNFBmPRoD+juzHe4Dmv5cF7HZc6O6w==",
|
"integrity": "sha512-VKD/XaEDXsP0eEgpbncBCsLyHbGDh+f7b96KbYoHld25r3C7mgEbbEVImKLaHGDUiR7ylPBxrtQhNL9MpgKwxA==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"base64-js": "1.5.1"
|
"base64-js": "1.5.1"
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@chainsafe/libp2p-noise": "4.0.0",
|
"@chainsafe/libp2p-noise": "4.0.0",
|
||||||
"@fluencelabs/avm": "0.16.0-restriction-operator.9",
|
"@fluencelabs/avm": "0.17.4",
|
||||||
"async": "3.2.0",
|
"async": "3.2.0",
|
||||||
"base64-js": "1.5.1",
|
"base64-js": "1.5.1",
|
||||||
"bs58": "4.0.1",
|
"bs58": "4.0.1",
|
||||||
|
138
src/__test__/integration/demo.ts
Normal file
138
src/__test__/integration/demo.ts
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
import { Multiaddr } from 'multiaddr';
|
||||||
|
import { nodes } from '../connection';
|
||||||
|
import { Fluence, FluencePeer, setLogLevel } from '../../index';
|
||||||
|
import { checkConnection, doNothing, handleTimeout } from '../../internal/utils';
|
||||||
|
import { Particle } from '../../internal/Particle';
|
||||||
|
import { registerHandlersHelper } from '../util';
|
||||||
|
|
||||||
|
import { testNet } from "@fluencelabs/fluence-network-environment";
|
||||||
|
|
||||||
|
const anotherPeer = new FluencePeer();
|
||||||
|
|
||||||
|
async function main() {
|
||||||
|
// arrange
|
||||||
|
const peer = new FluencePeer();
|
||||||
|
await peer.start({ connectTo: testNet[0], avmLogLevel: "trace" });
|
||||||
|
|
||||||
|
const promise = new Promise((resolve, reject) => {
|
||||||
|
const script = `
|
||||||
|
(xor
|
||||||
|
(seq
|
||||||
|
(seq
|
||||||
|
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
|
||||||
|
(call %init_peer_id% ("getDataSrv" "clientId") [] clientId)
|
||||||
|
)
|
||||||
|
(xor
|
||||||
|
(par
|
||||||
|
(seq
|
||||||
|
(call -relay- ("kad" "neighborhood") [clientId [] []] neighbors)
|
||||||
|
(call %init_peer_id% ("op" "noop") [])
|
||||||
|
)
|
||||||
|
(fold neighbors n
|
||||||
|
(par
|
||||||
|
(seq
|
||||||
|
(call -relay- ("op" "noop") [])
|
||||||
|
(xor
|
||||||
|
(seq
|
||||||
|
(seq
|
||||||
|
(call n ("kad" "neighborhood") [n [] []] neighbors2)
|
||||||
|
(par
|
||||||
|
(seq
|
||||||
|
(call -relay- ("op" "noop") [])
|
||||||
|
(xor
|
||||||
|
(call %init_peer_id% ("callbackSrv" "logNeighs") [neighbors2])
|
||||||
|
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1])
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(null)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(fold neighbors2 n2
|
||||||
|
(seq
|
||||||
|
(seq
|
||||||
|
(seq
|
||||||
|
(call -relay- ("op" "noop") [])
|
||||||
|
(xor
|
||||||
|
(seq
|
||||||
|
(seq
|
||||||
|
(seq
|
||||||
|
(seq
|
||||||
|
(seq
|
||||||
|
(call n2 ("peer" "identify") [] ident)
|
||||||
|
(call n2 ("dist" "list_blueprints") [] blueprints)
|
||||||
|
)
|
||||||
|
(call n2 ("dist" "list_modules") [] modules)
|
||||||
|
)
|
||||||
|
(call n2 ("srv" "list") [] services)
|
||||||
|
)
|
||||||
|
(call -relay- ("op" "noop") [])
|
||||||
|
)
|
||||||
|
(xor
|
||||||
|
(call %init_peer_id% ("callbackSrv" "collectPeerInfo") [n2 ident services blueprints modules])
|
||||||
|
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(call -relay- ("op" "noop") [])
|
||||||
|
)
|
||||||
|
(next n2)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(seq
|
||||||
|
(call -relay- ("op" "noop") [])
|
||||||
|
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 4])
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(next n)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 5])
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 6])
|
||||||
|
)
|
||||||
|
`;
|
||||||
|
const particle = Particle.createNew(script);
|
||||||
|
|
||||||
|
let outer = ["1"];
|
||||||
|
let returns = 0;
|
||||||
|
registerHandlersHelper(peer, particle, {
|
||||||
|
getDataSrv: {
|
||||||
|
"-relay-": _ => {
|
||||||
|
return peer.getStatus().relayPeerId;
|
||||||
|
},
|
||||||
|
"clientId": _ => {
|
||||||
|
return peer.getStatus().peerId;
|
||||||
|
},
|
||||||
|
"outer": _ => {
|
||||||
|
return outer;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
op: {
|
||||||
|
return: (args) => {
|
||||||
|
console.log("got op return: ", JSON.stringify(args));
|
||||||
|
returns += 1;
|
||||||
|
// if (returns == 5) {
|
||||||
|
// resolve(undefined);
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"callbackSrv": {
|
||||||
|
"logNeighs": args => {}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
peer.internals.initiateParticle(particle, handleTimeout(reject));
|
||||||
|
});
|
||||||
|
|
||||||
|
await promise;
|
||||||
|
|
||||||
|
await peer.stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
main()
|
@ -5,7 +5,7 @@ import { checkConnection, doNothing, handleTimeout } from '../../internal/utils'
|
|||||||
import { Particle } from '../../internal/Particle';
|
import { Particle } from '../../internal/Particle';
|
||||||
import { registerHandlersHelper } from '../util';
|
import { registerHandlersHelper } from '../util';
|
||||||
|
|
||||||
import { krasnodar } from "@fluencelabs/fluence-network-environment";
|
import { krasnodar, testNet } from "@fluencelabs/fluence-network-environment";
|
||||||
|
|
||||||
const anotherPeer = new FluencePeer();
|
const anotherPeer = new FluencePeer();
|
||||||
|
|
||||||
@ -534,7 +534,7 @@ describe('Typescript usage suite', () => {
|
|||||||
it('Fold: incompatible results bug', async () => {
|
it('Fold: incompatible results bug', async () => {
|
||||||
// arrange
|
// arrange
|
||||||
const peer = new FluencePeer();
|
const peer = new FluencePeer();
|
||||||
await peer.start({ connectTo: krasnodar[0] });
|
await peer.start({ connectTo: testNet[0], avmLogLevel: "info" });
|
||||||
|
|
||||||
const promise = new Promise((resolve, reject) => {
|
const promise = new Promise((resolve, reject) => {
|
||||||
const script = `
|
const script = `
|
||||||
@ -621,7 +621,7 @@ describe('Typescript usage suite', () => {
|
|||||||
`;
|
`;
|
||||||
const particle = Particle.createNew(script);
|
const particle = Particle.createNew(script);
|
||||||
|
|
||||||
let outer = ["1", "2", "3", "4", "5"];
|
let outer = ["1"];
|
||||||
let returns = 0;
|
let returns = 0;
|
||||||
registerHandlersHelper(peer, particle, {
|
registerHandlersHelper(peer, particle, {
|
||||||
getDataSrv: {
|
getDataSrv: {
|
||||||
@ -643,7 +643,10 @@ describe('Typescript usage suite', () => {
|
|||||||
// resolve(undefined);
|
// resolve(undefined);
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
"callbackSrv": {
|
||||||
|
"logNeighs": args => { console.log("logNeighs", JSON.stringify(args)) }
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
peer.internals.initiateParticle(particle, handleTimeout(reject));
|
peer.internals.initiateParticle(particle, handleTimeout(reject));
|
||||||
|
@ -52,6 +52,9 @@ export type AvmLoglevel = LogLevel;
|
|||||||
|
|
||||||
const DEFAULT_TTL = 7000;
|
const DEFAULT_TTL = 7000;
|
||||||
|
|
||||||
|
let file_name = 1;
|
||||||
|
let interpreter_run = 1;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Configuration used when initiating Fluence Peer
|
* Configuration used when initiating Fluence Peer
|
||||||
*/
|
*/
|
||||||
@ -594,6 +597,12 @@ function runInterpreter(
|
|||||||
particle.logTo('debug', 'Sending particle to interpreter');
|
particle.logTo('debug', 'Sending particle to interpreter');
|
||||||
log.debug('prevData: ', dataToString(prevData));
|
log.debug('prevData: ', dataToString(prevData));
|
||||||
log.debug('data: ', dataToString(particle.data));
|
log.debug('data: ', dataToString(particle.data));
|
||||||
|
|
||||||
|
let fs = require('fs');
|
||||||
|
let nn = `\n\ninterpreter run #${interpreter_run}:\n\n\n`;
|
||||||
|
fs.appendFileSync("./trace_instr.out", nn)
|
||||||
|
interpreter_run += 1;
|
||||||
|
|
||||||
const interpreterResult = interpreter.invoke(
|
const interpreterResult = interpreter.invoke(
|
||||||
particle.script,
|
particle.script,
|
||||||
prevData,
|
prevData,
|
||||||
@ -611,7 +620,24 @@ function runInterpreter(
|
|||||||
if (isInterpretationSuccessful(interpreterResult)) {
|
if (isInterpretationSuccessful(interpreterResult)) {
|
||||||
log.debug('Interpreter result: ', toLog);
|
log.debug('Interpreter result: ', toLog);
|
||||||
} else {
|
} else {
|
||||||
log.error('Interpreter failed: ', toLog);
|
/*
|
||||||
|
log.error('Interpreter failed_____: ', toLog);
|
||||||
|
log.error('prevData: ', dataToString(prevData));
|
||||||
|
log.error('data: ', dataToString(particle.data));
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
let str_1 = `Interpreter failed: ${JSON.stringify(toLog, null, 4)}\n\n`;
|
||||||
|
let str_2 = `prevData: ${JSON.stringify(dataToString(prevData), null, 4)}\n\n`;
|
||||||
|
let str_3 = `data: ${JSON.stringify(dataToString(particle.data), null, 4)}\n\n`;
|
||||||
|
|
||||||
|
const fs = require('fs');
|
||||||
|
let ff = `./${file_name}.out`;
|
||||||
|
fs.writeFileSync(ff, str_1 + str_2 + str_3);
|
||||||
|
|
||||||
|
file_name += 1;
|
||||||
|
process.exit(1);
|
||||||
|
// setTimeout(() => process.exit(1), 20000);
|
||||||
}
|
}
|
||||||
return interpreterResult;
|
return interpreterResult;
|
||||||
}
|
}
|
||||||
|
@ -20,8 +20,12 @@ import { CallServiceData, CallServiceResult, CallServiceResultType, ResultCodes
|
|||||||
import { AvmLoglevel, FluencePeer } from './FluencePeer';
|
import { AvmLoglevel, FluencePeer } from './FluencePeer';
|
||||||
import { Particle, ParticleExecutionStage } from './Particle';
|
import { Particle, ParticleExecutionStage } from './Particle';
|
||||||
|
|
||||||
|
let fs = require('fs');
|
||||||
export const createInterpreter = (logLevel: AvmLoglevel): Promise<AirInterpreter> => {
|
export const createInterpreter = (logLevel: AvmLoglevel): Promise<AirInterpreter> => {
|
||||||
const logFn = (level: AvmLogLevel, msg: string) => {
|
const logFn = (level: AvmLogLevel, msg: string) => {
|
||||||
|
let msg_n = `${msg}\n`;
|
||||||
|
fs.appendFileSync("./trace_instr.out", msg_n);
|
||||||
|
/*
|
||||||
switch (level) {
|
switch (level) {
|
||||||
case 'error':
|
case 'error':
|
||||||
log.error(msg);
|
log.error(msg);
|
||||||
@ -40,6 +44,8 @@ export const createInterpreter = (logLevel: AvmLoglevel): Promise<AirInterpreter
|
|||||||
log.log(msg);
|
log.log(msg);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*/
|
||||||
};
|
};
|
||||||
return AirInterpreter.create(logLevel, logFn);
|
return AirInterpreter.create(logLevel, logFn);
|
||||||
};
|
};
|
||||||
|
3
trace.out
Normal file
3
trace.out
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[UnhandledPromiseRejection: This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). The promise rejected with the reason "undefined".] {
|
||||||
|
code: 'ERR_UNHANDLED_REJECTION'
|
||||||
|
}
|
41595
trace_instr.out
Normal file
41595
trace_instr.out
Normal file
File diff suppressed because it is too large
Load Diff
478
trace_log.out
Normal file
478
trace_log.out
Normal file
@ -0,0 +1,478 @@
|
|||||||
|
> xor
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> par
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> call
|
||||||
|
> fold
|
||||||
|
> par
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> par
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> call
|
||||||
|
> null
|
||||||
|
> fold
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> next
|
||||||
|
> par
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> par
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> call
|
||||||
|
> null
|
||||||
|
> fold
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> next
|
||||||
|
> par
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> par
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> call
|
||||||
|
> null
|
||||||
|
> fold
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> next
|
||||||
|
> par
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> par
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> null
|
||||||
|
> fold
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> next
|
||||||
|
> par
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> par
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> call
|
||||||
|
> null
|
||||||
|
> fold
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> next
|
||||||
|
> par
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> par
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> call
|
||||||
|
> null
|
||||||
|
> fold
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> next
|
||||||
|
> par
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> par
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> call
|
||||||
|
> null
|
||||||
|
> fold
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> call
|
||||||
|
> call
|
||||||
|
> call
|
||||||
|
> call
|
||||||
|
> next
|
||||||
|
> par
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> par
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> call
|
||||||
|
> null
|
||||||
|
> fold
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> next
|
||||||
|
> par
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> par
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> call
|
||||||
|
> null
|
||||||
|
> fold
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> next
|
||||||
|
> par
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> par
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> call
|
||||||
|
> null
|
||||||
|
> fold
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> next
|
||||||
|
> par
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> par
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> call
|
||||||
|
> null
|
||||||
|
> fold
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> call
|
||||||
|
> call
|
||||||
|
> call
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> call
|
||||||
|
> next
|
||||||
|
> par
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> par
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> call
|
||||||
|
> null
|
||||||
|
> fold
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> next
|
||||||
|
> par
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> par
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> call
|
||||||
|
> null
|
||||||
|
> fold
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> next
|
||||||
|
> par
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> par
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> call
|
||||||
|
> null
|
||||||
|
> fold
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> next
|
||||||
|
> par
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> next
|
||||||
|
> par
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> par
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> call
|
||||||
|
> null
|
||||||
|
> fold
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> next
|
||||||
|
> par
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> par
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> call
|
||||||
|
> null
|
||||||
|
> fold
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> next
|
||||||
|
> par
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> par
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> call
|
||||||
|
> null
|
||||||
|
> fold
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> next
|
||||||
|
> par
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> next
|
||||||
|
> par
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> xor
|
||||||
|
> seq
|
||||||
|
> seq
|
||||||
|
> call
|
||||||
|
> next
|
Loading…
x
Reference in New Issue
Block a user