	.file	"97011758.c"
	.intel_syntax noprefix
	.text
	.globl	channels
	.bss
	.align 4
	.type	channels, @object
	.size	channels, 4
channels:
	.zero	4
	.globl	g_argv
	.align 8
	.type	g_argv, @object
	.size	g_argv, 8
g_argv:
	.zero	8
	.data
	.type	VERSION, @object
	.size	VERSION, 6
VERSION:
	.string	"0.1.0"
	.globl	defaultpins
	.align 8
	.type	defaultpins, @object
	.size	defaultpins, 8
defaultpins:
	.ascii	"\004\021\022\025\026\027\030\031"
	.local	pin2gpio
	.comm	pin2gpio,8,8
	.globl	page_map
	.bss
	.align 8
	.type	page_map, @object
	.size	page_map, 8
page_map:
	.zero	8
	.local	virtbase
	.comm	virtbase,8,8
	.local	pwm_reg
	.comm	pwm_reg,8,8
	.local	pcm_reg
	.comm	pcm_reg,8,8
	.local	clk_reg
	.comm	clk_reg,8,8
	.local	dma_reg
	.comm	dma_reg,8,8
	.local	gpio_reg
	.comm	gpio_reg,8,8
	.local	delay_hw
	.comm	delay_hw,4,4
	.local	invert_mode
	.comm	invert_mode,4,4
	.local	channel_pwm
	.comm	channel_pwm,8,8
	.text
	.type	gpio_set_mode, @function
gpio_set_mode:
.LFB6:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	mov	DWORD PTR -20[rbp], edi
	mov	DWORD PTR -24[rbp], esi
	mov	rdx, QWORD PTR gpio_reg[rip]
	mov	eax, DWORD PTR -20[rbp]
	mov	ecx, eax
	mov	eax, 3435973837
	imul	rax, rcx
	shr	rax, 32
	shr	eax, 3
	mov	eax, eax
	sal	rax, 2
	add	rax, rdx
	mov	eax, DWORD PTR [rax]
	mov	DWORD PTR -4[rbp], eax
	mov	ecx, DWORD PTR -20[rbp]
	mov	edx, ecx
	mov	eax, 3435973837
	imul	rax, rdx
	shr	rax, 32
	mov	edx, eax
	shr	edx, 3
	mov	eax, edx
	sal	eax, 2
	add	eax, edx
	add	eax, eax
	sub	ecx, eax
	mov	edx, ecx
	mov	eax, edx
	add	eax, eax
	add	eax, edx
	mov	edx, 7
	mov	ecx, eax
	sal	edx, cl
	mov	eax, edx
	not	eax
	and	DWORD PTR -4[rbp], eax
	mov	ecx, DWORD PTR -20[rbp]
	mov	edx, ecx
	mov	eax, 3435973837
	imul	rax, rdx
	shr	rax, 32
	mov	edx, eax
	shr	edx, 3
	mov	eax, edx
	sal	eax, 2
	add	eax, edx
	add	eax, eax
	sub	ecx, eax
	mov	edx, ecx
	mov	eax, edx
	add	eax, eax
	add	eax, edx
	mov	edx, DWORD PTR -24[rbp]
	mov	ecx, eax
	sal	edx, cl
	mov	eax, edx
	or	DWORD PTR -4[rbp], eax
	mov	rdx, QWORD PTR gpio_reg[rip]
	mov	eax, DWORD PTR -20[rbp]
	mov	ecx, eax
	mov	eax, 3435973837
	imul	rax, rcx
	shr	rax, 32
	shr	eax, 3
	mov	eax, eax
	sal	rax, 2
	add	rdx, rax
	mov	eax, DWORD PTR -4[rbp]
	mov	DWORD PTR [rdx], eax
	nop
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE6:
	.size	gpio_set_mode, .-gpio_set_mode
	.type	gpio_set, @function
gpio_set:
.LFB7:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	mov	DWORD PTR -4[rbp], edi
	mov	DWORD PTR -8[rbp], esi
	cmp	DWORD PTR -8[rbp], 0
	je	.L3
	mov	eax, DWORD PTR -4[rbp]
	mov	edx, 1
	mov	ecx, eax
	sal	edx, cl
	mov	rax, QWORD PTR gpio_reg[rip]
	add	rax, 28
	mov	DWORD PTR [rax], edx
	jmp	.L5
.L3:
	mov	eax, DWORD PTR -4[rbp]
	mov	edx, 1
	mov	ecx, eax
	sal	edx, cl
	mov	rax, QWORD PTR gpio_reg[rip]
	add	rax, 40
	mov	DWORD PTR [rax], edx
.L5:
	nop
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE7:
	.size	gpio_set, .-gpio_set
	.type	udelay, @function
udelay:
.LFB8:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 48
	mov	DWORD PTR -36[rbp], edi
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR -8[rbp], rax
	xor	eax, eax
	mov	QWORD PTR -32[rbp], 0
	mov	eax, DWORD PTR -36[rbp]
	imul	eax, eax, 1000
	cdqe
	mov	QWORD PTR -24[rbp], rax
	lea	rax, -32[rbp]
	mov	esi, 0
	mov	rdi, rax
	call	nanosleep@PLT
	nop
	mov	rax, QWORD PTR -8[rbp]
	sub	rax, QWORD PTR fs:40
	je	.L7
	call	__stack_chk_fail@PLT
.L7:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE8:
	.size	udelay, .-udelay
	.section	.rodata
.LC1:
	.string	"/dev/pi-blaster"
	.text
	.type	terminate, @function
terminate:
.LFB9:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	DWORD PTR -20[rbp], edi
	mov	rax, QWORD PTR dma_reg[rip]
	test	rax, rax
	je	.L9
	mov	rax, QWORD PTR virtbase[rip]
	test	rax, rax
	je	.L9
	mov	DWORD PTR -4[rbp], 0
	jmp	.L10
.L11:
	mov	rdx, QWORD PTR channel_pwm[rip]
	mov	eax, DWORD PTR -4[rbp]
	cdqe
	sal	rax, 2
	add	rax, rdx
	pxor	xmm0, xmm0
	movss	DWORD PTR [rax], xmm0
	add	DWORD PTR -4[rbp], 1
.L10:
	mov	eax, DWORD PTR channels[rip]
	cmp	DWORD PTR -4[rbp], eax
	jl	.L11
	mov	eax, 0
	call	update_pwm
	mov	edi, 10000
	call	udelay
	mov	rax, QWORD PTR dma_reg[rip]
	mov	DWORD PTR [rax], -2147483648
	mov	edi, 10
	call	udelay
.L9:
	lea	rdi, .LC1[rip]
	call	unlink@PLT
	mov	edi, 1
	call	exit@PLT
	.cfi_endproc
.LFE9:
	.size	terminate, .-terminate
	.type	fatal, @function
fatal:
.LFB10:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 224
	mov	QWORD PTR -216[rbp], rdi
	mov	QWORD PTR -168[rbp], rsi
	mov	QWORD PTR -160[rbp], rdx
	mov	QWORD PTR -152[rbp], rcx
	mov	QWORD PTR -144[rbp], r8
	mov	QWORD PTR -136[rbp], r9
	test	al, al
	je	.L13
	movaps	XMMWORD PTR -128[rbp], xmm0
	movaps	XMMWORD PTR -112[rbp], xmm1
	movaps	XMMWORD PTR -96[rbp], xmm2
	movaps	XMMWORD PTR -80[rbp], xmm3
	movaps	XMMWORD PTR -64[rbp], xmm4
	movaps	XMMWORD PTR -48[rbp], xmm5
	movaps	XMMWORD PTR -32[rbp], xmm6
	movaps	XMMWORD PTR -16[rbp], xmm7
.L13:
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR -184[rbp], rax
	xor	eax, eax
	mov	DWORD PTR -208[rbp], 8
	mov	DWORD PTR -204[rbp], 48
	lea	rax, 16[rbp]
	mov	QWORD PTR -200[rbp], rax
	lea	rax, -176[rbp]
	mov	QWORD PTR -192[rbp], rax
	mov	rax, QWORD PTR stderr[rip]
	lea	rdx, -208[rbp]
	mov	rcx, QWORD PTR -216[rbp]
	mov	rsi, rcx
	mov	rdi, rax
	call	vfprintf@PLT
	mov	edi, 0
	call	terminate
	nop
	mov	rax, QWORD PTR -184[rbp]
	sub	rax, QWORD PTR fs:40
	je	.L14
	call	__stack_chk_fail@PLT
.L14:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE10:
	.size	fatal, .-fatal
	.type	mem_virt_to_phys, @function
mem_virt_to_phys:
.LFB11:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	mov	QWORD PTR -24[rbp], rdi
	mov	rdx, QWORD PTR virtbase[rip]
	mov	rax, QWORD PTR -24[rbp]
	sub	rax, rdx
	mov	DWORD PTR -4[rbp], eax
	mov	rdx, QWORD PTR page_map[rip]
	mov	eax, DWORD PTR -4[rbp]
	shr	eax, 12
	mov	eax, eax
	sal	rax, 4
	add	rax, rdx
	mov	edx, DWORD PTR 8[rax]
	mov	eax, DWORD PTR -4[rbp]
	and	eax, 4095
	add	eax, edx
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE11:
	.size	mem_virt_to_phys, .-mem_virt_to_phys
	.section	.rodata
.LC2:
	.string	"/dev/mem"
	.align 8
.LC3:
	.string	"pi-blaster: Failed to open /dev/mem: %m\n"
	.align 8
.LC4:
	.string	"pi-blaster: Failed to map peripheral at 0x%08x: %m\n"
	.text
	.type	map_peripheral, @function
map_peripheral:
.LFB12:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	DWORD PTR -20[rbp], edi
	mov	DWORD PTR -24[rbp], esi
	mov	esi, 1052674
	lea	rdi, .LC2[rip]
	mov	eax, 0
	call	open@PLT
	mov	DWORD PTR -12[rbp], eax
	cmp	DWORD PTR -12[rbp], 0
	jns	.L18
	lea	rdi, .LC3[rip]
	mov	eax, 0
	call	fatal
.L18:
	mov	ecx, DWORD PTR -20[rbp]
	mov	eax, DWORD PTR -24[rbp]
	mov	edx, DWORD PTR -12[rbp]
	mov	r9, rcx
	mov	r8d, edx
	mov	ecx, 1
	mov	edx, 3
	mov	rsi, rax
	mov	edi, 0
	call	mmap@PLT
	mov	QWORD PTR -8[rbp], rax
	cmp	QWORD PTR -8[rbp], -1
	jne	.L19
	mov	eax, DWORD PTR -20[rbp]
	mov	esi, eax
	lea	rdi, .LC4[rip]
	mov	eax, 0
	call	fatal
.L19:
	mov	eax, DWORD PTR -12[rbp]
	mov	edi, eax
	call	close@PLT
	mov	rax, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE12:
	.size	map_peripheral, .-map_peripheral
	.type	set_pwm, @function
set_pwm:
.LFB13:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 16
	mov	DWORD PTR -4[rbp], edi
	movss	DWORD PTR -8[rbp], xmm0
	mov	rdx, QWORD PTR channel_pwm[rip]
	mov	eax, DWORD PTR -4[rbp]
	cdqe
	sal	rax, 2
	add	rax, rdx
	movss	xmm0, DWORD PTR -8[rbp]
	movss	DWORD PTR [rax], xmm0
	mov	eax, 0
	call	update_pwm
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE13:
	.size	set_pwm, .-set_pwm
	.type	update_pwm, @function
update_pwm:
.LFB14:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	mov	DWORD PTR -16[rbp], 2116026408
	mov	DWORD PTR -12[rbp], 2116026396
	mov	rax, QWORD PTR virtbase[rip]
	mov	QWORD PTR -8[rbp], rax
	mov	eax, DWORD PTR invert_mode[rip]
	test	eax, eax
	je	.L23
	mov	rax, QWORD PTR -8[rbp]
	mov	edx, DWORD PTR -16[rbp]
	mov	DWORD PTR 4008[rax], edx
	jmp	.L24
.L23:
	mov	rax, QWORD PTR -8[rbp]
	mov	edx, DWORD PTR -12[rbp]
	mov	DWORD PTR 4008[rax], edx
.L24:
	mov	DWORD PTR -20[rbp], 0
	mov	DWORD PTR -28[rbp], 0
	jmp	.L25
.L28:
	mov	rdx, QWORD PTR channel_pwm[rip]
	mov	eax, DWORD PTR -28[rbp]
	cdqe
	sal	rax, 2
	add	rax, rdx
	movss	xmm0, DWORD PTR [rax]
	pxor	xmm1, xmm1
	comiss	xmm0, xmm1
	jbe	.L26
	mov	rdx, QWORD PTR pin2gpio[rip]
	mov	eax, DWORD PTR -28[rbp]
	cdqe
	add	rax, rdx
	movzx	eax, BYTE PTR [rax]
	movzx	eax, al
	mov	edx, 1
	mov	ecx, eax
	sal	edx, cl
	mov	eax, edx
	or	DWORD PTR -20[rbp], eax
