// File: richardposner[P]BioNetFit2/src/code/Config.cpp
// Function: Config::checkConsistency()
void Config::checkConsistency() {
	/*
	 * Make sure we have SOME sort of stop criteria
	 */

	if (swarm_->options.fitType.empty()) {
		swarm_->outputError("Error: You didn't specify a fit_type in your .conf file. Refer to the documentation with help on setting this option. Quitting.");
	}

	if (swarm_->options.jobName.empty()) {
		swarm_->outputError("Error: You didn't specify a job_name. Quitting.");
	}

	if (swarm_->options.fitType != "ga" && swarm_->options.fitType != "sa" && swarm_->options.fitType != "de" && swarm_->options.fitType != "pso") {
		swarm_->outputError("Error: Unrecognized fit_type. Quitting.");
	}
	if (swarm_->options.models.size() < 1) {
		swarm_->outputError("Error: You didn't specify a model in your .conf file. Refer to the documentation with help on setting this option. Quitting.");
	}
	if (swarm_->options.expFiles.empty()) {
		swarm_->outputError("Error: You didn't specify any .exp files in your .conf file. Refer to the documentation with help on setting this option. Quitting.");
	}

	if (swarm_->options.outputDir.empty()) {
		swarm_->outputError("Error: You didn't specify an output_dir in your .conf file. Refer to the documentation with help on setting this option. Quitting.");
	}

	if (swarm_->options.bngCommand.empty()) {
		swarm_->outputError("Error: You didn't specify a bng_command in your .conf file. Refer to the documentation with help on setting this option. Quitting.");
	}

	if (swarm_->options.swarmSize == 0) {
		swarm_->outputError("Error: You didn't specify a population_size in your .conf file. Refer to the documentation with help on setting this option. Quitting.");
	}

	if (swarm_->options.enhancedInertia && swarm_->options.fitType == "pso") {
		if (!swarm_->options.enhancedStop) {
			swarm_->outputError("Error: You set enhanced_inertia to true, but enhanced_stop to false. Enhanced inertia requires enhanced_stop to be set to true. Quitting.");
		}
	}

	if (swarm_->options.enhancedStop  && swarm_->options.fitType == "pso") {
		if (swarm_->options.nmax == 0) {
			swarm_->outputError("Error: You set enhanced_stop to true, but did not set a maximum permance value (nmax) in your .conf file. Quitting.");
		}
	}

	if (swarm_->options.useCluster && swarm_->options.emailWhenFinished && swarm_->options.emailAddress.empty()) {
		swarm_->outputError("Error: You set email_when_finished to true, but did not specify an email address. Quitting.");
	}

	if (swarm_->options.useCluster && !swarm_->options.clusterSoftware.empty() && (swarm_->options.clusterSoftware != "mpi" && swarm_->options.clusterSoftware != "slurm" && swarm_->options.clusterSoftware != "torque" && swarm_->options.clusterSoftware != "BNF2mpi")) {
		cout << swarm_->options.clusterSoftware << endl;
		swarm_->outputError("Error: You set cluster_software to an invalid option. Quitting.");
	}

	if (swarm_->options.fitType == "de") {
		if (swarm_->options.mutateType == 1 && (swarm_->options.swarmSize / swarm_->options.numIslands) < 2 ) {
			swarm_->outputError("Error: mutate_type=1 requires at least 2 members per island. Quitting.");
		}

		if (swarm_->options.mutateType == 2 && (swarm_->options.swarmSize / swarm_->options.numIslands) < 4 ) {
			swarm_->outputError("Error: mutate_type=2 requires at least 4 members per island. Quitting.");
		}

		if (swarm_->options.mutateType == 3 && (swarm_->options.swarmSize / swarm_->options.numIslands) < 3 ) {
			swarm_->outputError("Error: mutate_type=3 requires at least 3 members per island. Quitting.");
		}

		if (swarm_->options.mutateType == 4 && (swarm_->options.swarmSize / swarm_->options.numIslands) < 5 ) {
			swarm_->outputError("Error: mutate_type=4 requires at least 5 members per island. Quitting.");
		}

		if (swarm_->options.numIslands == 0) {
			swarm_->outputError("Error: You are running a differential evolution fit, but didn't specify the number of islands to use. Quitting.");
		}
	}

	if (swarm_->options.fitType == "pso") {
		if (swarm_->options.fitType == "qpso") {
			if (!swarm_->options.maxNumSimulations) {
				swarm_->outputError("Error: You are using qpso, but didn't set max_num_simulations. Quitting.");
			}
		}
	}


	if (swarm_->options.fitType == "sa") {
		if ((unsigned) swarm_->options.swarmSize < (swarm_->options.models[0]->getNumFreeParams() + 1)) {
			swarm_->outputError("Error: You are using simulated annealing but your swarm size is less than N+1, where N is the number of free parameters in your model. Quitting.");
		}
		if (swarm_->options.synchronicity) {
			swarm_->outputError("Error: Simulated annealing does not support synchronous fitting. Quitting.");
		}
	}

	if (swarm_->options.fitType == "ga") {
		if (swarm_->options.synchronicity && swarm_->options.maxGenerations == 0) {
			swarm_->outputError("Error: You are running a synchronous ga fit, but didn't specify max_generations. Quitting.");
		}
	}

	//razi: check consistency between the model and exp files.
	//TODO more checks may be needed here
	if (!swarm_->check_model_exp_consistency()){
		swarm_->outputError("Error: Models are not consistent with exp files.");
	}

}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x500, %rsp            # imm = 0x500
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x390(%rbp)
movq 0x8(%rax), %rdi
addq $0x14c0, %rdi           # imm = 0x14C0
addq $0x20, %rdi
callq 0x2f700
testb $0x1, %al
jne 0x41aa7
jmp 0x41b39
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x3a0(%rbp)
leaq -0x29(%rbp), %rdi
movq %rdi, -0x398(%rbp)
callq 0x30a70
movq -0x398(%rbp), %rdx
leaq 0x192857(%rip), %rsi    # 0x1d432e
leaq -0x28(%rbp), %rdi
callq 0x44470
jmp 0x41ae2
movq -0x3a0(%rbp), %rdi
leaq -0x28(%rbp), %rsi
callq 0xeada0
jmp 0x41af4
leaq -0x28(%rbp), %rdi
callq 0x311e8
leaq -0x29(%rbp), %rdi
callq 0x311c0
jmp 0x41b39
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x41b2b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x28(%rbp), %rdi
callq 0x311e8
leaq -0x29(%rbp), %rdi
callq 0x311c0
jmp 0x42f46
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rdi
addq $0x14c0, %rdi           # imm = 0x14C0
callq 0x2f700
testb $0x1, %al
jne 0x41b59
jmp 0x41beb
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x3b0(%rbp)
leaq -0x61(%rbp), %rdi
movq %rdi, -0x3a8(%rbp)
callq 0x30a70
movq -0x3a8(%rbp), %rdx
leaq 0x192825(%rip), %rsi    # 0x1d43ae
leaq -0x60(%rbp), %rdi
callq 0x44470
jmp 0x41b94
movq -0x3b0(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0xeada0
jmp 0x41ba6
leaq -0x60(%rbp), %rdi
callq 0x311e8
leaq -0x61(%rbp), %rdi
callq 0x311c0
jmp 0x41beb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x41bdd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x60(%rbp), %rdi
callq 0x311e8
leaq -0x61(%rbp), %rdi
callq 0x311c0
jmp 0x42f46
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rdi
addq $0x14c0, %rdi           # imm = 0x14C0
addq $0x20, %rdi
leaq 0x1927d6(%rip), %rsi    # 0x1d43de
callq 0x45af0
testb $0x1, %al
jne 0x41c16
jmp 0x41d3e
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rdi
addq $0x14c0, %rdi           # imm = 0x14C0
addq $0x20, %rdi
leaq 0x1927ae(%rip), %rsi    # 0x1d43e1
callq 0x45af0
testb $0x1, %al
jne 0x41c41
jmp 0x41d3e
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rdi
addq $0x14c0, %rdi           # imm = 0x14C0
addq $0x20, %rdi
leaq 0x1cf89d(%rip), %rsi    # 0x2114fb
callq 0x45af0
testb $0x1, %al
jne 0x41c6c
jmp 0x41d3e
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rdi
addq $0x14c0, %rdi           # imm = 0x14C0
addq $0x20, %rdi
leaq 0x19fdb9(%rip), %rsi    # 0x1e1a42
callq 0x45af0
testb $0x1, %al
jne 0x41c97
jmp 0x41d3e
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x3c0(%rbp)
leaq -0x89(%rbp), %rdi
movq %rdi, -0x3b8(%rbp)
callq 0x30a70
movq -0x3b8(%rbp), %rdx
leaq 0x19271a(%rip), %rsi    # 0x1d43e4
leaq -0x88(%rbp), %rdi
callq 0x44470
jmp 0x41cd8
movq -0x3c0(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0xeada0
jmp 0x41ced
leaq -0x88(%rbp), %rdi
callq 0x311e8
leaq -0x89(%rbp), %rdi
callq 0x311c0
jmp 0x41d3e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x41d2d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x88(%rbp), %rdi
callq 0x311e8
leaq -0x89(%rbp), %rdi
callq 0x311c0
jmp 0x42f46
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rdi
addq $0x14c0, %rdi           # imm = 0x14C0
addq $0x100, %rdi            # imm = 0x100
callq 0x45170
cmpq $0x1, %rax
jae 0x41e0d
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x3d0(%rbp)
leaq -0xb1(%rbp), %rdi
movq %rdi, -0x3c8(%rbp)
callq 0x30a70
movq -0x3c8(%rbp), %rdx
leaq 0x192673(%rip), %rsi    # 0x1d440c
leaq -0xb0(%rbp), %rdi
callq 0x44470
jmp 0x41da7
movq -0x3d0(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
callq 0xeada0
jmp 0x41dbc
leaq -0xb0(%rbp), %rdi
callq 0x311e8
leaq -0xb1(%rbp), %rdi
callq 0x311c0
jmp 0x41e0d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x41dfc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0xb0(%rbp), %rdi
callq 0x311e8
leaq -0xb1(%rbp), %rdi
callq 0x311c0
jmp 0x42f46
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rdi
addq $0x14c0, %rdi           # imm = 0x14C0
addq $0xa0, %rdi
callq 0x45b20
testb $0x1, %al
jne 0x41e34
jmp 0x41edb
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x3e0(%rbp)
leaq -0xd9(%rbp), %rdi
movq %rdi, -0x3d8(%rbp)
callq 0x30a70
movq -0x3d8(%rbp), %rdx
leaq 0x192622(%rip), %rsi    # 0x1d4489
leaq -0xd8(%rbp), %rdi
callq 0x44470
jmp 0x41e75
movq -0x3e0(%rbp), %rdi
leaq -0xd8(%rbp), %rsi
callq 0xeada0
jmp 0x41e8a
leaq -0xd8(%rbp), %rdi
callq 0x311e8
leaq -0xd9(%rbp), %rdi
callq 0x311c0
jmp 0x41edb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x41eca
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0xd8(%rbp), %rdi
callq 0x311e8
leaq -0xd9(%rbp), %rdi
callq 0x311c0
jmp 0x42f46
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rdi
addq $0x14c0, %rdi           # imm = 0x14C0
addq $0x40, %rdi
callq 0x2f700
testb $0x1, %al
jne 0x41eff
jmp 0x41fa6
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x3f0(%rbp)
leaq -0x101(%rbp), %rdi
movq %rdi, -0x3e8(%rbp)
callq 0x30a70
movq -0x3e8(%rbp), %rdx
leaq 0x1925db(%rip), %rsi    # 0x1d450d
leaq -0x100(%rbp), %rdi
callq 0x44470
jmp 0x41f40
movq -0x3f0(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0xeada0
jmp 0x41f55
leaq -0x100(%rbp), %rdi
callq 0x311e8
leaq -0x101(%rbp), %rdi
callq 0x311c0
jmp 0x41fa6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x41f95
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x100(%rbp), %rdi
callq 0x311e8
leaq -0x101(%rbp), %rdi
callq 0x311c0
jmp 0x42f46
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rdi
addq $0x14c0, %rdi           # imm = 0x14C0
addq $0x80, %rdi
callq 0x2f700
testb $0x1, %al
jne 0x41fcd
jmp 0x42074
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x400(%rbp)
leaq -0x129(%rbp), %rdi
movq %rdi, -0x3f8(%rbp)
callq 0x30a70
movq -0x3f8(%rbp), %rdx
leaq 0x192590(%rip), %rsi    # 0x1d4590
leaq -0x128(%rbp), %rdi
callq 0x44470
jmp 0x4200e
movq -0x400(%rbp), %rdi
leaq -0x128(%rbp), %rsi
callq 0xeada0
jmp 0x42023
leaq -0x128(%rbp), %rdi
callq 0x311e8
leaq -0x129(%rbp), %rdi
callq 0x311c0
jmp 0x42074
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x42063
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x128(%rbp), %rdi
callq 0x311e8
leaq -0x129(%rbp), %rdi
callq 0x311c0
jmp 0x42f46
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x0, 0x1620(%rax)
jne 0x42133
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x410(%rbp)
leaq -0x151(%rbp), %rdi
movq %rdi, -0x408(%rbp)
callq 0x30a70
movq -0x408(%rbp), %rdx
leaq 0x192554(%rip), %rsi    # 0x1d4613
leaq -0x150(%rbp), %rdi
callq 0x44470
jmp 0x420cd
movq -0x410(%rbp), %rdi
leaq -0x150(%rbp), %rsi
callq 0xeada0
jmp 0x420e2
leaq -0x150(%rbp), %rdi
callq 0x311e8
leaq -0x151(%rbp), %rdi
callq 0x311c0
jmp 0x42133
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x42122
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x150(%rbp), %rdi
callq 0x311e8
leaq -0x151(%rbp), %rdi
callq 0x311c0
jmp 0x42f46
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rax
testb $0x1, 0x16f9(%rax)
je 0x42237
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rdi
addq $0x14c0, %rdi           # imm = 0x14C0
addq $0x20, %rdi
leaq 0x19f8da(%rip), %rsi    # 0x1e1a42
callq 0x44930
testb $0x1, %al
jne 0x42176
jmp 0x42237
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rax
testb $0x1, 0x16f8(%rax)
jne 0x42235
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x420(%rbp)
leaq -0x179(%rbp), %rdi
movq %rdi, -0x418(%rbp)
callq 0x30a70
movq -0x418(%rbp), %rdx
leaq 0x1924d9(%rip), %rsi    # 0x1d469a
leaq -0x178(%rbp), %rdi
callq 0x44470
jmp 0x421cf
movq -0x420(%rbp), %rdi
leaq -0x178(%rbp), %rsi
callq 0xeada0
jmp 0x421e4
leaq -0x178(%rbp), %rdi
callq 0x311e8
leaq -0x179(%rbp), %rdi
callq 0x311c0
jmp 0x42235
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x42224
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x178(%rbp), %rdi
callq 0x311e8
leaq -0x179(%rbp), %rdi
callq 0x311c0
jmp 0x42f46
jmp 0x42237
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rax
testb $0x1, 0x16f8(%rax)
je 0x4233b
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rdi
addq $0x14c0, %rdi           # imm = 0x14C0
addq $0x20, %rdi
leaq 0x19f7d6(%rip), %rsi    # 0x1e1a42
callq 0x44930
testb $0x1, %al
jne 0x4227a
jmp 0x4233b
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x0, 0x1694(%rax)
jne 0x42339
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x430(%rbp)
leaq -0x1a1(%rbp), %rdi
movq %rdi, -0x428(%rbp)
callq 0x30a70
movq -0x428(%rbp), %rdx
leaq 0x19245f(%rip), %rsi    # 0x1d4724
leaq -0x1a0(%rbp), %rdi
callq 0x44470
jmp 0x422d3
movq -0x430(%rbp), %rdi
leaq -0x1a0(%rbp), %rsi
callq 0xeada0
jmp 0x422e8
leaq -0x1a0(%rbp), %rdi
callq 0x311e8
leaq -0x1a1(%rbp), %rdi
callq 0x311c0
jmp 0x42339
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x42328
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x1a0(%rbp), %rdi
callq 0x311e8
leaq -0x1a1(%rbp), %rdi
callq 0x311c0
jmp 0x42f46
jmp 0x4233b
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rax
testb $0x1, 0x1631(%rax)
je 0x42439
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rax
testb $0x1, 0x1798(%rax)
je 0x42439
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rdi
addq $0x14c0, %rdi           # imm = 0x14C0
addq $0x2e0, %rdi            # imm = 0x2E0
callq 0x2f700
testb $0x1, %al
jne 0x42392
jmp 0x42439
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x440(%rbp)
leaq -0x1c9(%rbp), %rdi
movq %rdi, -0x438(%rbp)
callq 0x30a70
movq -0x438(%rbp), %rdx
leaq 0x1923d3(%rip), %rsi    # 0x1d4798
leaq -0x1c8(%rbp), %rdi
callq 0x44470
jmp 0x423d3
movq -0x440(%rbp), %rdi
leaq -0x1c8(%rbp), %rsi
callq 0xeada0
jmp 0x423e8
leaq -0x1c8(%rbp), %rdi
callq 0x311e8
leaq -0x1c9(%rbp), %rdi
callq 0x311c0
jmp 0x42439
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x42428
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x1c8(%rbp), %rdi
callq 0x311e8
leaq -0x1c9(%rbp), %rdi
callq 0x311c0
jmp 0x42f46
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rax
testb $0x1, 0x1631(%rax)
je 0x42603
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rdi
addq $0x14c0, %rdi           # imm = 0x14C0
addq $0x270, %rdi            # imm = 0x270
callq 0x2f700
testb $0x1, %al
jne 0x42603
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rdi
addq $0x14c0, %rdi           # imm = 0x14C0
addq $0x270, %rdi            # imm = 0x270
leaq 0x19236e(%rip), %rsi    # 0x1d4805
callq 0x45af0
testb $0x1, %al
jne 0x424a5
jmp 0x42603
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rdi
addq $0x14c0, %rdi           # imm = 0x14C0
addq $0x270, %rdi            # imm = 0x270
leaq 0x19232f(%rip), %rsi    # 0x1d47f4
callq 0x45af0
testb $0x1, %al
jne 0x424d3
jmp 0x42603
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rdi
addq $0x14c0, %rdi           # imm = 0x14C0
addq $0x270, %rdi            # imm = 0x270
leaq 0x192307(%rip), %rsi    # 0x1d47fa
callq 0x45af0
testb $0x1, %al
jne 0x42501
jmp 0x42603
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rdi
addq $0x14c0, %rdi           # imm = 0x14C0
addq $0x270, %rdi            # imm = 0x270
leaq 0x1922e0(%rip), %rsi    # 0x1d4801
callq 0x45af0
testb $0x1, %al
jne 0x4252f
jmp 0x42603
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rsi
addq $0x1730, %rsi           # imm = 0x1730
movq 0x292a08(%rip), %rdi    # 0x2d4f50
callq 0x2f780
movq %rax, %rdi
movq 0x292a71(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x450(%rbp)
leaq -0x1f1(%rbp), %rdi
movq %rdi, -0x448(%rbp)
callq 0x30a70
movq -0x448(%rbp), %rdx
leaq 0x19227a(%rip), %rsi    # 0x1d4809
leaq -0x1f0(%rbp), %rdi
callq 0x44470
jmp 0x4259d
movq -0x450(%rbp), %rdi
leaq -0x1f0(%rbp), %rsi
callq 0xeada0
jmp 0x425b2
leaq -0x1f0(%rbp), %rdi
callq 0x311e8
leaq -0x1f1(%rbp), %rdi
callq 0x311c0
jmp 0x42603
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x425f2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x1f0(%rbp), %rdi
callq 0x311e8
leaq -0x1f1(%rbp), %rdi
callq 0x311c0
jmp 0x42f46
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rdi
addq $0x14c0, %rdi           # imm = 0x14C0
addq $0x20, %rdi
leaq 0x1ceedb(%rip), %rsi    # 0x2114fb
callq 0x44930
testb $0x1, %al
jne 0x4262e
jmp 0x42a83
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x1, 0x1700(%rax)
jne 0x42713
movq -0x390(%rbp), %rcx
movq 0x8(%rcx), %rax
movl 0x1620(%rax), %eax
movq 0x8(%rcx), %rcx
xorl %edx, %edx
divl 0x16fc(%rcx)
cmpl $0x2, %eax
jae 0x42713
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x460(%rbp)
leaq -0x219(%rbp), %rdi
movq %rdi, -0x458(%rbp)
callq 0x30a70
movq -0x458(%rbp), %rdx
leaq 0x1921aa(%rip), %rsi    # 0x1d4849
leaq -0x218(%rbp), %rdi
callq 0x44470
jmp 0x426ad
movq -0x460(%rbp), %rdi
leaq -0x218(%rbp), %rsi
callq 0xeada0
jmp 0x426c2
leaq -0x218(%rbp), %rdi
callq 0x311e8
leaq -0x219(%rbp), %rdi
callq 0x311c0
jmp 0x42713
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x42702
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x218(%rbp), %rdi
callq 0x311e8
leaq -0x219(%rbp), %rdi
callq 0x311c0
jmp 0x42f46
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x2, 0x1700(%rax)
jne 0x427f8
movq -0x390(%rbp), %rcx
movq 0x8(%rcx), %rax
movl 0x1620(%rax), %eax
movq 0x8(%rcx), %rcx
xorl %edx, %edx
divl 0x16fc(%rcx)
cmpl $0x4, %eax
jae 0x427f8
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x470(%rbp)
leaq -0x241(%rbp), %rdi
movq %rdi, -0x468(%rbp)
callq 0x30a70
movq -0x468(%rbp), %rdx
leaq 0x19210c(%rip), %rsi    # 0x1d4890
leaq -0x240(%rbp), %rdi
callq 0x44470
jmp 0x42792
movq -0x470(%rbp), %rdi
leaq -0x240(%rbp), %rsi
callq 0xeada0
jmp 0x427a7
leaq -0x240(%rbp), %rdi
callq 0x311e8
leaq -0x241(%rbp), %rdi
callq 0x311c0
jmp 0x427f8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x427e7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x240(%rbp), %rdi
callq 0x311e8
leaq -0x241(%rbp), %rdi
callq 0x311c0
jmp 0x42f46
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x3, 0x1700(%rax)
jne 0x428dd
movq -0x390(%rbp), %rcx
movq 0x8(%rcx), %rax
movl 0x1620(%rax), %eax
movq 0x8(%rcx), %rcx
xorl %edx, %edx
divl 0x16fc(%rcx)
cmpl $0x3, %eax
jae 0x428dd
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x480(%rbp)
leaq -0x269(%rbp), %rdi
movq %rdi, -0x478(%rbp)
callq 0x30a70
movq -0x478(%rbp), %rdx
leaq 0x19206e(%rip), %rsi    # 0x1d48d7
leaq -0x268(%rbp), %rdi
callq 0x44470
jmp 0x42877
movq -0x480(%rbp), %rdi
leaq -0x268(%rbp), %rsi
callq 0xeada0
jmp 0x4288c
leaq -0x268(%rbp), %rdi
callq 0x311e8
leaq -0x269(%rbp), %rdi
callq 0x311c0
jmp 0x428dd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x428cc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x268(%rbp), %rdi
callq 0x311e8
leaq -0x269(%rbp), %rdi
callq 0x311c0
jmp 0x42f46
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x4, 0x1700(%rax)
jne 0x429c2
movq -0x390(%rbp), %rcx
movq 0x8(%rcx), %rax
movl 0x1620(%rax), %eax
movq 0x8(%rcx), %rcx
xorl %edx, %edx
divl 0x16fc(%rcx)
cmpl $0x5, %eax
jae 0x429c2
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x490(%rbp)
leaq -0x291(%rbp), %rdi
movq %rdi, -0x488(%rbp)
callq 0x30a70
movq -0x488(%rbp), %rdx
leaq 0x191fd0(%rip), %rsi    # 0x1d491e
leaq -0x290(%rbp), %rdi
callq 0x44470
jmp 0x4295c
movq -0x490(%rbp), %rdi
leaq -0x290(%rbp), %rsi
callq 0xeada0
jmp 0x42971
leaq -0x290(%rbp), %rdi
callq 0x311e8
leaq -0x291(%rbp), %rdi
callq 0x311c0
jmp 0x429c2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x429b1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x290(%rbp), %rdi
callq 0x311e8
leaq -0x291(%rbp), %rdi
callq 0x311c0
jmp 0x42f46
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x0, 0x16fc(%rax)
jne 0x42a81
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x4a0(%rbp)
leaq -0x2b9(%rbp), %rdi
movq %rdi, -0x498(%rbp)
callq 0x30a70
movq -0x498(%rbp), %rdx
leaq 0x191f58(%rip), %rsi    # 0x1d4965
leaq -0x2b8(%rbp), %rdi
callq 0x44470
jmp 0x42a1b
movq -0x4a0(%rbp), %rdi
leaq -0x2b8(%rbp), %rsi
callq 0xeada0
jmp 0x42a30
leaq -0x2b8(%rbp), %rdi
callq 0x311e8
leaq -0x2b9(%rbp), %rdi
callq 0x311c0
jmp 0x42a81
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x42a70
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x2b8(%rbp), %rdi
callq 0x311e8
leaq -0x2b9(%rbp), %rdi
callq 0x311c0
jmp 0x42f46
jmp 0x42a83
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rdi
addq $0x14c0, %rdi           # imm = 0x14C0
addq $0x20, %rdi
leaq 0x19efa2(%rip), %rsi    # 0x1e1a42
callq 0x44930
testb $0x1, %al
jne 0x42aae
jmp 0x42b9d
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rdi
addq $0x14c0, %rdi           # imm = 0x14C0
addq $0x20, %rdi
leaq 0x191233(%rip), %rsi    # 0x1d3cfe
callq 0x44930
testb $0x1, %al
jne 0x42ad9
jmp 0x42b9b
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rax
cmpq $0x0, 0x1680(%rax)
jne 0x42b99
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x4b0(%rbp)
leaq -0x2e1(%rbp), %rdi
movq %rdi, -0x4a8(%rbp)
callq 0x30a70
movq -0x4a8(%rbp), %rdx
leaq 0x191eb0(%rip), %rsi    # 0x1d49d5
leaq -0x2e0(%rbp), %rdi
callq 0x44470
jmp 0x42b33
movq -0x4b0(%rbp), %rdi
leaq -0x2e0(%rbp), %rsi
callq 0xeada0
jmp 0x42b48
leaq -0x2e0(%rbp), %rdi
callq 0x311e8
leaq -0x2e1(%rbp), %rdi
callq 0x311c0
jmp 0x42b99
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x42b88
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x2e0(%rbp), %rdi
callq 0x311e8
leaq -0x2e1(%rbp), %rdi
callq 0x311c0
jmp 0x42f46
jmp 0x42b9b
jmp 0x42b9d
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rdi
addq $0x14c0, %rdi           # imm = 0x14C0
addq $0x20, %rdi
leaq 0x191827(%rip), %rsi    # 0x1d43e1
callq 0x44930
testb $0x1, %al
jne 0x42bc8
jmp 0x42d7d
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rcx
movl 0x1620(%rcx), %ecx
movl %ecx, -0x4b4(%rbp)
movq 0x8(%rax), %rdi
addq $0x14c0, %rdi           # imm = 0x14C0
addq $0x100, %rdi            # imm = 0x100
xorl %eax, %eax
movl %eax, %esi
callq 0x45b40
movq (%rax), %rdi
callq 0x45b60
movl %eax, %ecx
movl -0x4b4(%rbp), %eax
addl $0x1, %ecx
cmpl %ecx, %eax
jae 0x42cbc
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x4c8(%rbp)
leaq -0x309(%rbp), %rdi
movq %rdi, -0x4c0(%rbp)
callq 0x30a70
movq -0x4c0(%rbp), %rdx
leaq 0x191dd6(%rip), %rsi    # 0x1d4a1e
leaq -0x308(%rbp), %rdi
callq 0x44470
jmp 0x42c56
movq -0x4c8(%rbp), %rdi
leaq -0x308(%rbp), %rsi
callq 0xeada0
jmp 0x42c6b
leaq -0x308(%rbp), %rdi
callq 0x311e8
leaq -0x309(%rbp), %rdi
callq 0x311c0
jmp 0x42cbc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x42cab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x308(%rbp), %rdi
callq 0x311e8
leaq -0x309(%rbp), %rdi
callq 0x311c0
jmp 0x42f46
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rax
testb $0x1, 0x1618(%rax)
je 0x42d7b
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x4d8(%rbp)
leaq -0x331(%rbp), %rdi
movq %rdi, -0x4d0(%rbp)
callq 0x30a70
movq -0x4d0(%rbp), %rdx
leaq 0x191da8(%rip), %rsi    # 0x1d4aaf
leaq -0x330(%rbp), %rdi
callq 0x44470
jmp 0x42d15
movq -0x4d8(%rbp), %rdi
leaq -0x330(%rbp), %rsi
callq 0xeada0
jmp 0x42d2a
leaq -0x330(%rbp), %rdi
callq 0x311e8
leaq -0x331(%rbp), %rdi
callq 0x311c0
jmp 0x42d7b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x42d6a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x330(%rbp), %rdi
callq 0x311e8
leaq -0x331(%rbp), %rdi
callq 0x311c0
jmp 0x42f46
jmp 0x42d7d
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rdi
addq $0x14c0, %rdi           # imm = 0x14C0
addq $0x20, %rdi
leaq 0x191644(%rip), %rsi    # 0x1d43de
callq 0x44930
testb $0x1, %al
jne 0x42da8
jmp 0x42e81
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rax
testb $0x1, 0x1618(%rax)
je 0x42e7f
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x0, 0x161c(%rax)
jne 0x42e7f
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x4e8(%rbp)
leaq -0x359(%rbp), %rdi
movq %rdi, -0x4e0(%rbp)
callq 0x30a70
movq -0x4e0(%rbp), %rdx
leaq 0x191cef(%rip), %rsi    # 0x1d4afa
leaq -0x358(%rbp), %rdi
callq 0x44470
jmp 0x42e19
movq -0x4e8(%rbp), %rdi
leaq -0x358(%rbp), %rsi
callq 0xeada0
jmp 0x42e2e
leaq -0x358(%rbp), %rdi
callq 0x311e8
leaq -0x359(%rbp), %rdi
callq 0x311c0
jmp 0x42e7f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x42e6e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x358(%rbp), %rdi
callq 0x311e8
leaq -0x359(%rbp), %rdi
callq 0x311c0
jmp 0x42f46
jmp 0x42e81
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0xec880
testb $0x1, %al
jne 0x42f3d
movq -0x390(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x4f8(%rbp)
leaq -0x381(%rbp), %rdi
movq %rdi, -0x4f0(%rbp)
callq 0x30a70
movq -0x4f0(%rbp), %rdx
leaq 0x191c89(%rip), %rsi    # 0x1d4b55
leaq -0x380(%rbp), %rdi
callq 0x44470
jmp 0x42eda
movq -0x4f8(%rbp), %rdi
leaq -0x380(%rbp), %rsi
callq 0xeada0
jmp 0x42eef
leaq -0x380(%rbp), %rdi
callq 0x311e8
leaq -0x381(%rbp), %rdi
callq 0x311c0
jmp 0x42f3d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x42f2f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x380(%rbp), %rdi
callq 0x311e8
leaq -0x381(%rbp), %rdi
callq 0x311c0
jmp 0x42f46
addq $0x500, %rsp            # imm = 0x500
popq %rbp
retq
movq -0x38(%rbp), %rdi
callq 0x30170
nop