t.moveTo(sharp(x2s(0)), 20.5);
			context.lineTo(sharp(x2s(0)), -0.5);
			context.stroke();
			context.closePath();
			context.setLineDash([]);
		}

		// functions
		for(var i = 0; i < i_fs.length; ++i) {
			const f = i_fs[i];
			const color = i_colors[i];
			// draw
			context.beginPath();
			var the_gap = true;
			var old_i;
			for(var j = -0.5 + atan_scale_checked; j < w + 0.5 - atan_scale_checked; j += 2.) {
				const x = s2x(j);
				const y = f(x);
				const i = y2s(y);
				if(the_gap) {
					context.m