.L26:
	add	DWORD PTR -28[rbp], 1
.L25:
	mov	eax, DWORD PTR channels[rip]
	cmp	DWORD PTR -28[rbp], eax
	jl	.L28
	mov	rax, QWORD PTR -8[rbp]
	mov	edx, DWORD PTR -20[rbp]
	mov	DWORD PTR [rax], edx
	mov	DWORD PTR -24[rbp], 1
	jmp	.L29
.L36:
	mov	eax, DWORD PTR invert_mode[rip]
	test	eax, eax
	je	.L30
	mov	eax, DWORD PTR -24[rbp]
	add	eax, eax
	mov	rdx, QWORD PTR -8[rbp]
	cdqe
	add	rax, 125
	sal	rax, 5
	add	rax, rdx
	lea	rdx, 8[rax]
	mov	eax, DWORD PTR -12[rbp]
	mov	DWORD PTR [rdx], eax
	jmp	.L31
.L30:
	mov	eax, DWORD PTR -24[rbp]
	add	eax, eax
	mov	rdx, QWORD PTR -8[rbp]
	cdqe
	add	rax, 125
	sal	rax, 5
	add	rax, rdx
	lea	rdx, 8[rax]
	mov	eax, DWORD PTR -16[rbp]
	mov	DWORD PTR [rdx], eax
.L31:
	mov	DWORD PTR -20[rbp], 0
	mov	DWORD PTR -28[rbp], 0
	jmp	.L32
.L35:
	pxor	xmm0, xmm0
	cvtsi2ss	xmm0, DWORD PTR -24[rbp]
	movss	xmm1, DWORD PTR .LC5[rip]
	divss	xmm0, xmm1
	mov	rdx, QWORD PTR channel_pwm[rip]
	mov	eax, DWORD PTR -28[rbp]
	cdqe
	sal	rax, 2
	add	rax, rdx
	movss	xmm1, DWORD PTR [rax]
	comiss	xmm0, xmm1
	jbe	.L33
	mov	rdx, QWORD PTR pin2gpio[rip]
	mov	eax, DWORD PTR -28[rbp]
	cdqe
	add	rax, rdx
	movzx	eax, BYTE PTR [rax]
	movzx	eax, al
	mov	edx, 1
	mov	ecx, eax
	sal	edx, cl
	mov	eax, edx
	or	DWORD PTR -20[rbp], eax
.L33:
	add	DWORD PTR -28[rbp], 1
.L32:
	mov	eax, DWORD PTR channels[rip]
	cmp	DWORD PTR -28[rbp], eax
	jl	.L35
	mov	rax, QWORD PTR -8[rbp]
	mov	edx, DWORD PTR -24[rbp]
	movsx	rdx, edx
	mov	ecx, DWORD PTR -20[rbp]
	mov	DWORD PTR [rax+rdx*4], ecx
	add	DWORD PTR -24[rbp], 1
.L29:
	cmp	DWORD PTR -24[rbp], 999
	jle	.L36
	nop
	nop
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE14:
	.size	update_pwm, .-update_pwm
	.section	.rodata
	.align 8
.LC6:
	.string	"pi-blaster: Failed to malloc page_map: %m\n"
.LC7:
	.string	"/proc/%d/pagemap"
	.align 8
.LC8:
	.string	"pi-blaster: Failed to open %s: %m\n"
	.align 8
.LC9:
	.string	"pi-blaster: Failed to seek on %s: %m\n"
	.align 8
.LC10:
	.string	"pi-blaster: Failed to read %s: %m\n"
	.align 8
.LC11:
	.string	"pi-blaster: Page %d not present (pfn 0x%016llx)\n"
	.text
	.type	make_pagemap, @function
make_pagemap:
.LFB15:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 112
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR -8[rbp], rax
	xor	eax, eax
	mov	edi, 272
	call	malloc@PLT
	mov	QWORD PTR page_map[rip], rax
	mov	rax, QWORD PTR page_map[rip]
	test	rax, rax
	jne	.L40
	lea	rdi, .LC6[rip]
	mov	eax, 0
	call	fatal
.L40:
	mov	esi, 2
	lea	rdi, .LC2[rip]
	mov	eax, 0
	call	open@PLT
	mov	DWORD PTR -100[rbp], eax
	cmp	DWORD PTR -100[rbp], 0
	jns	.L41
	lea	rdi, .LC3[rip]
	mov	eax, 0
	call	fatal
.L41:
	call	getpid@PLT
	mov	DWORD PTR -96[rbp], eax
	mov	edx, DWORD PTR -96[rbp]
	lea	rax, -80[rbp]
	lea	rsi, .LC7[rip]
	mov	rdi, rax
	mov	eax, 0
	call	sprintf@PLT
	lea	rax, -80[rbp]
	mov	esi, 0
	mov	rdi, rax
	mov	eax, 0
	call	open@PLT
	mov	DWORD PTR -92[rbp], eax
	cmp	DWORD PTR -92[rbp], 0
	jns	.L42
	lea	rax, -80[rbp]
	mov	rsi, rax
	lea	rdi, .LC8[rip]
	mov	eax, 0
	call	fatal
.L42:
	mov	rax, QWORD PTR virtbase[rip]
	shr	eax, 9
	mov	ecx, eax
	mov	eax, DWORD PTR -92[rbp]
	mov	edx, 0
	mov	rsi, rcx
	mov	edi, eax
	call	lseek@PLT
	mov	rdx, QWORD PTR virtbase[rip]
	shr	edx, 9
	mov	edx, edx
	cmp	rax, rdx
	je	.L43
	lea	rax, -80[rbp]
	mov	rsi, rax
	lea	rdi, .LC9[rip]
	mov	eax, 0
	call	fatal
.L43:
	mov	DWORD PTR -104[rbp], 0
	jmp	.L44
.L47:
	mov	rcx, QWORD PTR virtbase[rip]
	mov	eax, DWORD PTR -104[rbp]
	sal	eax, 12
	movsx	rdx, eax
	mov	rsi, QWORD PTR page_map[rip]
	mov	eax, DWORD PTR -104[rbp]
	cdqe
	sal	rax, 4
	add	rax, rsi
	add	rdx, rcx
	mov	QWORD PTR [rax], rdx
	mov	rdx, QWORD PTR page_map[rip]
	mov	eax, DWORD PTR -104[rbp]
	cdqe
	sal	rax, 4
	add	rax, rdx
	mov	rax, QWORD PTR [rax]
	mov	BYTE PTR [rax], 0
	lea	rcx, -88[rbp]
	mov	eax, DWORD PTR -92[rbp]
	mov	edx, 8
	mov	rsi, rcx
	mov	edi, eax
	call	read@PLT
	cmp	rax, 8
	je	.L45
	lea	rax, -80[rbp]
	mov	rsi, rax
	lea	rdi, .LC10[rip]
	mov	eax, 0
	call	fatal
.L45:
	mov	rax, QWORD PTR -88[rbp]
	shr	rax, 55
	and	eax, 447
	cmp	rax, 268
	je	.L46
	mov	rdx, QWORD PTR -88[rbp]
	mov	eax, DWORD PTR -104[rbp]
	mov	esi, eax
	lea	rdi, .LC11[rip]
	mov	eax, 0
	call	fatal
.L46:
	mov	rax, QWORD PTR -88[rbp]
	sal	eax, 12
	mov	edx, eax
	mov	rcx, QWORD PTR page_map[rip]
	mov	eax, DWORD PTR -104[rbp]
	cdqe
	sal	rax, 4
	add	rax, rcx
	or	edx, 1073741824
	mov	DWORD PTR 8[rax], edx
	add	DWORD PTR -104[rbp], 1
.L44:
	cmp	DWORD PTR -104[rbp], 16
	jle	.L47
	mov	eax, DWORD PTR -92[rbp]
	mov	edi, eax
	call	close@PLT
	mov	eax, DWORD PTR -100[rbp]
	mov	edi, eax
	call	close@PLT
	nop
	mov	rax, QWORD PTR -8[rbp]
	sub	rax, QWORD PTR fs:40
	je	.L48
	call	__stack_chk_fail@PLT
.L48:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE15:
	.size	make_pagemap, .-make_pagemap
	.type	setup_sighandlers, @function
setup_sighandlers:
.LFB16:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 176
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR -8[rbp], rax
	xor	eax, eax
	mov	DWORD PTR -164[rbp], 0
	jmp	.L50
.L51:
	lea	rax, -160[rbp]
	mov	edx, 152
	mov	esi, 0
	mov	rdi, rax
	call	memset@PLT
	lea	rax, terminate[rip]
	mov	QWORD PTR -160[rbp], rax
	lea	rcx, -160[rbp]
	mov	eax, DWORD PTR -164[rbp]
	mov	edx, 0
	mov	rsi, rcx
	mov	edi, eax
	call	sigaction@PLT
	add	DWORD PTR -164[rbp], 1
.L50:
	cmp	DWORD PTR -164[rbp], 63
	jle	.L51
	nop
	mov	rax, QWORD PTR -8[rbp]
	sub	rax, QWORD PTR fs:40
	je	.L52
	call	__stack_chk_fail@PLT
.L52:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE16:
	.size	setup_sighandlers, .-setup_sighandlers
	.type	init_ctrl_data, @function
init_ctrl_data:
.LFB17:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 48
	mov	rax, QWORD PTR virtbase[rip]
	mov	QWORD PTR -8[rbp], rax
	mov	rax, QWORD PTR -8[rbp]
	add	rax, 4000
	mov	QWORD PTR -16[rbp], rax
	mov	DWORD PTR -24[rbp], 2116026408
	mov	DWORD PTR -20[rbp], 2116026396
	mov	eax, DWORD PTR delay_hw[rip]
	test	eax, eax
	jne	.L54
	mov	DWORD PTR -36[rbp], 2116075544
	jmp	.L55
.L54:
	mov	DWORD PTR -36[rbp], 2116038660
.L55:
	mov	rax, QWORD PTR -8[rbp]
	mov	edx, 4000
	mov	esi, 0
	mov	rdi, rax
	call	memset@PLT
	mov	DWORD PTR -32[rbp], 0
	mov	DWORD PTR -28[rbp], 0
	jmp	.L56
.L57:
	mov	rdx, QWORD PTR pin2gpio[rip]
	mov	eax, DWORD PTR -28[rbp]
	cdqe
	add	rax, rdx
	movzx	eax, BYTE PTR [rax]
	movzx	eax, al
	mov	edx, 1
	mov	ecx, eax
	sal	edx, cl
	mov	eax, edx
	or	DWORD PTR -32[rbp], eax
	add	DWORD PTR -28[rbp], 1
.L56:
	mov	eax, DWORD PTR channels[rip]
	cmp	DWORD PTR -28[rbp], eax
	jl	.L57
	mov	DWORD PTR -28[rbp], 0
	jmp	.L58
.L59:
	mov	rax, QWORD PTR -8[rbp]
	mov	edx, DWORD PTR -28[rbp]
	movsx	rdx, edx
	mov	ecx, DWORD PTR -32[rbp]
	mov	DWORD PTR [rax+rdx*4], ecx
	add	DWORD PTR -28[rbp], 1
.L58:
	cmp	DWORD PTR -28[rbp], 999
	jle	.L59
	mov	DWORD PTR -28[rbp], 0
	jmp	.L60
.L65:
	mov	rax, QWORD PTR -16[rbp]
	mov	DWORD PTR [rax], 67108872
	mov	rdx, QWORD PTR -8[rbp]
	mov	eax, DWORD PTR -28[rbp]
	cdqe
	sal	rax, 2
	add	rax, rdx
	mov	rdi, rax
	call	mem_virt_to_phys
	mov	rdx, QWORD PTR -16[rbp]
	mov	DWORD PTR 4[rdx], eax
	mov	eax, DWORD PTR invert_mode[rip]
	test	eax, eax
	je	.L61
	mov	rax, QWORD PTR -16[rbp]
	mov	edx, DWORD PTR -20[rbp]
	mov	DWORD PTR 8[rax], edx
	jmp	.L62
.L61:
	mov	rax, QWORD PTR -16[rbp]
	mov	edx, DWORD PTR -24[rbp]
	mov	DWORD PTR 8[rax], edx
.L62:
	mov	rax, QWORD PTR -16[rbp]
	mov	DWORD PTR 12[rax], 4
	mov	rax, QWORD PTR -16[rbp]
	mov	DWORD PTR 16[rax], 0
	mov	rax, QWORD PTR -16[rbp]
	add	rax, 32
	mov	rdi, rax
	call	mem_virt_to_phys
	mov	rdx, QWORD PTR -16[rbp]
	mov	DWORD PTR 20[rdx], eax
	add	QWORD PTR -16[rbp], 32
	mov	eax, DWORD PTR delay_hw[rip]
	test	eax, eax
	jne	.L63
	mov	rax, QWORD PTR -16[rbp]
	mov	DWORD PTR [rax], 67436616
	jmp	.L64
.L63:
	mov	rax, QWORD PTR -16[rbp]
	mov	DWORD PTR [rax], 67240008
