// File: rtackx[P]ComSim/main.cpp
// Function: usage()
void usage()
{
	cerr << "Usage : comsim <link_list_file> <neighbor_distance> [similarity_index] [depth]" << endl << endl;

	cerr << "ComSim is a community detection algorithm." << endl;
	cerr << "A similarity index is used to measure similarities between nodes." << endl;
	cerr << "Basically the similarity is calculated between 2 nodes at a given distance." << endl;
	cerr << "This creates a new weighted graph on which is applied 2 steps :" << endl;
	cerr << "    1) Cycles are detected and considered as core communities. A cycle is a sequence of nodes which have the highest weights (similarities) all along its path." << endl;
	cerr << "    2) Based on communities previously detected, nodes that don't belong to any cycle are then placed to a neihbor community maximazing the sum of weights to that community." << endl;
	cerr << "After these 2 steps, if there are still remaining nodes and neighbor distance is greater than 0, then a new weighted graph is computed on the induced graph of the remaining nodes at a smaller distance." << endl << endl;

	cerr << "There is the list of available similarity indices (default is cn) :" << endl;
	cerr << "    cn : common neighbors" << endl;
	cerr << "    ji : jaccard index" << endl;
	cerr << "    aa : adamic-adar" << endl;
	cerr << "    ra : resource allocator" << endl;
	cerr << "    lhn : LHN1" << endl;
	cerr << "    pan : preferential attachment neighbor" << endl << endl;

	cerr << "A depth value can be chosen (default is 1). This value indicates how many cycles a node can be part of." << endl;
	cerr << "Choosing a depth value > 1 produces overlapping between communities." << endl << endl;

	cerr << "link_list_file : input network as a list of links" << endl;
	cerr << "A link is : \nnode1 node2 [weight]" << endl << endl;

	cerr << "ComSim examples :" << endl;
	cerr << "\"./comsim uni_network_links 1 > detected_communities\" executes ComSim with cn similarity index between nodes at distance 1 on a unipartite network." << endl;
	cerr << "\"./comsim bip_links 2 aa > detected_communities\" executes ComSim with aa similarity index between nodes at distance 2 on a bipartite network. Since there is no common neighbor between 2 nodes at distance 1 in a bipartite network, it requires an initial distance > 1." << endl;
	cerr << "\"./comsim uni_network_links 1 cm 3 > detected_communities\" executes ComSim with cn similarity index between nodes at distance 1 on a unipartite network and it allows each node to be part of 3 cycles." << endl;
}

