// File: Laakeri[P]maxpre/src/main.cpp
// Function: printHelp(std::ostream&)
void printHelp(ostream& out) {
	out<<endl;
	out<<"The first argument is the instance file, the second is preprocess, reconstruct or solve."<<endl;
	out<<endl;
	
	out<<"An example of using the preprocessor:"<<endl;
	out<<"\t./preprocessor test.wcnf preprocess -techniques=[bu]#[buvsrg] -mapfile=test.map > preprocessed.wcnf"<<endl;
	out<<"\t./solver < preprocessed.wcnf > sol0.sol"<<endl;
	out<<"\t./preprocessor sol0.sol reconstruct -mapfile=test.map > solution.sol"<<endl;
	out<<endl;
	out<<"Another way to do the same thing:"<<endl;
	out<<"\t./preprocessor test.wcnf solve -solver=./solver -techniques=[bu]#[buvsrg] > solution.sol"<<endl;
	out<<endl;
	
	out<<"-techniques (default: [bu]#[buvsrgc])"<<endl;
	out<<"\tstring:"<<endl;
	out<<"\tThis string defines the preprocessing techniques to use and the order of them."<<endl;
	out<<"\tEach letter corresponds to a preprocessing technique. Each preprocessing technique is applied until its fixpoint."<<endl;
	out<<"\tTechniques inside brackets are applied until all of them are in fixpoint. The brackets work recursively. "<<endl;
	out<<"\tIf # character is given, all techniques before it are applied before group detection and adding labels (techniques available before labeling are BCE, UP and SE)."<<endl;
	out<<"\tTechniques:"<<endl;
	out<<"\tb = blocked clause elimintation"<<endl;
	out<<"\tu = unit propagation"<<endl;
	out<<"\tv = bounded variable elimination"<<endl;
	out<<"\ts = subsumption elimination"<<endl;
	out<<"\tr = self subsuming resolution"<<endl;
	out<<"\tl = subsumed label elimintion"<<endl;
	out<<"\tc = binary core removal"<<endl;
	out<<"\ta = bounded variable addition"<<endl;
	out<<"\tg = generalized subsumed label elimination"<<endl;
	out<<"\te = equivalence elimination"<<endl;
	out<<"\th = unhiding techniques (failed literals, hidden tautology elimination, hidden literal elimination)"<<endl;
	out<<"\tt = structure labeling"<<endl;
	out<<"\tp = failed label probing"<<endl;
	out<<endl;
	
	out<<"-solver (default: disabled)"<<endl;
	out<<"\tstring:"<<endl;
	out<<"\tThe solver to use to solve the preprocessed instance"<<endl;
	out<<endl;
	
	out<<"-solverflags (default: disabled)"<<endl;
	out<<"\tstring:"<<endl;
	out<<"\tThe flags to use with the solver"<<endl;
	out<<"\tFor example -solver=./LMHS -solverflags=\"--infile-assumps --no-preprocess\" results in using the command ./LMHS preprocessed.wcnf --infile-assumps --no-preprocess > sol0.sol"<<endl;
	out<<endl;
	
	out<<"-mapfile (default: disabled)"<<endl;
	out<<"\tstring:"<<endl;
	out<<"\tThe file to write the solution reconstruction map"<<endl;
	out<<endl;
	
	out<<"-problemtype (default: maxsat)"<<endl;
	out<<"\tstring: {maxsat, sat}"<<endl;
	out<<"\tShould the problem be preprocessed as a MaxSAT or SAT instance"<<endl;
	out<<endl;
	
	out<<"-outputformat (default: wpms)"<<endl;
	out<<"\tstring: {original}"<<endl;
	out<<"\tBy default the preprocessor always gives the output in weighted partial MaxSAT format"<<endl;
	out<<"\tOutput in SAT format by setting this to original when preprocessing SAT instances"<<endl;
	out<<endl;
	
	out<<"-timelimit (default: inf)"<<endl;
	out<<"\tdouble: [0, 500000000]"<<endl;
	out<<"\tLimit for preprocessing time in seconds"<<endl;
	out<<endl;
	
	out<<"-skiptechnique (default: disabled)"<<endl;
	out<<"\tint: [1, 1000000000]"<<endl;
	out<<"\tSkip a preprocessing technique if it seems to be not effective in x tries (x is given in this flag)"<<endl;
	out<<"\tRecommended values for this could be something between 10 and 1000"<<endl;
	out<<endl;
	
	out<<"-matchlabels (default: 0)"<<endl;
	out<<"\tbool: {0, 1}"<<endl;
	out<<"\tUse label matching technique to reduce the number of labels"<<endl;
	out<<endl;
	
	out<<"-bvegate (default: 0)"<<endl;
	out<<"\tbool: {0, 1}"<<endl;
	out<<"\tUse BVE gate extraction to extend BVE"<<endl;
	out<<"\tNote: applying BCE will destroy all recognizable gate structures"<<endl;
	out<<endl;
	
	out<<"-verb (default: 1)"<<endl;
	out<<"\tint: [0, 1]"<<endl;
	out<<"\tIf verb is 0 the preprocessor will output less stuff to the standard error"<<endl;
	out<<endl;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rdi
movq 0xa7d19(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e1d2(%rip), %rsi     # 0x85479
callq 0x4380
movq %rax, %rdi
movq 0xa7cfa(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
movq 0xa7cea(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e1fc(%rip), %rsi     # 0x854d2
callq 0x4380
movq %rax, %rdi
movq 0xa7ccb(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e203(%rip), %rsi     # 0x854f8
callq 0x4380
movq %rax, %rdi
movq 0xa7cac(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e249(%rip), %rsi     # 0x8555d
callq 0x4380
movq %rax, %rdi
movq 0xa7c8d(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e253(%rip), %rsi     # 0x85586
callq 0x4380
movq %rax, %rdi
movq 0xa7c6e(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
movq 0xa7c5e(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e26a(%rip), %rsi     # 0x855cc
callq 0x4380
movq %rax, %rdi
movq 0xa7c3f(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e26d(%rip), %rsi     # 0x855ee
callq 0x4380
movq %rax, %rdi
movq 0xa7c20(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
movq 0xa7c10(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e298(%rip), %rsi     # 0x85648
callq 0x4380
movq %rax, %rdi
movq 0xa7bf1(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e29f(%rip), %rsi     # 0x8566e
callq 0x4380
movq %rax, %rdi
movq 0xa7bd2(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e289(%rip), %rsi     # 0x85677
callq 0x4380
movq %rax, %rdi
movq 0xa7bb3(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e2ba(%rip), %rsi     # 0x856c7
callq 0x4380
movq %rax, %rdi
movq 0xa7b94(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e30e(%rip), %rsi     # 0x8573a
callq 0x4380
movq %rax, %rdi
movq 0xa7b75(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e35a(%rip), %rsi     # 0x857a5
callq 0x4380
movq %rax, %rdi
movq 0xa7b56(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e3de(%rip), %rsi     # 0x85848
callq 0x4380
movq %rax, %rdi
movq 0xa7b37(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e3cc(%rip), %rsi     # 0x85855
callq 0x4380
movq %rax, %rdi
movq 0xa7b18(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e3ce(%rip), %rsi     # 0x85876
callq 0x4380
movq %rax, %rdi
movq 0xa7af9(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e3c5(%rip), %rsi     # 0x8588c
callq 0x4380
movq %rax, %rdi
movq 0xa7ada(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e3c8(%rip), %rsi     # 0x858ae
callq 0x4380
movq %rax, %rdi
movq 0xa7abb(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e3c6(%rip), %rsi     # 0x858cb
callq 0x4380
movq %rax, %rdi
movq 0xa7a9c(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e3c6(%rip), %rsi     # 0x858ea
callq 0x4380
movq %rax, %rdi
movq 0xa7a7d(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e3c6(%rip), %rsi     # 0x85909
callq 0x4380
movq %rax, %rdi
movq 0xa7a5e(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e3c0(%rip), %rsi     # 0x85922
callq 0x4380
movq %rax, %rdi
movq 0xa7a3f(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e3c0(%rip), %rsi     # 0x85941
callq 0x4380
movq %rax, %rdi
movq 0xa7a20(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e3cd(%rip), %rsi     # 0x8596d
callq 0x4380
movq %rax, %rdi
movq 0xa7a01(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e3cb(%rip), %rsi     # 0x8598a
callq 0x4380
movq %rax, %rdi
movq 0xa79e2(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e411(%rip), %rsi     # 0x859ef
callq 0x4380
movq %rax, %rdi
movq 0xa79c3(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e40a(%rip), %rsi     # 0x85a07
callq 0x4380
movq %rax, %rdi
movq 0xa79a4(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
movq 0xa7994(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e3f5(%rip), %rsi     # 0x85a21
callq 0x4380
movq %rax, %rdi
movq 0xa7975(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e023(%rip), %rsi     # 0x8566e
callq 0x4380
movq %rax, %rdi
movq 0xa7956(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e3d3(%rip), %rsi     # 0x85a3d
callq 0x4380
movq %rax, %rdi
movq 0xa7937(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
movq 0xa7927(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e3da(%rip), %rsi     # 0x85a73
callq 0x4380
movq %rax, %rdi
movq 0xa7908(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7dfb6(%rip), %rsi     # 0x8566e
callq 0x4380
movq %rax, %rdi
movq 0xa78e9(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e3bd(%rip), %rsi     # 0x85a94
callq 0x4380
movq %rax, %rdi
movq 0xa78ca(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e3c0(%rip), %rsi     # 0x85ab6
callq 0x4380
movq %rax, %rdi
movq 0xa78ab(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
movq 0xa789b(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e43f(%rip), %rsi     # 0x85b64
callq 0x4380
movq %rax, %rdi
movq 0xa787c(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7df2a(%rip), %rsi     # 0x8566e
callq 0x4380
movq %rax, %rdi
movq 0xa785d(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e41e(%rip), %rsi     # 0x85b81
callq 0x4380
movq %rax, %rdi
movq 0xa783e(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
movq 0xa782e(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e422(%rip), %rsi     # 0x85bb4
callq 0x4380
movq %rax, %rdi
movq 0xa780f(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e422(%rip), %rsi     # 0x85bd3
callq 0x4380
movq %rax, %rdi
movq 0xa77f0(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e41a(%rip), %rsi     # 0x85bea
callq 0x4380
movq %rax, %rdi
movq 0xa77d1(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
movq 0xa77c1(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e42b(%rip), %rsi     # 0x85c2a
callq 0x4380
movq %rax, %rdi
movq 0xa77a2(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e42a(%rip), %rsi     # 0x85c48
callq 0x4380
movq %rax, %rdi
movq 0xa7783(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e41f(%rip), %rsi     # 0x85c5c
callq 0x4380
movq %rax, %rdi
movq 0xa7764(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e457(%rip), %rsi     # 0x85cb3
callq 0x4380
movq %rax, %rdi
movq 0xa7745(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
movq 0xa7735(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e47b(%rip), %rsi     # 0x85d06
callq 0x4380
movq %rax, %rdi
movq 0xa7716(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e476(%rip), %rsi     # 0x85d20
callq 0x4380
movq %rax, %rdi
movq 0xa76f7(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e46f(%rip), %rsi     # 0x85d38
callq 0x4380
movq %rax, %rdi
movq 0xa76d8(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
movq 0xa76c8(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e469(%rip), %rsi     # 0x85d61
callq 0x4380
movq %rax, %rdi
movq 0xa76a9(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e46d(%rip), %rsi     # 0x85d84
callq 0x4380
movq %rax, %rdi
movq 0xa768a(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e464(%rip), %rsi     # 0x85d9a
callq 0x4380
movq %rax, %rdi
movq 0xa766b(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e4aa(%rip), %rsi     # 0x85dff
callq 0x4380
movq %rax, %rdi
movq 0xa764c(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
movq 0xa763c(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e4bf(%rip), %rsi     # 0x85e43
callq 0x4380
movq %rax, %rdi
movq 0xa761d(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e4ba(%rip), %rsi     # 0x85e5d
callq 0x4380
movq %rax, %rdi
movq 0xa75fe(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e4a9(%rip), %rsi     # 0x85e6b
callq 0x4380
movq %rax, %rdi
movq 0xa75df(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
movq 0xa75cf(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e4b7(%rip), %rsi     # 0x85ea8
callq 0x4380
movq %rax, %rdi
movq 0xa75b0(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e44d(%rip), %rsi     # 0x85e5d
callq 0x4380
movq %rax, %rdi
movq 0xa7591(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e48f(%rip), %rsi     # 0x85ebe
callq 0x4380
movq %rax, %rdi
movq 0xa7572(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e497(%rip), %rsi     # 0x85ee5
callq 0x4380
movq %rax, %rdi
movq 0xa7553(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
movq 0xa7543(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e4aa(%rip), %rsi     # 0x85f27
callq 0x4380
movq %rax, %rdi
movq 0xa7524(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e49e(%rip), %rsi     # 0x85f3a
callq 0x4380
movq %rax, %rdi
movq 0xa7505(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
leaq 0x7e48c(%rip), %rsi     # 0x85f47
callq 0x4380
movq %rax, %rdi
movq 0xa74e6(%rip), %rsi     # 0xaefb0
callq 0x43d0
movq -0x8(%rbp), %rdi
movq 0xa74d6(%rip), %rsi     # 0xaefb0
callq 0x43d0
addq $0x10, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)