.L64:
	mov	rax, QWORD PTR -8[rbp]
	mov	rdi, rax
	call	mem_virt_to_phys
	mov	rdx, QWORD PTR -16[rbp]
	mov	DWORD PTR 4[rdx], eax
	mov	rax, QWORD PTR -16[rbp]
	mov	edx, DWORD PTR -36[rbp]
	mov	DWORD PTR 8[rax], edx
	mov	rax, QWORD PTR -16[rbp]
	mov	DWORD PTR 12[rax], 4
	mov	rax, QWORD PTR -16[rbp]
	mov	DWORD PTR 16[rax], 0
	mov	rax, QWORD PTR -16[rbp]
	add	rax, 32
	mov	rdi, rax
	call	mem_virt_to_phys
	mov	rdx, QWORD PTR -16[rbp]
	mov	DWORD PTR 20[rdx], eax
	add	QWORD PTR -16[rbp], 32
	add	DWORD PTR -28[rbp], 1
.L60:
	cmp	DWORD PTR -28[rbp], 999
	jle	.L65
	sub	QWORD PTR -16[rbp], 32
	mov	rax, QWORD PTR -8[rbp]
	add	rax, 4000
	mov	rdi, rax
	call	mem_virt_to_phys
	mov	rdx, QWORD PTR -16[rbp]
	mov	DWORD PTR 20[rdx], eax
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE17:
	.size	init_ctrl_data, .-init_ctrl_data
	.type	init_hardware, @function
init_hardware:
.LFB18:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	push	rbx
	sub	rsp, 24
	.cfi_offset 3, -24
	mov	rax, QWORD PTR virtbase[rip]
	mov	QWORD PTR -24[rbp], rax
	mov	eax, DWORD PTR delay_hw[rip]
	test	eax, eax
	jne	.L67
	mov	rax, QWORD PTR pwm_reg[rip]
	mov	DWORD PTR [rax], 0
	mov	edi, 10
	call	udelay
	mov	rax, QWORD PTR clk_reg[rip]
	add	rax, 160
	mov	DWORD PTR [rax], 1509949446
	mov	edi, 100
	call	udelay
	mov	rax, QWORD PTR clk_reg[rip]
	add	rax, 164
	mov	DWORD PTR [rax], 1510154240
	mov	edi, 100
	call	udelay
	mov	rax, QWORD PTR clk_reg[rip]
	add	rax, 160
	mov	DWORD PTR [rax], 1509949462
	mov	edi, 100
	call	udelay
	mov	rax, QWORD PTR pwm_reg[rip]
	add	rax, 16
	mov	DWORD PTR [rax], 100
	mov	edi, 10
	call	udelay
	mov	rax, QWORD PTR pwm_reg[rip]
	add	rax, 8
	mov	DWORD PTR [rax], -2147479793
	mov	edi, 10
	call	udelay
	mov	rax, QWORD PTR pwm_reg[rip]
	mov	DWORD PTR [rax], 64
	mov	edi, 10
	call	udelay
	mov	rax, QWORD PTR pwm_reg[rip]
	mov	DWORD PTR [rax], 33
	mov	edi, 10
	call	udelay
	jmp	.L68
.L67:
	mov	rax, QWORD PTR pcm_reg[rip]
	mov	DWORD PTR [rax], 1
	mov	edi, 100
	call	udelay
	mov	rax, QWORD PTR clk_reg[rip]
	add	rax, 152
	mov	DWORD PTR [rax], 1509949446
	mov	edi, 100
	call	udelay
	mov	rax, QWORD PTR clk_reg[rip]
	add	rax, 156
	mov	DWORD PTR [rax], 1510154240
	mov	edi, 100
	call	udelay
	mov	rax, QWORD PTR clk_reg[rip]
	add	rax, 152
	mov	DWORD PTR [rax], 1509949462
	mov	edi, 100
	call	udelay
	mov	rax, QWORD PTR pcm_reg[rip]
	add	rax, 16
	mov	DWORD PTR [rax], 1073741824
	mov	edi, 100
	call	udelay
	mov	rax, QWORD PTR pcm_reg[rip]
	add	rax, 8
	mov	DWORD PTR [rax], 101376
	mov	edi, 100
	call	udelay
	mov	rax, QWORD PTR pcm_reg[rip]
	mov	edx, DWORD PTR [rax]
	mov	rax, QWORD PTR pcm_reg[rip]
	or	edx, 24
	mov	DWORD PTR [rax], edx
	mov	edi, 100
	call	udelay
	mov	rax, QWORD PTR pcm_reg[rip]
	add	rax, 20
	mov	DWORD PTR [rax], 1073758208
	mov	edi, 100
	call	udelay
	mov	rax, QWORD PTR pcm_reg[rip]
	mov	edx, DWORD PTR [rax]
	mov	rax, QWORD PTR pcm_reg[rip]
	or	dh, 2
	mov	DWORD PTR [rax], edx
	mov	edi, 100
	call	udelay
.L68:
	mov	rax, QWORD PTR dma_reg[rip]
	mov	DWORD PTR [rax], -2147483648
	mov	edi, 10
	call	udelay
	mov	rax, QWORD PTR dma_reg[rip]
	mov	DWORD PTR [rax], 6
	mov	rax, QWORD PTR -24[rbp]
	add	rax, 4000
	mov	rdx, QWORD PTR dma_reg[rip]
	lea	rbx, 4[rdx]
	mov	rdi, rax
	call	mem_virt_to_phys
	mov	DWORD PTR [rbx], eax
	mov	rax, QWORD PTR dma_reg[rip]
	add	rax, 32
	mov	DWORD PTR [rax], 7
	mov	rax, QWORD PTR dma_reg[rip]
	mov	DWORD PTR [rax], 277348353
	mov	eax, DWORD PTR delay_hw[rip]
	cmp	eax, 1
	jne	.L70
	mov	rax, QWORD PTR pcm_reg[rip]
	mov	edx, DWORD PTR [rax]
	mov	rax, QWORD PTR pcm_reg[rip]
	or	edx, 4
	mov	DWORD PTR [rax], edx
.L70:
	nop
	mov	rbx, QWORD PTR -8[rbp]
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE18:
	.size	init_hardware, .-init_hardware
	.type	init_channel_pwm, @function
init_channel_pwm:
.LFB19:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	mov	DWORD PTR -4[rbp], 0
	jmp	.L72
.L73:
	mov	rdx, QWORD PTR channel_pwm[rip]
	mov	eax, DWORD PTR -4[rbp]
	cdqe
	sal	rax, 2
	add	rax, rdx
	pxor	xmm0, xmm0
	movss	DWORD PTR [rax], xmm0
	add	DWORD PTR -4[rbp], 1
.L72:
	mov	eax, DWORD PTR channels[rip]
	cmp	DWORD PTR -4[rbp], eax
	jl	.L73
	nop
	nop
	pop	rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE19:
	.size	init_channel_pwm, .-init_channel_pwm
	.section	.rodata
.LC12:
	.string	"r+"
.LC13:
	.string	"%d=%f%c"
.LC14:
	.string	"Bad input: %s"
.LC15:
	.string	"Invalid channel number %d\n"
.LC17:
	.string	"Invalid value %f\n"
	.text
	.type	go_go_go, @function
go_go_go:
.LFB20:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 48
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR -8[rbp], rax
	xor	eax, eax
	lea	rsi, .LC12[rip]
	lea	rdi, .LC1[rip]
	call	fopen@PLT
	mov	QWORD PTR -16[rbp], rax
	cmp	QWORD PTR -16[rbp], 0
	jne	.L75
	lea	rsi, .LC1[rip]
	lea	rdi, .LC8[rip]
	mov	eax, 0
	call	fatal
.L75:
	mov	QWORD PTR -32[rbp], 0
.L86:
	mov	rdx, QWORD PTR -16[rbp]
	lea	rcx, -24[rbp]
	lea	rax, -32[rbp]
	mov	rsi, rcx
	mov	rdi, rax
	call	getline@PLT
	mov	DWORD PTR -36[rbp], eax
	cmp	DWORD PTR -36[rbp], 0
	js	.L89
	mov	rax, QWORD PTR -32[rbp]
	lea	rsi, -45[rbp]
	lea	rcx, -40[rbp]
	lea	rdx, -44[rbp]
	mov	r8, rsi
	lea	rsi, .LC13[rip]
	mov	rdi, rax
	mov	eax, 0
	call	__isoc99_sscanf@PLT
	mov	DWORD PTR -36[rbp], eax
	cmp	DWORD PTR -36[rbp], 3
	jne	.L78
	movzx	eax, BYTE PTR -45[rbp]
	cmp	al, 10
	je	.L79