// Assembly:
pushq %rax
movq 0x2d1b8(%rip), %rdi     # 0x30ff0
leaq 0x1e1d1(%rip), %rsi     # 0x22010
callq 0x3240
movq %rax, %rdi
movq 0x2d16a(%rip), %rsi     # 0x30fb8
callq 0x3270
movq %rax, %rdi
movq 0x2d15b(%rip), %rsi     # 0x30fb8
callq 0x3270
movq 0x2d187(%rip), %rdi     # 0x30ff0
leaq 0x1e1ef(%rip), %rsi     # 0x2205f
callq 0x3240
movq %rax, %rdi
movq 0x2d139(%rip), %rsi     # 0x30fb8
callq 0x3270
movq 0x2d165(%rip), %rdi     # 0x30ff0
leaq 0x1e1f8(%rip), %rsi     # 0x2208a
callq 0x3240
movq %rax, %rdi
movq 0x2d117(%rip), %rsi     # 0x30fb8
callq 0x3270
movq 0x2d143(%rip), %rdi     # 0x30ff0
leaq 0x1e218(%rip), %rsi     # 0x220cc
callq 0x3240
movq %rax, %rdi
movq 0x2d0f5(%rip), %rsi     # 0x30fb8
callq 0x3270
movq 0x2d121(%rip), %rdi     # 0x30ff0
leaq 0x1e242(%rip), %rsi     # 0x22118
callq 0x3240
movq %rax, %rdi
movq 0x2d0d3(%rip), %rsi     # 0x30fb8
callq 0x3270
movq 0x2d0ff(%rip), %rdi     # 0x30ff0
leaq 0x1e260(%rip), %rsi     # 0x22158
callq 0x3240
movq %rax, %rdi
movq 0x2d0b1(%rip), %rsi     # 0x30fb8
callq 0x3270
movq 0x2d0dd(%rip), %rdi     # 0x30ff0
leaq 0x1e2de(%rip), %rsi     # 0x221f8
callq 0x3240
movq %rax, %rdi
movq 0x2d08f(%rip), %rsi     # 0x30fb8
callq 0x3270
movq 0x2d0bb(%rip), %rdi     # 0x30ff0
leaq 0x1e36a(%rip), %rsi     # 0x222a6
callq 0x3240
movq %rax, %rdi
movq 0x2d06d(%rip), %rsi     # 0x30fb8
callq 0x3270
movq %rax, %rdi
movq 0x2d05e(%rip), %rsi     # 0x30fb8
callq 0x3270
movq 0x2d08a(%rip), %rdi     # 0x30ff0
leaq 0x1e403(%rip), %rsi     # 0x22370
callq 0x3240
movq %rax, %rdi
movq 0x2d03c(%rip), %rsi     # 0x30fb8
callq 0x3270
movq 0x2d068(%rip), %rdi     # 0x30ff0
leaq 0x1e425(%rip), %rsi     # 0x223b4
callq 0x3240
movq %rax, %rdi
movq 0x2d01a(%rip), %rsi     # 0x30fb8
callq 0x3270
movq 0x2d046(%rip), %rdi     # 0x30ff0
leaq 0x1e41d(%rip), %rsi     # 0x223ce
callq 0x3240
movq %rax, %rdi
movq 0x2cff8(%rip), %rsi     # 0x30fb8
callq 0x3270
movq 0x2d024(%rip), %rdi     # 0x30ff0
leaq 0x1e412(%rip), %rsi     # 0x223e5
callq 0x3240
movq %rax, %rdi
movq 0x2cfd6(%rip), %rsi     # 0x30fb8
callq 0x3270
movq 0x2d002(%rip), %rdi     # 0x30ff0
leaq 0x1e405(%rip), %rsi     # 0x223fa
callq 0x3240
movq %rax, %rdi
movq 0x2cfb4(%rip), %rsi     # 0x30fb8
callq 0x3270
movq 0x2cfe0(%rip), %rdi     # 0x30ff0
leaq 0x1e3ff(%rip), %rsi     # 0x22416
callq 0x3240
movq %rax, %rdi
movq 0x2cf92(%rip), %rsi     # 0x30fb8
callq 0x3270
movq 0x2cfbe(%rip), %rdi     # 0x30ff0
leaq 0x1e3ec(%rip), %rsi     # 0x22425
callq 0x3240
movq %rax, %rdi
movq 0x2cf70(%rip), %rsi     # 0x30fb8
callq 0x3270
movq %rax, %rdi
movq 0x2cf61(%rip), %rsi     # 0x30fb8
callq 0x3270
movq 0x2cf8d(%rip), %rdi     # 0x30ff0
leaq 0x1e3e6(%rip), %rsi     # 0x22450
callq 0x3240
movq %rax, %rdi
movq 0x2cf3f(%rip), %rsi     # 0x30fb8
callq 0x3270
movq 0x2cf6b(%rip), %rdi     # 0x30ff0
leaq 0x1e42c(%rip), %rsi     # 0x224b8
callq 0x3240
movq %rax, %rdi
movq 0x2cf1d(%rip), %rsi     # 0x30fb8
callq 0x3270
movq %rax, %rdi
movq 0x2cf0e(%rip), %rsi     # 0x30fb8
callq 0x3270
movq 0x2cf3a(%rip), %rdi     # 0x30ff0
leaq 0x1e440(%rip), %rsi     # 0x224fd
callq 0x3240
movq %rax, %rdi
movq 0x2ceec(%rip), %rsi     # 0x30fb8
callq 0x3270
movq 0x2cf18(%rip), %rdi     # 0x30ff0
leaq 0x1e450(%rip), %rsi     # 0x2252f
callq 0x3240
movq %rax, %rdi
movq 0x2ceca(%rip), %rsi     # 0x30fb8
callq 0x3270
movq %rax, %rdi
movq 0x2cebb(%rip), %rsi     # 0x30fb8
callq 0x3270
movq 0x2cee7(%rip), %rdi     # 0x30ff0
leaq 0x1e441(%rip), %rsi     # 0x22551
callq 0x3240
movq %rax, %rdi
movq 0x2ce99(%rip), %rsi     # 0x30fb8
callq 0x3270
movq 0x2cec5(%rip), %rdi     # 0x30ff0
leaq 0x1e431(%rip), %rsi     # 0x22563
callq 0x3240
movq %rax, %rdi
movq 0x2ce77(%rip), %rsi     # 0x30fb8
callq 0x3270
movq 0x2cea3(%rip), %rdi     # 0x30ff0
leaq 0x1e4a3(%rip), %rsi     # 0x225f7
callq 0x3240
movq %rax, %rdi
movq 0x2ce55(%rip), %rsi     # 0x30fb8
callq 0x3270
movq 0x2ce81(%rip), %rdi     # 0x30ff0
leaq 0x1e58c(%rip), %rsi     # 0x22702
callq 0x3240
movq %rax, %rdi
movq 0x2ce33(%rip), %rsi     # 0x30fb8
callq 0x3270
popq %rax
retq
nopl (%rax)