// File: krig[P]easing/test_easing.cpp
// Function: void asciiplot<main::$_0>(char const*, main::$_0, int, int)
void asciiplot(const char* name, Fn fn, int w, int h) {
	vector<char> line;
	vector<float> values;
	float step_x = 1.f / (float) w;
	float step_y = 1.f / (float) h;
	float pre_v = 1.f;
	float post_v = 0.f;

	{
		for (int i = 0; i < w; ++i) {
			values.push_back(fn((float)i * step_x));
			if (values.back() < post_v)
				post_v = values.back();
			if (values.back() > pre_v)
				pre_v = values.back();
		}
	}

	if (pre_v > 1.f) {
		int n = (int)((float)h * (pre_v - 1.f) + 1.f);
		for (int y = 0; y < n; ++y) {
			float fy = 1.f + (float)(n - y) / (float) h;
			plotline(fn, ' ', ' ', fy, 0, w, step_x, values, line);
		}
	}

	for (int y = h; y >= 0; --y) {
		float fy = (float) y / (float) h;
		plotline(fn, '|', ' ', fy, 0, w, step_x, values, line);
	}
	if (post_v < 0.f) {
		int n = (int)((float)h * -post_v + 1.f);
		for (int y = 0; y < n; ++y) {
			float fy = (float)(-1 - y) / (float) h;
			plotline(fn, y == 0 ? '+' : ' ', y == 0 ? '-' : ' ', fy, 0, w, step_x, values, line);
		}
	} else {
		cout << '+';
		for (int i = 0; i < w; ++i)
			cout << '-';
		cout << endl;
	}
	for (int i = 0; i < (w - strlen(name))/2; ++i)
		cout << ' ';
	cout << name << endl << endl;

}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xd0, %rsp
movq %rdi, -0x10(%rbp)
movl %esi, -0x14(%rbp)
movl %edx, -0x18(%rbp)
leaq -0x30(%rbp), %rdi
callq 0xd780
leaq -0x48(%rbp), %rdi
callq 0xd7a0
cvtsi2ssl -0x14(%rbp), %xmm1
movss 0xfa10(%rip), %xmm0     # 0x11004
divss %xmm1, %xmm0
movss %xmm0, -0x4c(%rbp)
cvtsi2ssl -0x18(%rbp), %xmm1
movss 0xf9fa(%rip), %xmm0     # 0x11004
divss %xmm1, %xmm0
movss %xmm0, -0x50(%rbp)
movss 0xf9e9(%rip), %xmm0     # 0x11004
movss %xmm0, -0x54(%rbp)
xorps %xmm0, %xmm0
movss %xmm0, -0x58(%rbp)
movl $0x0, -0x5c(%rbp)
movl -0x5c(%rbp), %eax
cmpl -0x14(%rbp), %eax
jge 0x16fb
cvtsi2ssl -0x5c(%rbp), %xmm0
movss -0x4c(%rbp), %xmm1
mulss %xmm1, %xmm0
leaq -0x1(%rbp), %rdi
callq 0x9b70
movss %xmm0, -0xa4(%rbp)
jmp 0x165c
movss -0xa4(%rbp), %xmm0
movss %xmm0, -0x60(%rbp)
leaq -0x48(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0xd7c0
jmp 0x1678
leaq -0x48(%rbp), %rdi
callq 0xd7f0
movss (%rax), %xmm1
movss -0x58(%rbp), %xmm0
ucomiss %xmm1, %xmm0
jbe 0x16c6
leaq -0x48(%rbp), %rdi
callq 0xd7f0
movss (%rax), %xmm0
movss %xmm0, -0x58(%rbp)
jmp 0x16c6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x48(%rbp), %rdi
callq 0xd830
leaq -0x30(%rbp), %rdi
callq 0xd890
jmp 0x1a01
leaq -0x48(%rbp), %rdi
callq 0xd7f0
movss (%rax), %xmm0
ucomiss -0x54(%rbp), %xmm0
jbe 0x16eb
leaq -0x48(%rbp), %rdi
callq 0xd7f0
movss (%rax), %xmm0
movss %xmm0, -0x54(%rbp)
jmp 0x16ed
movl -0x5c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x5c(%rbp)
jmp 0x162f
movss -0x54(%rbp), %xmm0
movss 0xf8fc(%rip), %xmm1     # 0x11004
ucomiss %xmm1, %xmm0
jbe 0x17a7
cvtsi2ssl -0x18(%rbp), %xmm0
movss -0x54(%rbp), %xmm1
movss 0xf8e1(%rip), %xmm2     # 0x11004
subss %xmm2, %xmm1
mulss %xmm1, %xmm0
movss 0xf8d1(%rip), %xmm1     # 0x11004
addss %xmm1, %xmm0
cvttss2si %xmm0, %eax
movl %eax, -0x70(%rbp)
movl $0x0, -0x74(%rbp)
movl -0x74(%rbp), %eax
cmpl -0x70(%rbp), %eax
jge 0x17a5
movl -0x70(%rbp), %eax
movl -0x74(%rbp), %ecx
subl %ecx, %eax
cvtsi2ss %eax, %xmm0
cvtsi2ssl -0x18(%rbp), %xmm1
divss %xmm1, %xmm0
movss 0xf89a(%rip), %xmm1     # 0x11004
addss %xmm1, %xmm0
movss %xmm0, -0x78(%rbp)
movss -0x78(%rbp), %xmm0
movl -0x14(%rbp), %ecx
movss -0x4c(%rbp), %xmm1
movl $0x20, %esi
xorl %edx, %edx
leaq -0x48(%rbp), %r8
leaq -0x30(%rbp), %r9
movl %esi, %edi
callq 0x9ba0
jmp 0x1798
jmp 0x179a
movl -0x74(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x74(%rbp)
jmp 0x1745
jmp 0x17a7
movl -0x18(%rbp), %eax
movl %eax, -0x80(%rbp)
cmpl $0x0, -0x80(%rbp)
jl 0x1801
cvtsi2ssl -0x80(%rbp), %xmm0
cvtsi2ssl -0x18(%rbp), %xmm1
divss %xmm1, %xmm0
movss %xmm0, -0x84(%rbp)
movss -0x84(%rbp), %xmm0
movl -0x14(%rbp), %ecx
movss -0x4c(%rbp), %xmm1
movl $0x7c, %edi
movl $0x20, %esi
xorl %edx, %edx
leaq -0x48(%rbp), %r8
leaq -0x30(%rbp), %r9
callq 0x9ba0
jmp 0x17f4
jmp 0x17f6
movl -0x80(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x80(%rbp)
jmp 0x17ad
xorps %xmm0, %xmm0
ucomiss -0x58(%rbp), %xmm0
jbe 0x18c9
cvtsi2ssl -0x18(%rbp), %xmm0
movss -0x58(%rbp), %xmm1
movd %xmm1, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm1
mulss %xmm1, %xmm0
movss 0xf7d3(%rip), %xmm1     # 0x11004
addss %xmm1, %xmm0
cvttss2si %xmm0, %eax
movl %eax, -0x8c(%rbp)
movl $0x0, -0x90(%rbp)
movl -0x90(%rbp), %eax
cmpl -0x8c(%rbp), %eax
jge 0x18c7
movl -0x90(%rbp), %eax
notl %eax
cvtsi2ss %eax, %xmm0
cvtsi2ssl -0x18(%rbp), %xmm1
divss %xmm1, %xmm0
movss %xmm0, -0x94(%rbp)
movl -0x90(%rbp), %eax
testl %eax, %eax
movss -0x94(%rbp), %xmm0
movl -0x14(%rbp), %ecx
movss -0x4c(%rbp), %xmm1
movl $0x2b, %eax
movl $0x20, %esi
movl %esi, %edi
cmovel %eax, %edi
movl $0x2d, %eax
cmovel %eax, %esi
xorl %edx, %edx
leaq -0x48(%rbp), %r8
leaq -0x30(%rbp), %r9
callq 0x9ba0
jmp 0x18b4
jmp 0x18b6
movl -0x90(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x90(%rbp)
jmp 0x1849
jmp 0x192e
movq 0x13708(%rip), %rdi     # 0x14fd8
movl $0x2b, %esi
callq 0x1110
jmp 0x18dc
movl $0x0, -0x9c(%rbp)
movl -0x9c(%rbp), %eax
cmpl -0x14(%rbp), %eax
jge 0x1917
movq 0x136e0(%rip), %rdi     # 0x14fd8
movl $0x2d, %esi
callq 0x1110
jmp 0x1904
jmp 0x1906
movl -0x9c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x9c(%rbp)
jmp 0x18e6
movq 0x136ba(%rip), %rdi     # 0x14fd8
movq 0x136a3(%rip), %rsi     # 0x14fc8
callq 0x1100
jmp 0x192c
jmp 0x192e
movl $0x0, -0xa0(%rbp)
movslq -0xa0(%rbp), %rax
movq %rax, -0xb0(%rbp)
movslq -0x14(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq -0x10(%rbp), %rdi
callq 0x1080
movq -0xb8(%rbp), %rcx
movq %rax, %rdx
movq -0xb0(%rbp), %rax
subq %rdx, %rcx
shrq %rcx
cmpq %rcx, %rax
jae 0x199c
movq 0x1365b(%rip), %rdi     # 0x14fd8
movl $0x20, %esi
callq 0x1110
jmp 0x1989
jmp 0x198b
movl -0xa0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xa0(%rbp)
jmp 0x1938
movq -0x10(%rbp), %rsi
movq 0x13631(%rip), %rdi     # 0x14fd8
callq 0x10e0
movq %rax, -0xc0(%rbp)
jmp 0x19b5
movq -0xc0(%rbp), %rdi
movq 0x13605(%rip), %rsi     # 0x14fc8
callq 0x1100
movq %rax, -0xc8(%rbp)
jmp 0x19d1
movq -0xc8(%rbp), %rdi
movq 0x135e9(%rip), %rsi     # 0x14fc8
callq 0x1100
jmp 0x19e6
leaq -0x48(%rbp), %rdi
callq 0xd830
leaq -0x30(%rbp), %rdi
callq 0xd890
addq $0xd0, %rsp
popq %rbp
retq
movq -0x68(%rbp), %rdi
callq 0x1160
nopw (%rax,%rax)