.L78:
	mov	rdx, QWORD PTR -32[rbp]
	mov	rax, QWORD PTR stderr[rip]
	lea	rsi, .LC14[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	jmp	.L77
.L79:
	mov	eax, DWORD PTR -44[rbp]
	test	eax, eax
	js	.L81
	mov	edx, DWORD PTR -44[rbp]
	mov	eax, DWORD PTR channels[rip]
	cmp	edx, eax
	jl	.L82
.L81:
	mov	edx, DWORD PTR -44[rbp]
	mov	rax, QWORD PTR stderr[rip]
	lea	rsi, .LC15[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	jmp	.L77
.L82:
	movss	xmm1, DWORD PTR -40[rbp]
	pxor	xmm0, xmm0
	comiss	xmm0, xmm1
	ja	.L83
	movss	xmm0, DWORD PTR -40[rbp]
	movss	xmm1, DWORD PTR .LC16[rip]
	comiss	xmm0, xmm1
	jbe	.L88
.L83:
	movss	xmm0, DWORD PTR -40[rbp]
	pxor	xmm2, xmm2
	cvtss2sd	xmm2, xmm0
	movq	rdx, xmm2
	mov	rax, QWORD PTR stderr[rip]
	movq	xmm0, rdx
	lea	rsi, .LC17[rip]
	mov	rdi, rax
	mov	eax, 1
	call	fprintf@PLT
	jmp	.L77
.L88:
	mov	edx, DWORD PTR -40[rbp]
	mov	eax, DWORD PTR -44[rbp]
	movd	xmm0, edx
	mov	edi, eax
	call	set_pwm
	jmp	.L86
.L89:
	nop
.L77:
	jmp	.L86
	.cfi_endproc
.LFE20:
	.size	go_go_go, .-go_go_go
	.section	.rodata
.LC18:
	.string	"hipv"
.LC19:
	.string	"%s version %s\n"
	.align 8
.LC20:
	.ascii	"Usage: %s [-hipv] [pin] [pin] [pin]...\npin            - is "
	.ascii	"t"
	.string	"he pin for PWM. Multiple pins seperated by a space accepted.\n\t\tE.g  ./sudo pi-blaster 22 25 17\n-h (--help)    - this information\n-i (--invert)  - invert pin output (pulse LOW)\n-p (--pcm)     - use pcm for dmascheduling\n-v (--version) - version information\n"
	.text
	.globl	parseargs
	.type	parseargs, @function
parseargs:
.LFB21:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	DWORD PTR -20[rbp], edi
	mov	QWORD PTR -32[rbp], rsi
	mov	rax, QWORD PTR fs:40
	mov	QWORD PTR -8[rbp], rax
	xor	eax, eax
.L101:
	mov	DWORD PTR -16[rbp], 0
	lea	rdx, -16[rbp]
	mov	rsi, QWORD PTR -32[rbp]
	mov	eax, DWORD PTR -20[rbp]
	mov	r8, rdx
	lea	rcx, longopts.0[rip]
	lea	rdx, .LC18[rip]
	mov	edi, eax
	call	getopt_long@PLT
	mov	DWORD PTR -12[rbp], eax
	cmp	DWORD PTR -12[rbp], -1
	je	.L104
	cmp	DWORD PTR -12[rbp], 118
	je	.L93
	cmp	DWORD PTR -12[rbp], 118
	jg	.L94
	cmp	DWORD PTR -12[rbp], 112
	je	.L95
	cmp	DWORD PTR -12[rbp], 112
	jg	.L94
	cmp	DWORD PTR -12[rbp], 105
	je	.L96
	cmp	DWORD PTR -12[rbp], 105
	jg	.L94
	cmp	DWORD PTR -12[rbp], 104
	je	.L97
	cmp	DWORD PTR -12[rbp], 104
	jg	.L94
	cmp	DWORD PTR -12[rbp], 0
	je	.L105
	cmp	DWORD PTR -12[rbp], 63
	je	.L99
	jmp	.L94
.L97:
	mov	rax, QWORD PTR -32[rbp]
	mov	rdx, QWORD PTR [rax]
	mov	rax, QWORD PTR stderr[rip]
	lea	rcx, VERSION[rip]
	lea	rsi, .LC19[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	rax, QWORD PTR -32[rbp]
	mov	rdx, QWORD PTR [rax]
	mov	rax, QWORD PTR stderr[rip]
	lea	rsi, .LC20[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	edi, -1
	call	exit@PLT
.L96:
	mov	DWORD PTR invert_mode[rip], 1
	jmp	.L100
.L95:
	mov	DWORD PTR delay_hw[rip], 1
	jmp	.L100
.L93:
	mov	rax, QWORD PTR -32[rbp]
	mov	rdx, QWORD PTR [rax]
	mov	rax, QWORD PTR stderr[rip]
	lea	rcx, VERSION[rip]
	lea	rsi, .LC19[rip]
	mov	rdi, rax
	mov	eax, 0
	call	fprintf@PLT
	mov	edi, -1
	call	exit@PLT
.L99:
	mov	edi, -1
	call	exit@PLT
.L94:
	mov	edi, -1
	call	exit@PLT
.L105:
	nop
.L100:
	jmp	.L101
.L104:
	nop
	nop
	mov	rax, QWORD PTR -8[rbp]
	sub	rax, QWORD PTR fs:40
	je	.L102
	call	__stack_chk_fail@PLT
.L102:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE21:
	.size	parseargs, .-parseargs
	.section	.rodata
.LC21:
	.string	"PWM"
.LC22:
	.string	"PCM"
	.align 8
.LC23:
	.string	"Using hardware:                 %5s\n"
	.align 8
.LC24:
	.string	"Number of channels:             %5d\n"
	.align 8
.LC25:
	.string	"PWM frequency:               %5d Hz\n"
	.align 8
.LC26:
	.string	"PWM steps:                      %5d\n"
	.align 8
.LC27:
	.string	"Maximum period (100  %%):      %5dus\n"
	.align 8
.LC29:
	.string	"Minimum period (%1.3f%%):      %5dus\n"
	.align 8
.LC30:
	.string	"pi-blaster: Failed to mmap physical pages: %m\n"
	.align 8
.LC31:
	.string	"pi-blaster: Virtual address is not page aligned\n"
	.align 8
.LC32:
	.string	"pi-blaster: Failed to create %s: %m\n"
	.align 8
.LC33:
	.string	"pi-blaster: Failed to set permissions on %s: %m\n"
	.align 8
.LC34:
	.string	"pi-blaster: Failed to daemonize process: %m\n"
	.text
	.globl	main
	.type	main, @function
main:
.LFB22:
	.cfi_startproc
	endbr64
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	mov	rbp, rsp
	.cfi_def_cfa_register 6
	sub	rsp, 32
	mov	DWORD PTR -20[rbp], edi
	mov	QWORD PTR -32[rbp], rsi
	mov	eax, DWORD PTR -20[rbp]
	sub	eax, 1
	mov	DWORD PTR channels[rip], eax
	mov	eax, DWORD PTR channels[rip]
	test	eax, eax
	jle	.L107
	mov	eax, DWORD PTR channels[rip]
	cdqe
	mov	rdi, rax
	call	malloc@PLT
	mov	QWORD PTR pin2gpio[rip], rax
	mov	eax, DWORD PTR channels[rip]
	cdqe
	sal	rax, 2
	mov	rdi, rax
	call	malloc@PLT
	mov	QWORD PTR channel_pwm[rip], rax
	mov	DWORD PTR -4[rbp], 0
	jmp	.L108
.L109:
	mov	eax, DWORD PTR -4[rbp]
	cdqe
	add	rax, 1
	lea	rdx, 0[0+rax*8]
	mov	rax, QWORD PTR -32[rbp]
	add	rax, rdx
	mov	rax, QWORD PTR [rax]
	mov	rdi, rax
	call	atoi@PLT
	mov	edx, eax
	mov	rcx, QWORD PTR pin2gpio[rip]
	mov	eax, DWORD PTR -4[rbp]
	cdqe
	add	rax, rcx
	mov	BYTE PTR [rax], dl
	add	DWORD PTR -4[rbp], 1
.L108:
	mov	eax, DWORD PTR channels[rip]
	cmp	DWORD PTR -4[rbp], eax
	jl	.L109
	jmp	.L110
.L107:
	mov	DWORD PTR channels[rip], 8
	mov	eax, DWORD PTR channels[rip]
	cdqe
	mov	rdi, rax
	call	malloc@PLT
	mov	QWORD PTR pin2gpio[rip], rax
	mov	eax, DWORD PTR channels[rip]
	cdqe
	sal	rax, 2
	mov	rdi, rax
	call	malloc@PLT
	mov	QWORD PTR channel_pwm[rip], rax
	mov	DWORD PTR -4[rbp], 0
	jmp	.L111
.L112:
	mov	rdx, QWORD PTR pin2gpio[rip]
	mov	eax, DWORD PTR -4[rbp]
	cdqe
	add	rdx, rax
	mov	eax, DWORD PTR -4[rbp]
	cdqe
	lea	rcx, defaultpins[rip]
	movzx	eax, BYTE PTR [rax+rcx]
	mov	BYTE PTR [rdx], al
	add	DWORD PTR -4[rbp], 1
.L111:
	mov	eax, DWORD PTR channels[rip]
	cmp	DWORD PTR -4[rbp], eax
	jl	.L112
.L110:
	mov	rdx, QWORD PTR -32[rbp]
	mov	eax, DWORD PTR -20[rbp]
	mov	rsi, rdx
	mov	edi, eax
	call	parseargs
	mov	eax, DWORD PTR delay_hw[rip]
	test	eax, eax
	jne	.L113
	lea	rax, .LC21[rip]
	jmp	.L114
.L113:
	lea	rax, .LC22[rip]
.L114:
	mov	rsi, rax
	lea	rdi, .LC23[rip]
	mov	eax, 0
	call	printf@PLT
	mov	eax, DWORD PTR channels[rip]
	mov	esi, eax
	lea	rdi, .LC24[rip]
	mov	eax, 0
	call	printf@PLT
	mov	esi, 100
	lea	rdi, .LC25[rip]
	mov	eax, 0
	call	printf@PLT
	mov	esi, 1000
	lea	rdi, .LC26[rip]
	mov	eax, 0
	call	printf@PLT
	mov	esi, 10000
	lea	rdi, .LC27[rip]
	mov	eax, 0
	call	printf@PLT
	mov	rax, QWORD PTR .LC28[rip]
	mov	esi, 10
	movq	xmm0, rax
	lea	rdi, .LC29[rip]
	mov	eax, 1
	call	printf@PLT
	call	setup_sighandlers
	mov	esi, 36
	mov	edi, 536899584
	call	map_peripheral
	mov	QWORD PTR dma_reg[rip], rax
	mov	esi, 40
	mov	edi, 539017216
	call	map_peripheral
	mov	QWORD PTR pwm_reg[rip], rax
	mov	esi, 36
	mov	edi, 538980352
	call	map_peripheral
	mov	QWORD PTR pcm_reg[rip], rax
	mov	esi, 168
	mov	edi, 537923584
	call	map_peripheral
	mov	QWORD PTR clk_reg[rip], rax
	mov	esi, 256
	mov	edi, 538968064
	call	map_peripheral
	mov	QWORD PTR gpio_reg[rip], rax
	mov	r9d, 0
	mov	r8d, -1
	mov	ecx, 24609
	mov	edx, 3
	mov	esi, 69632
	mov	edi, 0
	call	mmap@PLT
	mov	QWORD PTR virtbase[rip], rax
	mov	rax, QWORD PTR virtbase[rip]
	cmp	rax, -1
	jne	.L115
	lea	rdi, .LC30[rip]
	mov	eax, 0
	call	fatal
.L115:
	mov	rax, QWORD PTR virtbase[rip]
	and	eax, 4095
	test	rax, rax
	je	.L116
	lea	rdi, .LC31[rip]
	mov	eax, 0
	call	fatal
.L116:
	call	make_pagemap
	mov	DWORD PTR -4[rbp], 0
	jmp	.L117
.L118:
	mov	edx, DWORD PTR invert_mode[rip]
	mov	rcx, QWORD PTR pin2gpio[rip]
	mov	eax, DWORD PTR -4[rbp]
	cdqe
	add	rax, rcx
	movzx	eax, BYTE PTR [rax]
	movzx	eax, al
	mov	esi, edx
	mov	edi, eax
	call	gpio_set
	mov	rdx, QWORD PTR pin2gpio[rip]
	mov	eax, DWORD PTR -4[rbp]
	cdqe
	add	rax, rdx
	movzx	eax, BYTE PTR [rax]
	movzx	eax, al
	mov	esi, 1
	mov	edi, eax
	call	gpio_set_mode
	add	DWORD PTR -4[rbp], 1
.L117:
	mov	eax, DWORD PTR channels[rip]
	cmp	DWORD PTR -4[rbp], eax
	jl	.L118
	call	init_ctrl_data
	call	init_hardware
	call	init_channel_pwm
	lea	rdi, .LC1[rip]
	call	unlink@PLT
	mov	esi, 438
	lea	rdi, .LC1[rip]
	call	mkfifo@PLT
	test	eax, eax
	jns	.L119
	lea	rsi, .LC1[rip]
	lea	rdi, .LC32[rip]
	mov	eax, 0
	call	fatal
.L119:
	mov	esi, 438
	lea	rdi, .LC1[rip]
	call	chmod@PLT
	test	eax, eax
	jns	.L120
	lea	rsi, .LC1[rip]
	lea	rdi, .LC33[rip]
	mov	eax, 0
	call	fatal
.L120:
	mov	esi, 1
	mov	edi, 0
	call	daemon@PLT
	test	eax, eax
	jns	.L121
	lea	rdi, .LC34[rip]
	mov	eax, 0
	call	fatal
.L121:
	call	go_go_go
	mov	eax, 0
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE22:
	.size	main, .-main
	.section	.rodata
.LC35:
	.string	"help"
.LC36:
	.string	"invert"
.LC37:
	.string	"pcm"
.LC38:
	.string	"version"
	.section	.data.rel.local,"aw"
	.align 32
	.type	longopts.0, @object
	.size	longopts.0, 160
longopts.0:
	.quad	.LC35
	.long	0
	.zero	4
	.quad	0
	.long	104
	.zero	4
	.quad	.LC36
	.long	0
	.zero	4
	.quad	0
	.long	105
	.zero	4
	.quad	.LC37
	.long	0
	.zero	4
	.quad	0
	.long	112
	.zero	4
	.quad	.LC38
	.long	0
	.zero	4
	.quad	0
	.long	118
	.zero	4
	.quad	0
	.long	0
	.zero	4
	.quad	0
	.long	0
	.zero	4
	.section	.rodata
	.align 4
.LC5:
	.long	1148846080
	.align 4
.LC16:
	.long	1065353216
	.align 8
.LC28:
	.long	-1717986918
	.long	1069128089
	.ident	"GCC: (Ubuntu 10.5.0-1ubuntu1~20.04) 10.5.0"
	.section	.note.GNU-stack,"",@progbits
	.section	.note.gnu.property,"a"
	.align 8
	.long	 1f - 0f
	.long	 4f - 1f
	.long	 5
0:
	.string	 "GNU"
1:
	.align 8
	.long	 0xc0000002
	.long	 3f - 2f
2:
	.long	 0x3
3:
	.align 8
4:

	.arch armv5t
	.eabi_attribute 20, 1
	.eabi_attribute 21, 1
	.eabi_attribute 23, 3
	.eabi_attribute 24, 1
	.eabi_attribute 25, 1
	.eabi_attribute 26, 2
	.eabi_attribute 30, 6
	.eabi_attribute 34, 0
	.eabi_attribute 18, 4
	.file	"97011758.c"
	.text
	.comm	channels,4,4
	.comm	g_argv,4,4
	.data
	.align	2
	.type	VERSION, %object
	.size	VERSION, 6
VERSION:
	.ascii	"0.1.0\000"
	.global	defaultpins
	.align	2
	.type	defaultpins, %object
	.size	defaultpins, 8
defaultpins:
	.ascii	"\004\021\022\025\026\027\030\031"
	.local	pin2gpio
	.comm	pin2gpio,4,4
	.comm	page_map,4,4
	.local	virtbase
	.comm	virtbase,4,4
	.local	pwm_reg
	.comm	pwm_reg,4,4
	.local	pcm_reg
	.comm	pcm_reg,4,4
	.local	clk_reg
	.comm	clk_reg,4,4
	.local	dma_reg
	.comm	dma_reg,4,4
	.local	gpio_reg
	.comm	gpio_reg,4,4
	.local	delay_hw
	.comm	delay_hw,4,4
	.local	invert_mode
	.comm	invert_mode,4,4
	.local	channel_pwm
	.comm	channel_pwm,4,4
	.text
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	gpio_set_mode, %function
gpio_set_mode:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	@ link register save eliminated.
	str	fp, [sp, #-4]!
	add	fp, sp, #0
	sub	sp, sp, #20
	str	r0, [fp, #-16]
	str	r1, [fp, #-20]
	ldr	r3, .L2
	ldr	r2, [r3]
	ldr	r3, [fp, #-16]
	ldr	r1, .L2+4
	umull	r0, r3, r1, r3
	lsr	r3, r3, #3
	lsl	r3, r3, #2
	add	r3, r2, r3
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	ldr	r1, [fp, #-16]
	ldr	r3, .L2+4
	umull	r2, r3, r1, r3
	lsr	r2, r3, #3
	mov	r3, r2
	lsl	r3, r3, #2
	add	r3, r3, r2
	lsl	r3, r3, #1
	sub	r2, r1, r3
	mov	r3, r2
	lsl	r3, r3, #1
	add	r3, r3, r2
	mov	r2, #7
	lsl	r3, r2, r3
	mvn	r3, r3
	mov	r2, r3
	ldr	r3, [fp, #-8]
	and	r3, r3, r2
	str	r3, [fp, #-8]
	ldr	r1, [fp, #-16]
	ldr	r3, .L2+4
	umull	r2, r3, r1, r3
	lsr	r2, r3, #3
	mov	r3, r2
	lsl	r3, r3, #2
	add	r3, r3, r2
	lsl	r3, r3, #1
	sub	r2, r1, r3
	mov	r3, r2
	lsl	r3, r3, #1
	add	r3, r3, r2
	ldr	r2, [fp, #-20]
	lsl	r3, r2, r3
	ldr	r2, [fp, #-8]
	orr	r3, r2, r3
	str	r3, [fp, #-8]
	ldr	r3, .L2
	ldr	r2, [r3]
	ldr	r3, [fp, #-16]
	ldr	r1, .L2+4
	umull	r0, r3, r1, r3
	lsr	r3, r3, #3
	lsl	r3, r3, #2
	add	r3, r2, r3
	ldr	r2, [fp, #-8]
	str	r2, [r3]
	nop
	add	sp, fp, #0
	@ sp needed
	ldr	fp, [sp], #4
	bx	lr
.L3:
	.align	2
.L2:
	.word	gpio_reg
	.word	-858993459
	.size	gpio_set_mode, .-gpio_set_mode
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	gpio_set, %function
gpio_set:
	@ args = 0, pretend = 0, frame = 8
	@ frame_needed = 1, uses_anonymous_args = 0
	@ link register save eliminated.
	str	fp, [sp, #-4]!
	add	fp, sp, #0
	sub	sp, sp, #12
	str	r0, [fp, #-8]
	str	r1, [fp, #-12]
	ldr	r3, [fp, #-12]
	cmp	r3, #0
	beq	.L5
	mov	r2, #1
	ldr	r3, [fp, #-8]
	lsl	r2, r2, r3
	ldr	r3, .L8
	ldr	r3, [r3]
	add	r3, r3, #28
	str	r2, [r3]
	b	.L7
.L5:
	mov	r2, #1
	ldr	r3, [fp, #-8]
	lsl	r2, r2, r3
	ldr	r3, .L8
	ldr	r3, [r3]
	add	r3, r3, #40
	str	r2, [r3]
.L7:
	nop
	add	sp, fp, #0
	@ sp needed
	ldr	fp, [sp], #4
	bx	lr
.L9:
	.align	2
.L8:
	.word	gpio_reg
	.size	gpio_set, .-gpio_set
	.section	.rodata
	.align	2
.LC0:
	.word	__stack_chk_guard
	.text
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	udelay, %function
udelay:
	@ args = 0, pretend = 0, frame = 24
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #24
	str	r0, [fp, #-24]
	ldr	r3, .L12
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	mov	r3, #0
	str	r3, [fp, #-16]
	ldr	r2, [fp, #-24]
	mov	r3, r2
	lsl	r3, r3, #5
	sub	r3, r3, r2
	lsl	r3, r3, #2
	add	r3, r3, r2
	lsl	r3, r3, #3
	str	r3, [fp, #-12]
	sub	r3, fp, #16
	mov	r1, #0
	mov	r0, r3
	bl	nanosleep
	nop
	ldr	r3, .L12
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	eors	r2, r3, r2
	mov	r3, #0
	beq	.L11
	bl	__stack_chk_fail
.L11:
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L13:
	.align	2
.L12:
	.word	.LC0
	.size	udelay, .-udelay
	.section	.rodata
	.align	2
.LC1:
	.ascii	"/dev/pi-blaster\000"
	.text
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	terminate, %function
terminate:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	str	r0, [fp, #-16]
	ldr	r3, .L18
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L15
	ldr	r3, .L18+4
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L15
	mov	r3, #0
	str	r3, [fp, #-8]
	b	.L16
.L17:
	ldr	r3, .L18+8
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	lsl	r3, r3, #2
	add	r3, r2, r3
	mov	r2, #0
	str	r2, [r3]	@ float
	ldr	r3, [fp, #-8]
	add	r3, r3, #1
	str	r3, [fp, #-8]
.L16:
	ldr	r3, .L18+12
	ldr	r3, [r3]
	ldr	r2, [fp, #-8]
	cmp	r2, r3
	blt	.L17
	bl	update_pwm
	ldr	r0, .L18+16
	bl	udelay
	ldr	r3, .L18
	ldr	r3, [r3]
	mov	r2, #-2147483648
	str	r2, [r3]
	mov	r0, #10
	bl	udelay
.L15:
	ldr	r0, .L18+20
	bl	unlink
	mov	r0, #1
	bl	exit
.L19:
	.align	2
.L18:
	.word	dma_reg
	.word	virtbase
	.word	channel_pwm
	.word	channels
	.word	10000
	.word	.LC1
	.size	terminate, .-terminate
	.section	.rodata
	.align	2
.LC2:
	.word	__stack_chk_guard
	.text
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	fatal, %function
fatal:
	@ args = 4, pretend = 16, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 1
	push	{r0, r1, r2, r3}
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #16
	ldr	r3, [fp, #4]
	str	r3, [fp, #-16]
	ldr	r3, .L22
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	add	r3, fp, #8
	str	r3, [fp, #-12]
	ldr	r3, .L22+4
	ldr	r3, [r3]
	ldr	r2, [fp, #-12]
	ldr	r1, [fp, #-16]
	mov	r0, r3
	bl	vfprintf
	mov	r0, #0
	bl	terminate
	nop
	ldr	r3, .L22
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	eors	r2, r3, r2
	mov	r3, #0
	beq	.L21
	bl	__stack_chk_fail
.L21:
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, lr}
	add	sp, sp, #16
	bx	lr
.L23:
	.align	2
.L22:
	.word	.LC2
	.word	stderr
	.size	fatal, .-fatal
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	mem_virt_to_phys, %function
mem_virt_to_phys:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	@ link register save eliminated.
	str	fp, [sp, #-4]!
	add	fp, sp, #0
	sub	sp, sp, #20
	str	r0, [fp, #-16]
	ldr	r3, .L26
	ldr	r3, [r3]
	ldr	r2, [fp, #-16]
	sub	r3, r2, r3
	str	r3, [fp, #-8]
	ldr	r3, .L26+4
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	lsr	r3, r3, #12
	lsl	r3, r3, #3
	add	r3, r2, r3
	ldr	r2, [r3, #4]
	ldr	r3, [fp, #-8]
	lsl	r3, r3, #20
	lsr	r3, r3, #20
	add	r3, r2, r3
	mov	r0, r3
	add	sp, fp, #0
	@ sp needed
	ldr	fp, [sp], #4
	bx	lr
.L27:
	.align	2
.L26:
	.word	virtbase
	.word	page_map
	.size	mem_virt_to_phys, .-mem_virt_to_phys
	.section	.rodata
	.align	2
.LC3:
	.ascii	"/dev/mem\000"
	.align	2
.LC4:
	.ascii	"pi-blaster: Failed to open /dev/mem: %m\012\000"
	.align	2
.LC5:
	.ascii	"pi-blaster: Failed to map peripheral at 0x%08x: %m\012"
	.ascii	"\000"
	.text
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	map_peripheral, %function
map_peripheral:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #24
	str	r0, [fp, #-16]
	str	r1, [fp, #-20]
	ldr	r1, .L32
	ldr	r0, .L32+4
	bl	open
	str	r0, [fp, #-12]
	ldr	r3, [fp, #-12]
	cmp	r3, #0
	bge	.L29
	ldr	r0, .L32+8
	bl	fatal
.L29:
	ldr	r3, [fp, #-16]
	str	r3, [sp, #4]
	ldr	r3, [fp, #-12]
	str	r3, [sp]
	mov	r3, #1
	mov	r2, #3
	ldr	r1, [fp, #-20]
	mov	r0, #0
	bl	mmap
	str	r0, [fp, #-8]
	ldr	r3, [fp, #-8]
	cmn	r3, #1
	bne	.L30
	ldr	r1, [fp, #-16]
	ldr	r0, .L32+12
	bl	fatal
.L30:
	ldr	r0, [fp, #-12]
	bl	close
	ldr	r3, [fp, #-8]
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L33:
	.align	2
.L32:
	.word	1052674
	.word	.LC3
	.word	.LC4
	.word	.LC5
	.size	map_peripheral, .-map_peripheral
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	set_pwm, %function
set_pwm:
	@ args = 0, pretend = 0, frame = 8
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #8
	str	r0, [fp, #-8]
	str	r1, [fp, #-12]	@ float
	ldr	r3, .L35
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	lsl	r3, r3, #2
	add	r3, r2, r3
	ldr	r2, [fp, #-12]	@ float
	str	r2, [r3]	@ float
	bl	update_pwm
	nop
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L36:
	.align	2
.L35:
	.word	channel_pwm
	.size	set_pwm, .-set_pwm
	.global	__aeabi_fcmpgt
	.global	__aeabi_i2f
	.global	__aeabi_fdiv
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	update_pwm, %function
update_pwm:
	@ args = 0, pretend = 0, frame = 24
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #24
	ldr	r3, .L54
	str	r3, [fp, #-16]
	ldr	r3, .L54+4
	str	r3, [fp, #-12]
	ldr	r3, .L54+8
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	ldr	r3, .L54+12
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L38
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-16]
	str	r2, [r3, #4008]
	b	.L39
.L38:
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-12]
	str	r2, [r3, #4008]
.L39:
	mov	r3, #0
	str	r3, [fp, #-20]
	mov	r3, #0
	str	r3, [fp, #-28]
	b	.L40
.L43:
	ldr	r3, .L54+16
	ldr	r2, [r3]
	ldr	r3, [fp, #-28]
	lsl	r3, r3, #2
	add	r3, r2, r3
	ldr	r3, [r3]	@ float
	mov	r1, #0
	mov	r0, r3
	bl	__aeabi_fcmpgt
	mov	r3, r0
	cmp	r3, #0
	beq	.L41
	ldr	r3, .L54+20
	ldr	r2, [r3]
	ldr	r3, [fp, #-28]
	add	r3, r2, r3
	ldrb	r3, [r3]	@ zero_extendqisi2
	mov	r2, r3
	mov	r3, #1
	lsl	r3, r3, r2
	mov	r2, r3
	ldr	r3, [fp, #-20]
	orr	r3, r3, r2
	str	r3, [fp, #-20]
.L41:
	ldr	r3, [fp, #-28]
	add	r3, r3, #1
	str	r3, [fp, #-28]
.L40:
	ldr	r3, .L54+24
	ldr	r3, [r3]
	ldr	r2, [fp, #-28]
	cmp	r2, r3
	blt	.L43
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-20]
	str	r2, [r3]
	mov	r3, #1
	str	r3, [fp, #-24]
	b	.L44
.L51:
	ldr	r3, .L54+12
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L45
	ldr	r3, [fp, #-24]
	lsl	r3, r3, #1
	ldr	r2, [fp, #-8]
	lsl	r3, r3, #5
	add	r3, r2, r3
	ldr	r2, [fp, #-12]
	str	r2, [r3, #4008]
	b	.L46
.L45:
	ldr	r3, [fp, #-24]
	lsl	r3, r3, #1
	ldr	r2, [fp, #-8]
	lsl	r3, r3, #5
	add	r3, r2, r3
	ldr	r2, [fp, #-16]
	str	r2, [r3, #4008]
.L46:
	mov	r3, #0
	str	r3, [fp, #-20]
	mov	r3, #0
	str	r3, [fp, #-28]
	b	.L47
.L50:
	ldr	r0, [fp, #-24]
	bl	__aeabi_i2f
	mov	r3, r0
	ldr	r1, .L54+28
	mov	r0, r3
	bl	__aeabi_fdiv
	mov	r3, r0
	mov	r0, r3
	ldr	r3, .L54+16
	ldr	r2, [r3]
	ldr	r3, [fp, #-28]
	lsl	r3, r3, #2
	add	r3, r2, r3
	ldr	r3, [r3]	@ float
	mov	r1, r3
	bl	__aeabi_fcmpgt
	mov	r3, r0
	cmp	r3, #0
	beq	.L48
	ldr	r3, .L54+20
	ldr	r2, [r3]
	ldr	r3, [fp, #-28]
	add	r3, r2, r3
	ldrb	r3, [r3]	@ zero_extendqisi2
	mov	r2, r3
	mov	r3, #1
	lsl	r3, r3, r2
	mov	r2, r3
	ldr	r3, [fp, #-20]
	orr	r3, r3, r2
	str	r3, [fp, #-20]
.L48:
	ldr	r3, [fp, #-28]
	add	r3, r3, #1
	str	r3, [fp, #-28]
.L47:
	ldr	r3, .L54+24
	ldr	r3, [r3]
	ldr	r2, [fp, #-28]
	cmp	r2, r3
	blt	.L50
	ldr	r3, [fp, #-8]
	ldr	r2, [fp, #-24]
	ldr	r1, [fp, #-20]
	str	r1, [r3, r2, lsl #2]
	ldr	r3, [fp, #-24]
	add	r3, r3, #1
	str	r3, [fp, #-24]
.L44:
	ldr	r3, [fp, #-24]
	cmp	r3, #1000
	blt	.L51
	nop
	nop
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L55:
	.align	2
.L54:
	.word	2116026408
	.word	2116026396
	.word	virtbase
	.word	invert_mode
	.word	channel_pwm
	.word	pin2gpio
	.word	channels
	.word	1148846080
	.size	update_pwm, .-update_pwm
	.section	.rodata
	.align	2
.LC6:
	.ascii	"pi-blaster: Failed to malloc page_map: %m\012\000"
	.align	2
.LC7:
	.ascii	"/proc/%d/pagemap\000"
	.align	2
.LC8:
	.ascii	"pi-blaster: Failed to open %s: %m\012\000"
	.align	2
.LC9:
	.ascii	"pi-blaster: Failed to seek on %s: %m\012\000"
	.align	2
.LC10:
	.ascii	"pi-blaster: Failed to read %s: %m\012\000"
	.align	2
.LC11:
	.ascii	"pi-blaster: Page %d not present (pfn 0x%016llx)\012"
	.ascii	"\000"
	.align	2
.LC12:
	.word	__stack_chk_guard
	.text
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	make_pagemap, %function
make_pagemap:
	@ args = 0, pretend = 0, frame = 96
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{r4, r5, fp, lr}
	add	fp, sp, #12
	sub	sp, sp, #96
	ldr	r3, .L66
	ldr	r3, [r3]
	str	r3, [fp, #-16]
	mov	r3,#0
	mov	r0, #136
	bl	malloc
	mov	r3, r0
	mov	r2, r3
	ldr	r3, .L66+4
	str	r2, [r3]
	ldr	r3, .L66+4
	ldr	r3, [r3]
	cmp	r3, #0
	bne	.L57
	ldr	r0, .L66+8
	bl	fatal
.L57:
	mov	r1, #2
	ldr	r0, .L66+12
	bl	open
	str	r0, [fp, #-104]
	ldr	r3, [fp, #-104]
	cmp	r3, #0
	bge	.L58
	ldr	r0, .L66+16
	bl	fatal
.L58:
	bl	getpid
	str	r0, [fp, #-100]
	sub	r3, fp, #80
	ldr	r2, [fp, #-100]
	ldr	r1, .L66+20
	mov	r0, r3
	bl	sprintf
	sub	r3, fp, #80
	mov	r1, #0
	mov	r0, r3
	bl	open
	str	r0, [fp, #-96]
	ldr	r3, [fp, #-96]
	cmp	r3, #0
	bge	.L59
	sub	r3, fp, #80
	mov	r1, r3
	ldr	r0, .L66+24
	bl	fatal
.L59:
	ldr	r3, .L66+28
	ldr	r3, [r3]
	lsr	r3, r3, #9
	mov	r2, #0
	mov	r1, r3
	ldr	r0, [fp, #-96]
	bl	lseek
	mov	r3, r0
	ldr	r2, .L66+28
	ldr	r2, [r2]
	lsr	r2, r2, #9
	cmp	r3, r2
	beq	.L60
	sub	r3, fp, #80
	mov	r1, r3
	ldr	r0, .L66+32
	bl	fatal
.L60:
	mov	r3, #0
	str	r3, [fp, #-108]
	b	.L61
.L64:
	ldr	r3, .L66+28
	ldr	r2, [r3]
	ldr	r3, [fp, #-108]
	lsl	r3, r3, #12
	mov	r0, r3
	ldr	r3, .L66+4
	ldr	r1, [r3]
	ldr	r3, [fp, #-108]
	lsl	r3, r3, #3
	add	r3, r1, r3
	add	r2, r2, r0
	str	r2, [r3]
	ldr	r3, .L66+4
	ldr	r2, [r3]
	ldr	r3, [fp, #-108]
	lsl	r3, r3, #3
	add	r3, r2, r3
	ldr	r3, [r3]
	mov	r2, #0
	strb	r2, [r3]
	sub	r3, fp, #92
	mov	r2, #8
	mov	r1, r3
	ldr	r0, [fp, #-96]
	bl	read
	mov	r3, r0
	cmp	r3, #8
	beq	.L62
	sub	r3, fp, #80
	mov	r1, r3
	ldr	r0, .L66+36
	bl	fatal
.L62:
	sub	r1, fp, #92
	ldmia	r1, {r0-r1}
	mov	r2, #0
	mov	r3, #0
	lsr	r2, r1, #23
	mov	r3, #0
	ldr	r0, .L66+40
	mov	r1, #0
	and	r4, r2, r0
	and	r5, r3, r1
	cmp	r5, #0
	cmpeq	r4, #268
	beq	.L63
	sub	r3, fp, #92
	ldmia	r3, {r2-r3}
	ldr	r1, [fp, #-108]
	ldr	r0, .L66+44
	bl	fatal
.L63:
	sub	r3, fp, #92
	ldmia	r3, {r2-r3}
	mov	r3, r2
	lsl	r2, r3, #12
	ldr	r3, .L66+4
	ldr	r1, [r3]
	ldr	r3, [fp, #-108]
	lsl	r3, r3, #3
	add	r3, r1, r3
	orr	r2, r2, #1073741824
	str	r2, [r3, #4]
	ldr	r3, [fp, #-108]
	add	r3, r3, #1
	str	r3, [fp, #-108]
.L61:
	ldr	r3, [fp, #-108]
	cmp	r3, #16
	ble	.L64
	ldr	r0, [fp, #-96]
	bl	close
	ldr	r0, [fp, #-104]
	bl	close
	nop
	ldr	r3, .L66
	ldr	r2, [r3]
	ldr	r3, [fp, #-16]
	eors	r2, r3, r2
	mov	r3, #0
	beq	.L65
	bl	__stack_chk_fail
.L65:
	sub	sp, fp, #12
	@ sp needed
	pop	{r4, r5, fp, pc}
.L67:
	.align	2
.L66:
	.word	.LC12
	.word	page_map
	.word	.LC6
	.word	.LC3
	.word	.LC4
	.word	.LC7
	.word	.LC8
	.word	virtbase
	.word	.LC9
	.word	.LC10
	.word	447
	.word	.LC11
	.size	make_pagemap, .-make_pagemap
	.section	.rodata
	.align	2
.LC13:
	.word	__stack_chk_guard
	.text
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	setup_sighandlers, %function
setup_sighandlers:
	@ args = 0, pretend = 0, frame = 152
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #152
	ldr	r3, .L72
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
	mov	r3, #0
	str	r3, [fp, #-152]
	b	.L69
.L70:
	sub	r3, fp, #148
	mov	r2, #140
	mov	r1, #0
	mov	r0, r3
	bl	memset
	ldr	r3, .L72+4
	str	r3, [fp, #-148]
	sub	r3, fp, #148
	mov	r2, #0
	mov	r1, r3
	ldr	r0, [fp, #-152]
	bl	sigaction
	ldr	r3, [fp, #-152]
	add	r3, r3, #1
	str	r3, [fp, #-152]
.L69:
	ldr	r3, [fp, #-152]
	cmp	r3, #63
	ble	.L70
	nop
	ldr	r3, .L72
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	eors	r2, r3, r2
	mov	r3, #0
	beq	.L71
	bl	__stack_chk_fail
.L71:
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L73:
	.align	2
.L72:
	.word	.LC13
	.word	terminate
	.size	setup_sighandlers, .-setup_sighandlers
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	init_ctrl_data, %function
init_ctrl_data:
	@ args = 0, pretend = 0, frame = 32
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #32
	ldr	r3, .L87
	ldr	r3, [r3]
	str	r3, [fp, #-16]
	ldr	r3, [fp, #-16]
	add	r3, r3, #4000
	str	r3, [fp, #-32]
	ldr	r3, .L87+4
	str	r3, [fp, #-12]
	ldr	r3, .L87+8
	str	r3, [fp, #-8]
	ldr	r3, .L87+12
	ldr	r3, [r3]
	cmp	r3, #0
	bne	.L75
	ldr	r3, .L87+16
	str	r3, [fp, #-28]
	b	.L76
.L75:
	ldr	r3, .L87+20
	str	r3, [fp, #-28]
.L76:
	ldr	r3, [fp, #-16]
	mov	r2, #4000
	mov	r1, #0
	mov	r0, r3
	bl	memset
	mov	r3, #0
	str	r3, [fp, #-24]
	mov	r3, #0
	str	r3, [fp, #-20]
	b	.L77
.L78:
	ldr	r3, .L87+24
	ldr	r2, [r3]
	ldr	r3, [fp, #-20]
	add	r3, r2, r3
	ldrb	r3, [r3]	@ zero_extendqisi2
	mov	r2, r3
	mov	r3, #1
	lsl	r3, r3, r2
	mov	r2, r3
	ldr	r3, [fp, #-24]
	orr	r3, r3, r2
	str	r3, [fp, #-24]
	ldr	r3, [fp, #-20]
	add	r3, r3, #1
	str	r3, [fp, #-20]
.L77:
	ldr	r3, .L87+28
	ldr	r3, [r3]
	ldr	r2, [fp, #-20]
	cmp	r2, r3
	blt	.L78
	mov	r3, #0
	str	r3, [fp, #-20]
	b	.L79
.L80:
	ldr	r3, [fp, #-16]
	ldr	r2, [fp, #-20]
	ldr	r1, [fp, #-24]
	str	r1, [r3, r2, lsl #2]
	ldr	r3, [fp, #-20]
	add	r3, r3, #1
	str	r3, [fp, #-20]
.L79:
	ldr	r3, [fp, #-20]
	cmp	r3, #1000
	blt	.L80
	mov	r3, #0
	str	r3, [fp, #-20]
	b	.L81
.L86:
	ldr	r3, [fp, #-32]
	ldr	r2, .L87+32
	str	r2, [r3]
	ldr	r2, [fp, #-16]
	ldr	r3, [fp, #-20]
	lsl	r3, r3, #2
	add	r3, r2, r3
	mov	r0, r3
	bl	mem_virt_to_phys
	mov	r2, r0
	ldr	r3, [fp, #-32]
	str	r2, [r3, #4]
	ldr	r3, .L87+36
	ldr	r3, [r3]
	cmp	r3, #0
	beq	.L82
	ldr	r3, [fp, #-32]
	ldr	r2, [fp, #-8]
	str	r2, [r3, #8]
	b	.L83
.L82:
	ldr	r3, [fp, #-32]
	ldr	r2, [fp, #-12]
	str	r2, [r3, #8]
.L83:
	ldr	r3, [fp, #-32]
	mov	r2, #4
	str	r2, [r3, #12]
	ldr	r3, [fp, #-32]
	mov	r2, #0
	str	r2, [r3, #16]
	ldr	r3, [fp, #-32]
	add	r3, r3, #32
	mov	r0, r3
	bl	mem_virt_to_phys
	mov	r2, r0
	ldr	r3, [fp, #-32]
	str	r2, [r3, #20]
	ldr	r3, [fp, #-32]
	add	r3, r3, #32
	str	r3, [fp, #-32]
	ldr	r3, .L87+12
	ldr	r3, [r3]
	cmp	r3, #0
	bne	.L84
	ldr	r3, [fp, #-32]
	ldr	r2, .L87+40
	str	r2, [r3]
	b	.L85
.L84:
	ldr	r3, [fp, #-32]
	ldr	r2, .L87+44
	str	r2, [r3]
.L85:
	ldr	r0, [fp, #-16]
	bl	mem_virt_to_phys
	mov	r2, r0
	ldr	r3, [fp, #-32]
	str	r2, [r3, #4]
	ldr	r3, [fp, #-32]
	ldr	r2, [fp, #-28]
	str	r2, [r3, #8]
	ldr	r3, [fp, #-32]
	mov	r2, #4
	str	r2, [r3, #12]
	ldr	r3, [fp, #-32]
	mov	r2, #0
	str	r2, [r3, #16]
	ldr	r3, [fp, #-32]
	add	r3, r3, #32
	mov	r0, r3
	bl	mem_virt_to_phys
	mov	r2, r0
	ldr	r3, [fp, #-32]
	str	r2, [r3, #20]
	ldr	r3, [fp, #-32]
	add	r3, r3, #32
	str	r3, [fp, #-32]
	ldr	r3, [fp, #-20]
	add	r3, r3, #1
	str	r3, [fp, #-20]
.L81:
	ldr	r3, [fp, #-20]
	cmp	r3, #1000
	blt	.L86
	ldr	r3, [fp, #-32]
	sub	r3, r3, #32
	str	r3, [fp, #-32]
	ldr	r3, [fp, #-16]
	add	r3, r3, #4000
	mov	r0, r3
	bl	mem_virt_to_phys
	mov	r2, r0
	ldr	r3, [fp, #-32]
	str	r2, [r3, #20]
	nop
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L88:
	.align	2
.L87:
	.word	virtbase
	.word	2116026408
	.word	2116026396
	.word	delay_hw
	.word	2116075544
	.word	2116038660
	.word	pin2gpio
	.word	channels
	.word	67108872
	.word	invert_mode
	.word	67436616
	.word	67240008
	.size	init_ctrl_data, .-init_ctrl_data
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	init_hardware, %function
init_hardware:
	@ args = 0, pretend = 0, frame = 8
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{r4, fp, lr}
	add	fp, sp, #8
	sub	sp, sp, #12
	ldr	r3, .L94
	ldr	r3, [r3]
	str	r3, [fp, #-16]
	ldr	r3, .L94+4
	ldr	r3, [r3]
	cmp	r3, #0
	bne	.L90
	ldr	r3, .L94+8
	ldr	r3, [r3]
	mov	r2, #0
	str	r2, [r3]
	mov	r0, #10
	bl	udelay
	ldr	r3, .L94+12
	ldr	r3, [r3]
	add	r3, r3, #160
	ldr	r2, .L94+16
	str	r2, [r3]
	mov	r0, #100
	bl	udelay
	ldr	r3, .L94+12
	ldr	r3, [r3]
	add	r3, r3, #164
	ldr	r2, .L94+20
	str	r2, [r3]
	mov	r0, #100
	bl	udelay
	ldr	r3, .L94+12
	ldr	r3, [r3]
	add	r3, r3, #160
	ldr	r2, .L94+24
	str	r2, [r3]
	mov	r0, #100
	bl	udelay
	ldr	r3, .L94+8
	ldr	r3, [r3]
	add	r3, r3, #16
	mov	r2, #100
	str	r2, [r3]
	mov	r0, #10
	bl	udelay
	ldr	r3, .L94+8
	ldr	r3, [r3]
	add	r3, r3, #8
	ldr	r2, .L94+28
	str	r2, [r3]
	mov	r0, #10
	bl	udelay
	ldr	r3, .L94+8
	ldr	r3, [r3]
	mov	r2, #64
	str	r2, [r3]
	mov	r0, #10
	bl	udelay
	ldr	r3, .L94+8
	ldr	r3, [r3]
	mov	r2, #33
	str	r2, [r3]
	mov	r0, #10
	bl	udelay
	b	.L91
.L90:
	ldr	r3, .L94+32
	ldr	r3, [r3]
	mov	r2, #1
	str	r2, [r3]
	mov	r0, #100
	bl	udelay
	ldr	r3, .L94+12
	ldr	r3, [r3]
	add	r3, r3, #152
	ldr	r2, .L94+16
	str	r2, [r3]
	mov	r0, #100
	bl	udelay
	ldr	r3, .L94+12
	ldr	r3, [r3]
	add	r3, r3, #156
	ldr	r2, .L94+20
	str	r2, [r3]
	mov	r0, #100
	bl	udelay
	ldr	r3, .L94+12
	ldr	r3, [r3]
	add	r3, r3, #152
	ldr	r2, .L94+24
	str	r2, [r3]
	mov	r0, #100
	bl	udelay
	ldr	r3, .L94+32
	ldr	r3, [r3]
	add	r3, r3, #16
	mov	r2, #1073741824
	str	r2, [r3]
	mov	r0, #100
	bl	udelay
	ldr	r3, .L94+32
	ldr	r3, [r3]
	add	r3, r3, #8
	mov	r2, #101376
	str	r2, [r3]
	mov	r0, #100
	bl	udelay
	ldr	r3, .L94+32
	ldr	r3, [r3]
	ldr	r2, [r3]
	ldr	r3, .L94+32
	ldr	r3, [r3]
	orr	r2, r2, #24
	str	r2, [r3]
	mov	r0, #100
	bl	udelay
	ldr	r3, .L94+32
	ldr	r3, [r3]
	add	r3, r3, #20
	ldr	r2, .L94+36
	str	r2, [r3]
	mov	r0, #100
	bl	udelay
	ldr	r3, .L94+32
	ldr	r3, [r3]
	ldr	r2, [r3]
	ldr	r3, .L94+32
	ldr	r3, [r3]
	orr	r2, r2, #512
	str	r2, [r3]
	mov	r0, #100
	bl	udelay
.L91:
	ldr	r3, .L94+40
	ldr	r3, [r3]
	mov	r2, #-2147483648
	str	r2, [r3]
	mov	r0, #10
	bl	udelay
	ldr	r3, .L94+40
	ldr	r3, [r3]
	mov	r2, #6
	str	r2, [r3]
	ldr	r3, [fp, #-16]
	add	r2, r3, #4000
	ldr	r3, .L94+40
	ldr	r3, [r3]
	add	r4, r3, #4
	mov	r0, r2
	bl	mem_virt_to_phys
	mov	r3, r0
	str	r3, [r4]
	ldr	r3, .L94+40
	ldr	r3, [r3]
	add	r3, r3, #32
	mov	r2, #7
	str	r2, [r3]
	ldr	r3, .L94+40
	ldr	r3, [r3]
	ldr	r2, .L94+44
	str	r2, [r3]
	ldr	r3, .L94+4
	ldr	r3, [r3]
	cmp	r3, #1
	bne	.L93
	ldr	r3, .L94+32
	ldr	r3, [r3]
	ldr	r2, [r3]
	ldr	r3, .L94+32
	ldr	r3, [r3]
	orr	r2, r2, #4
	str	r2, [r3]
.L93:
	nop
	sub	sp, fp, #8
	@ sp needed
	pop	{r4, fp, pc}
.L95:
	.align	2
.L94:
	.word	virtbase
	.word	delay_hw
	.word	pwm_reg
	.word	clk_reg
	.word	1509949446
	.word	1510154240
	.word	1509949462
	.word	-2147479793
	.word	pcm_reg
	.word	1073758208
	.word	dma_reg
	.word	277348353
	.size	init_hardware, .-init_hardware
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	init_channel_pwm, %function
init_channel_pwm:
	@ args = 0, pretend = 0, frame = 8
	@ frame_needed = 1, uses_anonymous_args = 0
	@ link register save eliminated.
	str	fp, [sp, #-4]!
	add	fp, sp, #0
	sub	sp, sp, #12
	mov	r3, #0
	str	r3, [fp, #-8]
	b	.L97
.L98:
	ldr	r3, .L99
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	lsl	r3, r3, #2
	add	r3, r2, r3
	mov	r2, #0
	str	r2, [r3]	@ float
	ldr	r3, [fp, #-8]
	add	r3, r3, #1
	str	r3, [fp, #-8]
.L97:
	ldr	r3, .L99+4
	ldr	r3, [r3]
	ldr	r2, [fp, #-8]
	cmp	r2, r3
	blt	.L98
	nop
	nop
	add	sp, fp, #0
	@ sp needed
	ldr	fp, [sp], #4
	bx	lr
.L100:
	.align	2
.L99:
	.word	channel_pwm
	.word	channels
	.size	init_channel_pwm, .-init_channel_pwm
	.section	.rodata
	.align	2
.LC14:
	.ascii	"r+\000"
	.align	2
.LC15:
	.ascii	"%d=%f%c\000"
	.align	2
.LC16:
	.ascii	"Bad input: %s\000"
	.align	2
.LC17:
	.ascii	"Invalid channel number %d\012\000"
	.global	__aeabi_fcmplt
	.global	__aeabi_f2d
	.align	2
.LC18:
	.ascii	"Invalid value %f\012\000"
	.align	2
.LC19:
	.word	__stack_chk_guard
	.text
	.align	2
	.syntax unified
	.arm
	.fpu softvfp
	.type	go_go_go, %function
go_go_go:
	@ args = 0, pretend = 0, frame = 32
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{r4, fp, lr}
	add	fp, sp, #8
	sub	sp, sp, #44
	ldr	r3, .L117
	ldr	r3, [r3]
	str	r3, [fp, #-16]
	mov	r3,#0
	ldr	r1, .L117+4
	ldr	r0, .L117+8
	bl	fopen
	str	r0, [fp, #-24]
	ldr	r3, [fp, #-24]
	cmp	r3, #0
	bne	.L102
	ldr	r1, .L117+8
	ldr	r0, .L117+12
	bl	fatal
.L102:
	mov	r3, #0
	str	r3, [fp, #-40]
.L113:
	sub	r1, fp, #36
	sub	r3, fp, #40
	ldr	r2, [fp, #-24]
	mov	r0, r3
	bl	getline
	str	r0, [fp, #-20]
	ldr	r3, [fp, #-20]
	cmp	r3, #0
	blt	.L116
	ldr	r0, [fp, #-40]
	sub	r1, fp, #28
	sub	r2, fp, #32
	sub	r3, fp, #41
	str	r3, [sp]
	mov	r3, r1
	ldr	r1, .L117+16
	bl	__isoc99_sscanf
	str	r0, [fp, #-20]
	ldr	r3, [fp, #-20]
	cmp	r3, #3
	bne	.L105
	ldrb	r3, [fp, #-41]	@ zero_extendqisi2
	cmp	r3, #10
	beq	.L106
.L105:
	ldr	r3, .L117+20
	ldr	r3, [r3]
	ldr	r2, [fp, #-40]
	ldr	r1, .L117+24
	mov	r0, r3
	bl	fprintf
	b	.L104
.L106:
	ldr	r3, [fp, #-32]
	cmp	r3, #0
	blt	.L108
	ldr	r2, [fp, #-32]
	ldr	r3, .L117+28
	ldr	r3, [r3]
	cmp	r2, r3
	blt	.L109
.L108:
	ldr	r3, .L117+20
	ldr	r3, [r3]
	ldr	r2, [fp, #-32]
	ldr	r1, .L117+32
	mov	r0, r3
	bl	fprintf
	b	.L104
.L109:
	ldr	r3, [fp, #-28]	@ float
	mov	r1, #0
	mov	r0, r3
	bl	__aeabi_fcmplt
	mov	r3, r0
	cmp	r3, #0
	bne	.L110
	ldr	r3, [fp, #-28]	@ float
	mov	r1, #1065353216
	mov	r0, r3
	bl	__aeabi_fcmpgt
	mov	r3, r0
	cmp	r3, #0
	beq	.L115
.L110:
	ldr	r3, .L117+20
	ldr	r4, [r3]
	ldr	r3, [fp, #-28]	@ float
	mov	r0, r3
	bl	__aeabi_f2d
	mov	r2, r0
	mov	r3, r1
	ldr	r1, .L117+36
	mov	r0, r4
	bl	fprintf
	b	.L104
.L115:
	ldr	r3, [fp, #-32]
	ldr	r2, [fp, #-28]	@ float
	mov	r1, r2
	mov	r0, r3
	bl	set_pwm
	b	.L113
.L116:
	nop
.L104:
	b	.L113
.L118:
	.align	2
.L117:
	.word	.LC19
	.word	.LC14
	.word	.LC1
	.word	.LC8
	.word	.LC15
	.word	stderr
	.word	.LC16
	.word	channels
	.word	.LC17
	.word	.LC18
	.size	go_go_go, .-go_go_go
	.section	.rodata
	.align	2
.LC20:
	.ascii	"hipv\000"
	.align	2
.LC21:
	.ascii	"%s version %s\012\000"
	.align	2
.LC22:
	.ascii	"Usage: %s [-hipv] [pin] [pin] [pin]...\012pin      "
	.ascii	"      - is the pin for PWM. Multiple pins seperated"
	.ascii	" by a space accepted.\012\011\011E.g  ./sudo pi-bla"
	.ascii	"ster 22 25 17\012-h (--help)    - this information\012"
	.ascii	"-i (--invert)  - invert pin output (pulse LOW)\012-"
	.ascii	"p (--pcm)     - use pcm for dmascheduling\012-v (--"
	.ascii	"version) - version information\012\000"
	.align	2
.LC23:
	.word	__stack_chk_guard
	.text
	.align	2
	.global	parseargs
	.syntax unified
	.arm
	.fpu softvfp
	.type	parseargs, %function
parseargs:
	@ args = 0, pretend = 0, frame = 24
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #32
	str	r0, [fp, #-24]
	str	r1, [fp, #-28]
	ldr	r3, .L137
	ldr	r3, [r3]
	str	r3, [fp, #-8]
	mov	r3,#0
.L132:
	mov	r3, #0
	str	r3, [fp, #-16]
	sub	r3, fp, #16
	str	r3, [sp]
	ldr	r3, .L137+4
	ldr	r2, .L137+8
	ldr	r1, [fp, #-28]
	ldr	r0, [fp, #-24]
	bl	getopt_long
	str	r0, [fp, #-12]
	ldr	r3, [fp, #-12]
	cmn	r3, #1
	beq	.L135
	ldr	r3, [fp, #-12]
	cmp	r3, #118
	bgt	.L122
	ldr	r3, [fp, #-12]
	cmp	r3, #104
	bge	.L123
	ldr	r3, [fp, #-12]
	cmp	r3, #0
	beq	.L136
	ldr	r3, [fp, #-12]
	cmp	r3, #63
	beq	.L125
	b	.L122
.L123:
	ldr	r3, [fp, #-12]
	sub	r3, r3, #104
	cmp	r3, #14
	ldrls	pc, [pc, r3, asl #2]
	b	.L122
.L127:
	.word	.L130
	.word	.L129
	.word	.L122
	.word	.L122
	.word	.L122
	.word	.L122
	.word	.L122
	.word	.L122
	.word	.L128
	.word	.L122
	.word	.L122
	.word	.L122
	.word	.L122
	.word	.L122
	.word	.L126
.L130:
	ldr	r3, .L137+12
	ldr	r0, [r3]
	ldr	r3, [fp, #-28]
	ldr	r2, [r3]
	ldr	r3, .L137+16
	ldr	r1, .L137+20
	bl	fprintf
	ldr	r3, .L137+12
	ldr	r0, [r3]
	ldr	r3, [fp, #-28]
	ldr	r3, [r3]
	mov	r2, r3
	ldr	r1, .L137+24
	bl	fprintf
	mvn	r0, #0
	bl	exit
.L129:
	ldr	r3, .L137+28
	mov	r2, #1
	str	r2, [r3]
	b	.L131
.L128:
	ldr	r3, .L137+32
	mov	r2, #1
	str	r2, [r3]
	b	.L131
.L126:
	ldr	r3, .L137+12
	ldr	r0, [r3]
	ldr	r3, [fp, #-28]
	ldr	r2, [r3]
	ldr	r3, .L137+16
	ldr	r1, .L137+20
	bl	fprintf
	mvn	r0, #0
	bl	exit
.L125:
	mvn	r0, #0
	bl	exit
.L122:
	mvn	r0, #0
	bl	exit
.L136:
	nop
.L131:
	b	.L132
.L135:
	nop
	nop
	ldr	r3, .L137
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	eors	r2, r3, r2
	mov	r3, #0
	beq	.L133
	bl	__stack_chk_fail
.L133:
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L138:
	.align	2
.L137:
	.word	.LC23
	.word	longopts.6770
	.word	.LC20
	.word	stderr
	.word	VERSION
	.word	.LC21
	.word	.LC22
	.word	invert_mode
	.word	delay_hw
	.size	parseargs, .-parseargs
	.section	.rodata
	.align	2
.LC24:
	.ascii	"PWM\000"
	.align	2
.LC25:
	.ascii	"PCM\000"
	.align	2
.LC26:
	.ascii	"Using hardware:                 %5s\012\000"
	.align	2
.LC27:
	.ascii	"Number of channels:             %5d\012\000"
	.align	2
.LC28:
	.ascii	"PWM frequency:               %5d Hz\012\000"
	.align	2
.LC29:
	.ascii	"PWM steps:                      %5d\012\000"
	.align	2
.LC30:
	.ascii	"Maximum period (100  %%):      %5dus\012\000"
	.align	2
.LC31:
	.ascii	"Minimum period (%1.3f%%):      %5dus\012\000"
	.align	2
.LC32:
	.ascii	"pi-blaster: Failed to mmap physical pages: %m\012\000"
	.align	2
.LC33:
	.ascii	"pi-blaster: Virtual address is not page aligned\012"
	.ascii	"\000"
	.align	2
.LC34:
	.ascii	"pi-blaster: Failed to create %s: %m\012\000"
	.align	2
.LC35:
	.ascii	"pi-blaster: Failed to set permissions on %s: %m\012"
	.ascii	"\000"
	.align	2
.LC36:
	.ascii	"pi-blaster: Failed to daemonize process: %m\012\000"
	.text
	.align	2
	.global	main
	.syntax unified
	.arm
	.fpu softvfp
	.type	main, %function
main:
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	push	{fp, lr}
	add	fp, sp, #4
	sub	sp, sp, #24
	str	r0, [fp, #-16]
	str	r1, [fp, #-20]
	ldr	r3, [fp, #-16]
	sub	r3, r3, #1
	ldr	r2, .L156
	str	r3, [r2]
	ldr	r3, .L156
	ldr	r3, [r3]
	cmp	r3, #0
	ble	.L140
	ldr	r3, .L156
	ldr	r3, [r3]
	mov	r0, r3
	bl	malloc
	mov	r3, r0
	mov	r2, r3
	ldr	r3, .L156+4
	str	r2, [r3]
	ldr	r3, .L156
	ldr	r3, [r3]
	lsl	r3, r3, #2
	mov	r0, r3
	bl	malloc
	mov	r3, r0
	mov	r2, r3
	ldr	r3, .L156+8
	str	r2, [r3]
	mov	r3, #0
	str	r3, [fp, #-8]
	b	.L141
.L142:
	ldr	r3, [fp, #-8]
	add	r3, r3, #1
	lsl	r3, r3, #2
	ldr	r2, [fp, #-20]
	add	r3, r2, r3
	ldr	r3, [r3]
	mov	r0, r3
	bl	atoi
	mov	r1, r0
	ldr	r3, .L156+4
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	add	r3, r2, r3
	and	r2, r1, #255
	strb	r2, [r3]
	ldr	r3, [fp, #-8]
	add	r3, r3, #1
	str	r3, [fp, #-8]
.L141:
	ldr	r3, .L156
	ldr	r3, [r3]
	ldr	r2, [fp, #-8]
	cmp	r2, r3
	blt	.L142
	b	.L143
.L140:
	ldr	r3, .L156
	mov	r2, #8
	str	r2, [r3]
	ldr	r3, .L156
	ldr	r3, [r3]
	mov	r0, r3
	bl	malloc
	mov	r3, r0
	mov	r2, r3
	ldr	r3, .L156+4
	str	r2, [r3]
	ldr	r3, .L156
	ldr	r3, [r3]
	lsl	r3, r3, #2
	mov	r0, r3
	bl	malloc
	mov	r3, r0
	mov	r2, r3
	ldr	r3, .L156+8
	str	r2, [r3]
	mov	r3, #0
	str	r3, [fp, #-8]
	b	.L144
.L145:
	ldr	r3, .L156+4
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	add	r3, r2, r3
	ldr	r1, .L156+12
	ldr	r2, [fp, #-8]
	add	r2, r1, r2
	ldrb	r2, [r2]	@ zero_extendqisi2
	strb	r2, [r3]
	ldr	r3, [fp, #-8]
	add	r3, r3, #1
	str	r3, [fp, #-8]
.L144:
	ldr	r3, .L156
	ldr	r3, [r3]
	ldr	r2, [fp, #-8]
	cmp	r2, r3
	blt	.L145
.L143:
	ldr	r1, [fp, #-20]
	ldr	r0, [fp, #-16]
	bl	parseargs
	ldr	r3, .L156+16
	ldr	r3, [r3]
	cmp	r3, #0
	bne	.L146
	ldr	r3, .L156+20
	b	.L147
.L146:
	ldr	r3, .L156+24
.L147:
	mov	r1, r3
	ldr	r0, .L156+28
	bl	printf
	ldr	r3, .L156
	ldr	r3, [r3]
	mov	r1, r3
	ldr	r0, .L156+32
	bl	printf
	mov	r1, #100
	ldr	r0, .L156+36
	bl	printf
	mov	r1, #1000
	ldr	r0, .L156+40
	bl	printf
	ldr	r1, .L156+44
	ldr	r0, .L156+48
	bl	printf
	mov	r3, #10
	str	r3, [sp]
	ldr	r2, .L156+52
	ldr	r3, .L156+56
	ldr	r0, .L156+60
	bl	printf
	bl	setup_sighandlers
	mov	r1, #36
	ldr	r0, .L156+64
	bl	map_peripheral
	mov	r3, r0
	ldr	r2, .L156+68
	str	r3, [r2]
	mov	r1, #40
	ldr	r0, .L156+72
	bl	map_peripheral
	mov	r3, r0
	ldr	r2, .L156+76
	str	r3, [r2]
	mov	r1, #36
	ldr	r0, .L156+80
	bl	map_peripheral
	mov	r3, r0
	ldr	r2, .L156+84
	str	r3, [r2]
	mov	r1, #168
	ldr	r0, .L156+88
	bl	map_peripheral
	mov	r3, r0
	ldr	r2, .L156+92
	str	r3, [r2]
	mov	r1, #256
	ldr	r0, .L156+96
	bl	map_peripheral
	mov	r3, r0
	ldr	r2, .L156+100
	str	r3, [r2]
	mov	r3, #0
	str	r3, [sp, #4]
	mvn	r3, #0
	str	r3, [sp]
	ldr	r3, .L156+104
	mov	r2, #3
	mov	r1, #69632
	mov	r0, #0
	bl	mmap
	mov	r3, r0
	ldr	r2, .L156+108
	str	r3, [r2]
	ldr	r3, .L156+108
	ldr	r3, [r3]
	cmn	r3, #1
	bne	.L148
	ldr	r0, .L156+112
	bl	fatal
.L148:
	ldr	r3, .L156+108
	ldr	r3, [r3]
	lsl	r3, r3, #20
	lsr	r3, r3, #20
	cmp	r3, #0
	beq	.L149
	ldr	r0, .L156+116
	bl	fatal
.L149:
	bl	make_pagemap
	mov	r3, #0
	str	r3, [fp, #-8]
	b	.L150
.L151:
	ldr	r3, .L156+4
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	add	r3, r2, r3
	ldrb	r3, [r3]	@ zero_extendqisi2
	mov	r2, r3
	ldr	r3, .L156+120
	ldr	r3, [r3]
	mov	r1, r3
	mov	r0, r2
	bl	gpio_set
	ldr	r3, .L156+4
	ldr	r2, [r3]
	ldr	r3, [fp, #-8]
	add	r3, r2, r3
	ldrb	r3, [r3]	@ zero_extendqisi2
	mov	r1, #1
	mov	r0, r3
	bl	gpio_set_mode
	ldr	r3, [fp, #-8]
	add	r3, r3, #1
	str	r3, [fp, #-8]
.L150:
	ldr	r3, .L156
	ldr	r3, [r3]
	ldr	r2, [fp, #-8]
	cmp	r2, r3
	blt	.L151
	bl	init_ctrl_data
	bl	init_hardware
	bl	init_channel_pwm
	ldr	r0, .L156+124
	bl	unlink
	ldr	r1, .L156+128
	ldr	r0, .L156+124
	bl	mkfifo
	mov	r3, r0
	cmp	r3, #0
	bge	.L152
	ldr	r1, .L156+124
	ldr	r0, .L156+132
	bl	fatal
.L152:
	ldr	r1, .L156+128
	ldr	r0, .L156+124
	bl	chmod
	mov	r3, r0
	cmp	r3, #0
	bge	.L153
	ldr	r1, .L156+124
	ldr	r0, .L156+136
	bl	fatal
.L153:
	mov	r1, #1
	mov	r0, #0
	bl	daemon
	mov	r3, r0
	cmp	r3, #0
	bge	.L154
	ldr	r0, .L156+140
	bl	fatal
.L154:
	bl	go_go_go
	mov	r3, #0
	mov	r0, r3
	sub	sp, fp, #4
	@ sp needed
	pop	{fp, pc}
.L157:
	.align	2
.L156:
	.word	channels
	.word	pin2gpio
	.word	channel_pwm
	.word	defaultpins
	.word	delay_hw
	.word	.LC24
	.word	.LC25
	.word	.LC26
	.word	.LC27
	.word	.LC28
	.word	.LC29
	.word	10000
	.word	.LC30
	.word	-1717986918
	.word	1069128089
	.word	.LC31
	.word	536899584
	.word	dma_reg
	.word	539017216
	.word	pwm_reg
	.word	538980352
	.word	pcm_reg
	.word	537923584
	.word	clk_reg
	.word	538968064
	.word	gpio_reg
	.word	24609
	.word	virtbase
	.word	.LC32
	.word	.LC33
	.word	invert_mode
	.word	.LC1
	.word	438
	.word	.LC34
	.word	.LC35
	.word	.LC36
	.size	main, .-main
	.section	.rodata
	.align	2
.LC37:
	.ascii	"help\000"
	.align	2
.LC38:
	.ascii	"invert\000"
	.align	2
.LC39:
	.ascii	"pcm\000"
	.align	2
.LC40:
	.ascii	"version\000"
	.data
	.align	2
	.type	longopts.6770, %object
	.size	longopts.6770, 80
longopts.6770:
	.word	.LC37
	.word	0
	.word	0
	.word	104
	.word	.LC38
	.word	0
	.word	0
	.word	105
	.word	.LC39
	.word	0
	.word	0
	.word	112
	.word	.LC40
	.word	0
	.word	0
	.word	118
	.word	0
	.word	0
	.word	0
	.word	0
	.ident	"GCC: (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0"
	.section	.note.GNU-stack,"",%progbits
