All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <200901020213.30658.rob@landley.net>

diff --git a/a/1.txt b/N1/1.txt
index fd845ac..1d5bdc2 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -1,505 +1,6 @@
 From: Rob Landley <rob@landley.net>
-
-Replace kernel/timeconst.pl with kernel/timeconst.sh.  The new shell script
-is much simpler, about 1/4 the size, and runs on Red Hat 9 from 2003.
-
-Peter Anvin added this perl to 2.6.25.  Before that, the kernel had never
-required perl to build.
-
-Signed-off-by: Rob Landley <rob@landley.net>
----
-
- kernel/Makefile     |    4 
- kernel/timeconst.pl |  378 ------------------------------------------
- kernel/timeconst.sh |   91 ++++++++++
- 3 files changed, 93 insertions(+), 380 deletions(-)
-
-diff -r d0c7611dcfd6 kernel/Makefile
---- a/kernel/Makefile	Tue Dec 30 17:48:25 2008 -0800
-+++ b/kernel/Makefile	Fri Jan 02 00:10:44 2009 -0600
-@@ -115,7 +115,7 @@
- $(obj)/time.o: $(obj)/timeconst.h
- 
- quiet_cmd_timeconst  = TIMEC   $@
--      cmd_timeconst  = $(PERL) $< $(CONFIG_HZ) > $@
-+      cmd_timeconst  = $(CONFIG_SHELL) $< $(CONFIG_HZ) > $@
- targets += timeconst.h
--$(obj)/timeconst.h: $(src)/timeconst.pl FORCE
-+$(obj)/timeconst.h: $(src)/timeconst.sh FORCE
- 	$(call if_changed,timeconst)
---- /dev/null	1969-12-31 00:00:00.000000000 -0600
-+++ hg/kernel/timeconst.sh	2009-01-01 23:53:17.000000000 -0600
-@@ -0,0 +1,91 @@
-+#!/bin/bash
-+
-+if [ $# -ne 1 ]
-+then
-+	echo "Usage: timeconst.sh HZ"
-+	exit 1
-+fi
-+
-+HZ=$1
-+
-+# Sanity test: even the shell in Red Hat 9 (circa 2003) supported 64 bit math.
-+
-+[ $((1<<32)) -lt 0 ] && exit 1
-+
-+# Output start of header file
-+
-+cat << EOF
-+/* Automatically generated by kernel/timeconst.sh */
-+/* Conversion constants for HZ == $HZ */
-+
-+#ifndef KERNEL_TIMECONST_H
-+#define KERNEL_TIMECONST_H
-+
-+#include <linux/param.h>
-+#include <linux/types.h>
-+
-+#if HZ != $HZ
-+#error "kernel/timeconst.h has the wrong HZ value!"
-+#endif
-+
-+EOF
-+
-+# For both Miliseconds and Microseconds
-+
-+for i in "MSEC 1000" "USEC 1000000"
-+do
-+	NAME=$(echo $i | awk '{print $1}')
-+	PERIOD=$(echo $i | awk '{print $2}')
-+
-+	# Find greatest common denominator (using Euclid's algorithm)
-+
-+	A=$HZ
-+	B=$PERIOD
-+
-+	while [ $B -ne 0 ]
-+	do
-+		C=$(($A%$B))
-+		A=$B
-+		B=$C
-+	done
-+
-+	GCD=$A
-+
-+	# Do this for each direction (HZ_TO_PERIOD and PERIOD_TO_HZ)
-+
-+	for DIRECTION in 0 1
-+	do
-+		if [ $DIRECTION -eq 0 ]
-+		then
-+			CONVERT="HZ_TO_${NAME}"
-+			FROM=$HZ
-+			TO=$PERIOD
-+		else
-+			CONVERT="${NAME}_TO_HZ"
-+			FROM=$PERIOD
-+			TO=$HZ
-+		fi
-+
-+		# How many shift bits give 32 bits of significant data?
-+
-+		SHIFT=0
-+		while [ $(( (($TO<<$SHIFT)+$FROM-1)/$FROM )) -lt $((1<<31)) ]
-+		do
-+			SHIFT=$(( $SHIFT+1 ))
-+		done
-+
-+		MUL32=$(( (($TO<<$SHIFT)+$FROM-1)/$FROM ))
-+		MUL32=$(printf %x $MUL32)
-+		echo "#define ${CONVERT}_MUL32	U64_C(0x$MUL32)"
-+		ADJ32=$(($FROM/$GCD))
-+		ADJ32=$(( (($ADJ32-1)<<$SHIFT)/$ADJ32 ))
-+		ADJ32=$(printf %x $ADJ32)
-+		echo "#define ${CONVERT}_ADJ32	U64_C(0x$ADJ32)"
-+		echo "#define ${CONVERT}_SHR32	$SHIFT"
-+		echo "#define ${CONVERT}_NUM		U64_C($(($TO/$GCD)))"
-+		echo "#define ${CONVERT}_DEN		U64_C($(($FROM/$GCD)))"
-+	done
-+done
-+
-+echo
-+echo "#endif /* KERNEL_TIMECHONST_H */"
---- hg/kernel/timeconst.pl	2008-11-22 19:09:13.000000000 -0600
-+++ /dev/null	1969-12-31 00:00:00.000000000 -0600
-@@ -1,378 +0,0 @@
--#!/usr/bin/perl
--# -----------------------------------------------------------------------
--#
--#   Copyright 2007-2008 rPath, Inc. - All Rights Reserved
--#
--#   This file is part of the Linux kernel, and is made available under
--#   the terms of the GNU General Public License version 2 or (at your
--#   option) any later version; incorporated herein by reference.
--#
--# -----------------------------------------------------------------------
--#
--
--#
--# Usage: timeconst.pl HZ > timeconst.h
--#
--
--# Precomputed values for systems without Math::BigInt
--# Generated by:
--# timeconst.pl --can 24 32 48 64 100 122 128 200 250 256 300 512 1000 1024 1200
--%canned_values = (
--	24 => [
--		'0xa6aaaaab','0x2aaaaaa',26,
--		125,3,
--		'0xc49ba5e4','0x1fbe76c8b4',37,
--		3,125,
--		'0xa2c2aaab','0xaaaa',16,
--		125000,3,
--		'0xc9539b89','0x7fffbce4217d',47,
--		3,125000,
--	], 32 => [
--		'0xfa000000','0x6000000',27,
--		125,4,
--		'0x83126e98','0xfdf3b645a',36,
--		4,125,
--		'0xf4240000','0x0',17,
--		31250,1,
--		'0x8637bd06','0x3fff79c842fa',46,
--		1,31250,
--	], 48 => [
--		'0xa6aaaaab','0x6aaaaaa',27,
--		125,6,
--		'0xc49ba5e4','0xfdf3b645a',36,
--		6,125,
--		'0xa2c2aaab','0x15555',17,
--		62500,3,
--		'0xc9539b89','0x3fffbce4217d',46,
--		3,62500,
--	], 64 => [
--		'0xfa000000','0xe000000',28,
--		125,8,
--		'0x83126e98','0x7ef9db22d',35,
--		8,125,
--		'0xf4240000','0x0',18,
--		15625,1,
--		'0x8637bd06','0x1fff79c842fa',45,
--		1,15625,
--	], 100 => [
--		'0xa0000000','0x0',28,
--		10,1,
--		'0xcccccccd','0x733333333',35,
--		1,10,
--		'0x9c400000','0x0',18,
--		10000,1,
--		'0xd1b71759','0x1fff2e48e8a7',45,
--		1,10000,
--	], 122 => [
--		'0x8325c53f','0xfbcda3a',28,
--		500,61,
--		'0xf9db22d1','0x7fbe76c8b',35,
--		61,500,
--		'0x8012e2a0','0x3ef36',18,
--		500000,61,
--		'0xffda4053','0x1ffffbce4217',45,
--		61,500000,
--	], 128 => [
--		'0xfa000000','0x1e000000',29,
--		125,16,
--		'0x83126e98','0x3f7ced916',34,
--		16,125,
--		'0xf4240000','0x40000',19,
--		15625,2,
--		'0x8637bd06','0xfffbce4217d',44,
--		2,15625,
--	], 200 => [
--		'0xa0000000','0x0',29,
--		5,1,
--		'0xcccccccd','0x333333333',34,
--		1,5,
--		'0x9c400000','0x0',19,
--		5000,1,
--		'0xd1b71759','0xfff2e48e8a7',44,
--		1,5000,
--	], 250 => [
--		'0x80000000','0x0',29,
--		4,1,
--		'0x80000000','0x180000000',33,
--		1,4,
--		'0xfa000000','0x0',20,
--		4000,1,
--		'0x83126e98','0x7ff7ced9168',43,
--		1,4000,
--	], 256 => [
--		'0xfa000000','0x3e000000',30,
--		125,32,
--		'0x83126e98','0x1fbe76c8b',33,
--		32,125,
--		'0xf4240000','0xc0000',20,
--		15625,4,
--		'0x8637bd06','0x7ffde7210be',43,
--		4,15625,
--	], 300 => [
--		'0xd5555556','0x2aaaaaaa',30,
--		10,3,
--		'0x9999999a','0x1cccccccc',33,
--		3,10,
--		'0xd0555556','0xaaaaa',20,
--		10000,3,
--		'0x9d495183','0x7ffcb923a29',43,
--		3,10000,
--	], 512 => [
--		'0xfa000000','0x7e000000',31,
--		125,64,
--		'0x83126e98','0xfdf3b645',32,
--		64,125,
--		'0xf4240000','0x1c0000',21,
--		15625,8,
--		'0x8637bd06','0x3ffef39085f',42,
--		8,15625,
--	], 1000 => [
--		'0x80000000','0x0',31,
--		1,1,
--		'0x80000000','0x0',31,
--		1,1,
--		'0xfa000000','0x0',22,
--		1000,1,
--		'0x83126e98','0x1ff7ced9168',41,
--		1,1000,
--	], 1024 => [
--		'0xfa000000','0xfe000000',32,
--		125,128,
--		'0x83126e98','0x7ef9db22',31,
--		128,125,
--		'0xf4240000','0x3c0000',22,
--		15625,16,
--		'0x8637bd06','0x1fff79c842f',41,
--		16,15625,
--	], 1200 => [
--		'0xd5555556','0xd5555555',32,
--		5,6,
--		'0x9999999a','0x66666666',31,
--		6,5,
--		'0xd0555556','0x2aaaaa',22,
--		2500,3,
--		'0x9d495183','0x1ffcb923a29',41,
--		3,2500,
--	]
--);
--
--$has_bigint = eval 'use Math::BigInt qw(bgcd); 1;';
--
--sub bint($)
--{
--	my($x) = @_;
--	return Math::BigInt->new($x);
--}
--
--#
--# Constants for division by reciprocal multiplication.
--# (bits, numerator, denominator)
--#
--sub fmul($$$)
--{
--	my ($b,$n,$d) = @_;
--
--	$n = bint($n);
--	$d = bint($d);
--
--	return scalar (($n << $b)+$d-bint(1))/$d;
--}
--
--sub fadj($$$)
--{
--	my($b,$n,$d) = @_;
--
--	$n = bint($n);
--	$d = bint($d);
--
--	$d = $d/bgcd($n, $d);
--	return scalar (($d-bint(1)) << $b)/$d;
--}
--
--sub fmuls($$$) {
--	my($b,$n,$d) = @_;
--	my($s,$m);
--	my($thres) = bint(1) << ($b-1);
--
--	$n = bint($n);
--	$d = bint($d);
--
--	for ($s = 0; 1; $s++) {
--		$m = fmul($s,$n,$d);
--		return $s if ($m >= $thres);
--	}
--	return 0;
--}
--
--# Generate a hex value if the result fits in 64 bits;
--# otherwise skip.
--sub bignum_hex($) {
--	my($x) = @_;
--	my $s = $x->as_hex();
--
--	return (length($s) > 18) ? undef : $s;
--}
--
--# Provides mul, adj, and shr factors for a specific
--# (bit, time, hz) combination
--sub muladj($$$) {
--	my($b, $t, $hz) = @_;
--	my $s = fmuls($b, $t, $hz);
--	my $m = fmul($s, $t, $hz);
--	my $a = fadj($s, $t, $hz);
--	return (bignum_hex($m), bignum_hex($a), $s);
--}
--
--# Provides numerator, denominator values
--sub numden($$) {
--	my($n, $d) = @_;
--	my $g = bgcd($n, $d);
--	return ($n/$g, $d/$g);
--}
--
--# All values for a specific (time, hz) combo
--sub conversions($$) {
--	my ($t, $hz) = @_;
--	my @val = ();
--
--	# HZ_TO_xx
--	push(@val, muladj(32, $t, $hz));
--	push(@val, numden($t, $hz));
--
--	# xx_TO_HZ
--	push(@val, muladj(32, $hz, $t));
--	push(@val, numden($hz, $t));
--
--	return @val;
--}
--
--sub compute_values($) {
--	my($hz) = @_;
--	my @val = ();
--	my $s, $m, $a, $g;
--
--	if (!$has_bigint) {
--		die "$0: HZ == $hz not canned and ".
--		    "Math::BigInt not available\n";
--	}
--
--	# MSEC conversions
--	push(@val, conversions(1000, $hz));
--
--	# USEC conversions
--	push(@val, conversions(1000000, $hz));
--
--	return @val;
--}
--
--sub outputval($$)
--{
--	my($name, $val) = @_;
--	my $csuf;
--
--	if (defined($val)) {
--	    if ($name !~ /SHR/) {
--		$val = "U64_C($val)";
--	    }
--	    printf "#define %-23s %s\n", $name.$csuf, $val.$csuf;
--	}
--}
--
--sub output($@)
--{
--	my($hz, @val) = @_;
--	my $pfx, $bit, $suf, $s, $m, $a;
--
--	print "/* Automatically generated by kernel/timeconst.pl */\n";
--	print "/* Conversion constants for HZ == $hz */\n";
--	print "\n";
--	print "#ifndef KERNEL_TIMECONST_H\n";
--	print "#define KERNEL_TIMECONST_H\n";
--	print "\n";
--
--	print "#include <linux/param.h>\n";
--	print "#include <linux/types.h>\n";
--
--	print "\n";
--	print "#if HZ != $hz\n";
--	print "#error \"kernel/timeconst.h has the wrong HZ value!\"\n";
--	print "#endif\n";
--	print "\n";
--
--	foreach $pfx ('HZ_TO_MSEC','MSEC_TO_HZ',
--		      'HZ_TO_USEC','USEC_TO_HZ') {
--		foreach $bit (32) {
--			foreach $suf ('MUL', 'ADJ', 'SHR') {
--				outputval("${pfx}_$suf$bit", shift(@val));
--			}
--		}
--		foreach $suf ('NUM', 'DEN') {
--			outputval("${pfx}_$suf", shift(@val));
--		}
--	}
--
--	print "\n";
--	print "#endif /* KERNEL_TIMECONST_H */\n";
--}
--
--# Pretty-print Perl values
--sub perlvals(@) {
--	my $v;
--	my @l = ();
--
--	foreach $v (@_) {
--		if (!defined($v)) {
--			push(@l, 'undef');
--		} elsif ($v =~ /^0x/) {
--			push(@l, "\'".$v."\'");
--		} else {
--			push(@l, $v.'');
--		}
--	}
--	return join(',', @l);
--}
--
--($hz) = @ARGV;
--
--# Use this to generate the %canned_values structure
--if ($hz eq '--can') {
--	shift(@ARGV);
--	@hzlist = sort {$a <=> $b} (@ARGV);
--
--	print "# Precomputed values for systems without Math::BigInt\n";
--	print "# Generated by:\n";
--	print "# timeconst.pl --can ", join(' ', @hzlist), "\n";
--	print "\%canned_values = (\n";
--	my $pf = "\t";
--	foreach $hz (@hzlist) {
--		my @values = compute_values($hz);
--		print "$pf$hz => [\n";
--		while (scalar(@values)) {
--			my $bit;
--			foreach $bit (32) {
--				my $m = shift(@values);
--				my $a = shift(@values);
--				my $s = shift(@values);
--				print "\t\t", perlvals($m,$a,$s), ",\n";
--			}
--			my $n = shift(@values);
--			my $d = shift(@values);
--			print "\t\t", perlvals($n,$d), ",\n";
--		}
--		print "\t]";
--		$pf = ', ';
--	}
--	print "\n);\n";
--} else {
--	$hz += 0;			# Force to number
--	if ($hz < 1) {
--		die "Usage: $0 HZ\n";
--	}
--
--	@val = @{$canned_values{$hz}};
--	if (!defined(@val)) {
--		@val = compute_values($hz);
--	}
--	output($hz, @val);
--}
--exit 0;
-\0
+Replace kernel/timeconst.pl with kernel/timeconst.sh.  The new shell scriptis much simpler, about 1/4 the size, and runs on Red Hat 9 from 2003.
+Peter Anvin added this perl to 2.6.25.  Before that, the kernel had neverrequired perl to build.
+Signed-off-by: Rob Landley <rob@landley.net>---
+ kernel/Makefile     |    4  kernel/timeconst.pl |  378 ------------------------------------------ kernel/timeconst.sh |   91 ++++++++++ 3 files changed, 93 insertions(+), 380 deletions(-)
+diff -r d0c7611dcfd6 kernel/Makefile--- a/kernel/Makefile	Tue Dec 30 17:48:25 2008 -0800+++ b/kernel/Makefile	Fri Jan 02 00:10:44 2009 -0600@@ -115,7 +115,7 @@ $(obj)/time.o: $(obj)/timeconst.h  quiet_cmd_timeconst  = TIMEC   $@-      cmd_timeconst  = $(PERL) $< $(CONFIG_HZ) > $@+      cmd_timeconst  = $(CONFIG_SHELL) $< $(CONFIG_HZ) > $@ targets += timeconst.h-$(obj)/timeconst.h: $(src)/timeconst.pl FORCE+$(obj)/timeconst.h: $(src)/timeconst.sh FORCE 	$(call if_changed,timeconst)--- /dev/null	1969-12-31 00:00:00.000000000 -0600+++ hg/kernel/timeconst.sh	2009-01-01 23:53:17.000000000 -0600@@ -0,0 +1,91 @@+#!/bin/bash++if [ $# -ne 1 ]+then+	echo "Usage: timeconst.sh HZ"+	exit 1+fi++HZ=$1++# Sanity test: even the shell in Red Hat 9 (circa 2003) supported 64 bit math.++[ $((1<<32)) -lt 0 ] && exit 1++# Output start of header file++cat << EOF+/* Automatically generated by kernel/timeconst.sh */+/* Conversion constants for HZ == $HZ */++#ifndef KERNEL_TIMECONST_H+#define KERNEL_TIMECONST_H++#include <linux/param.h>+#include <linux/types.h>++#if HZ != $HZ+#error "kernel/timeconst.h has the wrong HZ value!"+#endif++EOF++# For both Miliseconds and Microseconds++for i in "MSEC 1000" "USEC 1000000"+do+	NAME=$(echo $i | awk '{print $1}')+	PERIOD=$(echo $i | awk '{print $2}')++	# Find greatest common denominator (using Euclid's algorithm)++	A=$HZ+	B=$PERIOD++	while [ $B -ne 0 ]+	do+		C=$(($A%$B))+		A=$B+		B=$C+	done++	GCD=$A++	# Do this for each direction (HZ_TO_PERIOD and PERIOD_TO_HZ)++	for DIRECTION in 0 1+	do+		if [ $DIRECTION -eq 0 ]+		then+			CONVERT="HZ_TO_${NAME}"+			FROM=$HZ+			TO=$PERIOD+		else+			CONVERT="${NAME}_TO_HZ"+			FROM=$PERIOD+			TO=$HZ+		fi++		# How many shift bits give 32 bits of significant data?++		SHIFT=0+		while [ $(( (($TO<<$SHIFT)+$FROM-1)/$FROM )) -lt $((1<<31)) ]+		do+			SHIFT=$(( $SHIFT+1 ))+		done++		MUL32=$(( (($TO<<$SHIFT)+$FROM-1)/$FROM ))+		MUL32=$(printf %x $MUL32)+		echo "#define ${CONVERT}_MUL32	U64_C(0x$MUL32)"+		ADJ32=$(($FROM/$GCD))+		ADJ32=$(( (($ADJ32-1)<<$SHIFT)/$ADJ32 ))+		ADJ32=$(printf %x $ADJ32)+		echo "#define ${CONVERT}_ADJ32	U64_C(0x$ADJ32)"+		echo "#define ${CONVERT}_SHR32	$SHIFT"+		echo "#define ${CONVERT}_NUM		U64_C($(($TO/$GCD)))"+		echo "#define ${CONVERT}_DEN		U64_C($(($FROM/$GCD)))"+	done+done++echo+echo "#endif /* KERNEL_TIMECHONST_H */"--- hg/kernel/timeconst.pl	2008-11-22 19:09:13.000000000 -0600+++ /dev/null	1969-12-31 00:00:00.000000000 -0600@@ -1,378 +0,0 @@-#!/usr/bin/perl-# ------------------------------------------------------------------------#-#   Copyright 2007-2008 rPath, Inc. - All Rights Reserved-#-#   This file is part of the Linux kernel, and is made available under-#   the terms of the GNU General Public License version 2 or (at your-#   option) any later version; incorporated herein by reference.-#-# ------------------------------------------------------------------------#--#-# Usage: timeconst.pl HZ > timeconst.h-#--# Precomputed values for systems without Math::BigInt-# Generated by:-# timeconst.pl --can 24 32 48 64 100 122 128 200 250 256 300 512 1000 1024 1200-%canned_values = (-	24 => [-		'0xa6aaaaab','0x2aaaaaa',26,-		125,3,-		'0xc49ba5e4','0x1fbe76c8b4',37,-		3,125,-		'0xa2c2aaab','0xaaaa',16,-		125000,3,-		'0xc9539b89','0x7fffbce4217d',47,-		3,125000,-	], 32 => [-		'0xfa000000','0x6000000',27,-		125,4,-		'0x83126e98','0xfdf3b645a',36,-		4,125,-		'0xf4240000','0x0',17,-		31250,1,-		'0x8637bd06','0x3fff79c842fa',46,-		1,31250,-	], 48 => [-		'0xa6aaaaab','0x6aaaaaa',27,-		125,6,-		'0xc49ba5e4','0xfdf3b645a',36,-		6,125,-		'0xa2c2aaab','0x15555',17,-		62500,3,-		'0xc9539b89','0x3fffbce4217d',46,-		3,62500,-	], 64 => [-		'0xfa000000','0xe000000',28,-		125,8,-		'0x83126e98','0x7ef9db22d',35,-		8,125,-		'0xf4240000','0x0',18,-		15625,1,-		'0x8637bd06','0x1fff79c842fa',45,-		1,15625,-	], 100 => [-		'0xa0000000','0x0',28,-		10,1,-		'0xcccccccd','0x733333333',35,-		1,10,-		'0x9c400000','0x0',18,-		10000,1,-		'0xd1b71759','0x1fff2e48e8a7',45,-		1,10000,-	], 122 => [-		'0x8325c53f','0xfbcda3a',28,-		500,61,-		'0xf9db22d1','0x7fbe76c8b',35,-		61,500,-		'0x8012e2a0','0x3ef36',18,-		500000,61,-		'0xffda4053','0x1ffffbce4217',45,-		61,500000,-	], 128 => [-		'0xfa000000','0x1e000000',29,-		125,16,-		'0x83126e98','0x3f7ced916',34,-		16,125,-		'0xf4240000','0x40000',19,-		15625,2,-		'0x8637bd06','0xfffbce4217d',44,-		2,15625,-	], 200 => [-		'0xa0000000','0x0',29,-		5,1,-		'0xcccccccd','0x333333333',34,-		1,5,-		'0x9c400000','0x0',19,-		5000,1,-		'0xd1b71759','0xfff2e48e8a7',44,-		1,5000,-	], 250 => [-		'0x80000000','0x0',29,-		4,1,-		'0x80000000','0x180000000',33,-		1,4,-		'0xfa000000','0x0',20,-		4000,1,-		'0x83126e98','0x7ff7ced9168',43,-		1,4000,-	], 256 => [-		'0xfa000000','0x3e000000',30,-		125,32,-		'0x83126e98','0x1fbe76c8b',33,-		32,125,-		'0xf4240000','0xc0000',20,-		15625,4,-		'0x8637bd06','0x7ffde7210be',43,-		4,15625,-	], 300 => [-		'0xd5555556','0x2aaaaaaa',30,-		10,3,-		'0x9999999a','0x1cccccccc',33,-		3,10,-		'0xd0555556','0xaaaaa',20,-		10000,3,-		'0x9d495183','0x7ffcb923a29',43,-		3,10000,-	], 512 => [-		'0xfa000000','0x7e000000',31,-		125,64,-		'0x83126e98','0xfdf3b645',32,-		64,125,-		'0xf4240000','0x1c0000',21,-		15625,8,-		'0x8637bd06','0x3ffef39085f',42,-		8,15625,-	], 1000 => [-		'0x80000000','0x0',31,-		1,1,-		'0x80000000','0x0',31,-		1,1,-		'0xfa000000','0x0',22,-		1000,1,-		'0x83126e98','0x1ff7ced9168',41,-		1,1000,-	], 1024 => [-		'0xfa000000','0xfe000000',32,-		125,128,-		'0x83126e98','0x7ef9db22',31,-		128,125,-		'0xf4240000','0x3c0000',22,-		15625,16,-		'0x8637bd06','0x1fff79c842f',41,-		16,15625,-	], 1200 => [-		'0xd5555556','0xd5555555',32,-		5,6,-		'0x9999999a','0x66666666',31,-		6,5,-		'0xd0555556','0x2aaaaa',22,-		2500,3,-		'0x9d495183','0x1ffcb923a29',41,-		3,2500,-	]-);--$has_bigint = eval 'use Math::BigInt qw(bgcd); 1;';--sub bint($)-{-	my($x) = @_;-	return Math::BigInt->new($x);-}--#-# Constants for division by reciprocal multiplication.-# (bits, numerator, denominator)-#-sub fmul($$$)-{-	my ($b,$n,$d) = @_;--	$n = bint($n);-	$d = bint($d);--	return scalar (($n << $b)+$d-bint(1))/$d;-}--sub fadj($$$)-{-	my($b,$n,$d) = @_;--	$n = bint($n);-	$d = bint($d);--	$d = $d/bgcd($n, $d);-	return scalar (($d-bint(1)) << $b)/$d;-}--sub fmuls($$$) {-	my($b,$n,$d) = @_;-	my($s,$m);-	my($thres) = bint(1) << ($b-1);--	$n = bint($n);-	$d = bint($d);--	for ($s = 0; 1; $s++) {-		$m = fmul($s,$n,$d);-		return $s if ($m >= $thres);-	}-	return 0;-}--# Generate a hex value if the result fits in 64 bits;-# otherwise skip.-sub bignum_hex($) {-	my($x) = @_;-	my $s = $x->as_hex();--	return (length($s) > 18) ? undef : $s;-}--# Provides mul, adj, and shr factors for a specific-# (bit, time, hz) combination-sub muladj($$$) {-	my($b, $t, $hz) = @_;-	my $s = fmuls($b, $t, $hz);-	my $m = fmul($s, $t, $hz);-	my $a = fadj($s, $t, $hz);-	return (bignum_hex($m), bignum_hex($a), $s);-}--# Provides numerator, denominator values-sub numden($$) {-	my($n, $d) = @_;-	my $g = bgcd($n, $d);-	return ($n/$g, $d/$g);-}--# All values for a specific (time, hz) combo-sub conversions($$) {-	my ($t, $hz) = @_;-	my @val = ();--	# HZ_TO_xx-	push(@val, muladj(32, $t, $hz));-	push(@val, numden($t, $hz));--	# xx_TO_HZ-	push(@val, muladj(32, $hz, $t));-	push(@val, numden($hz, $t));--	return @val;-}--sub compute_values($) {-	my($hz) = @_;-	my @val = ();-	my $s, $m, $a, $g;--	if (!$has_bigint) {-		die "$0: HZ == $hz not canned and ".-		    "Math::BigInt not available\n";-	}--	# MSEC conversions-	push(@val, conversions(1000, $hz));--	# USEC conversions-	push(@val, conversions(1000000, $hz));--	return @val;-}--sub outputval($$)-{-	my($name, $val) = @_;-	my $csuf;--	if (defined($val)) {-	    if ($name !~ /SHR/) {-		$val = "U64_C($val)";-	    }-	    printf "#define %-23s %s\n", $name.$csuf, $val.$csuf;-	}-}--sub output($@)-{-	my($hz, @val) = @_;-	my $pfx, $bit, $suf, $s, $m, $a;--	print "/* Automatically generated by kernel/timeconst.pl */\n";-	print "/* Conversion constants for HZ == $hz */\n";-	print "\n";-	print "#ifndef KERNEL_TIMECONST_H\n";-	print "#define KERNEL_TIMECONST_H\n";-	print "\n";--	print "#include <linux/param.h>\n";-	print "#include <linux/types.h>\n";--	print "\n";-	print "#if HZ != $hz\n";-	print "#error \"kernel/timeconst.h has the wrong HZ value!\"\n";-	print "#endif\n";-	print "\n";--	foreach $pfx ('HZ_TO_MSEC','MSEC_TO_HZ',-		      'HZ_TO_USEC','USEC_TO_HZ') {-		foreach $bit (32) {-			foreach $suf ('MUL', 'ADJ', 'SHR') {-				outputval("${pfx}_$suf$bit", shift(@val));-			}-		}-		foreach $suf ('NUM', 'DEN') {-			outputval("${pfx}_$suf", shift(@val));-		}-	}--	print "\n";-	print "#endif /* KERNEL_TIMECONST_H */\n";-}--# Pretty-print Perl values-sub perlvals(@) {-	my $v;-	my @l = ();--	foreach $v (@_) {-		if (!defined($v)) {-			push(@l, 'undef');-		} elsif ($v =~ /^0x/) {-			push(@l, "\'".$v."\'");-		} else {-			push(@l, $v.'');-		}-	}-	return join(',', @l);-}--($hz) = @ARGV;--# Use this to generate the %canned_values structure-if ($hz eq '--can') {-	shift(@ARGV);-	@hzlist = sort {$a <=> $b} (@ARGV);--	print "# Precomputed values for systems without Math::BigInt\n";-	print "# Generated by:\n";-	print "# timeconst.pl --can ", join(' ', @hzlist), "\n";-	print "\%canned_values = (\n";-	my $pf = "\t";-	foreach $hz (@hzlist) {-		my @values = compute_values($hz);-		print "$pf$hz => [\n";-		while (scalar(@values)) {-			my $bit;-			foreach $bit (32) {-				my $m = shift(@values);-				my $a = shift(@values);-				my $s = shift(@values);-				print "\t\t", perlvals($m,$a,$s), ",\n";-			}-			my $n = shift(@values);-			my $d = shift(@values);-			print "\t\t", perlvals($n,$d), ",\n";-		}-		print "\t]";-		$pf = ', ';-	}-	print "\n);\n";-} else {-	$hz += 0;			# Force to number-	if ($hz < 1) {-		die "Usage: $0 HZ\n";-	}--	@val = @{$canned_values{$hz}};-	if (!defined(@val)) {-		@val = compute_values($hz);-	}-	output($hz, @val);-}-exit 0;\0ÿôèº{.nÇ+‰·Ÿ®‰­†+%ŠËÿ±éݶ\x17¥Šwÿº{.nÇ+‰·¥Š{±þG«éÿŠ{ayº\x1dʇڙë,j\a­¢f£¢·hšïêÿ‘êçz_è®\x03(­éšŽŠÝ¢j"ú\x1a¶^[m§ÿÿ¾\a«þG«éÿ¢¸?™¨è­Ú&£ø§~á¶iO•æ¬z·švØ^\x14\x04\x1a¶^[m§ÿÿÃ\fÿ¶ìÿ¢¸?–I¥
diff --git a/a/content_digest b/N1/content_digest
index d52a4dd..d31f5c0 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -10,509 +10,10 @@
  "\00:1\0"
  "b\0"
  "From: Rob Landley <rob@landley.net>\n"
- "\n"
- "Replace kernel/timeconst.pl with kernel/timeconst.sh.  The new shell script\n"
- "is much simpler, about 1/4 the size, and runs on Red Hat 9 from 2003.\n"
- "\n"
- "Peter Anvin added this perl to 2.6.25.  Before that, the kernel had never\n"
- "required perl to build.\n"
- "\n"
- "Signed-off-by: Rob Landley <rob@landley.net>\n"
- "---\n"
- "\n"
- " kernel/Makefile     |    4 \n"
- " kernel/timeconst.pl |  378 ------------------------------------------\n"
- " kernel/timeconst.sh |   91 ++++++++++\n"
- " 3 files changed, 93 insertions(+), 380 deletions(-)\n"
- "\n"
- "diff -r d0c7611dcfd6 kernel/Makefile\n"
- "--- a/kernel/Makefile\tTue Dec 30 17:48:25 2008 -0800\n"
- "+++ b/kernel/Makefile\tFri Jan 02 00:10:44 2009 -0600\n"
- "@@ -115,7 +115,7 @@\n"
- " $(obj)/time.o: $(obj)/timeconst.h\n"
- " \n"
- " quiet_cmd_timeconst  = TIMEC   $@\n"
- "-      cmd_timeconst  = $(PERL) $< $(CONFIG_HZ) > $@\n"
- "+      cmd_timeconst  = $(CONFIG_SHELL) $< $(CONFIG_HZ) > $@\n"
- " targets += timeconst.h\n"
- "-$(obj)/timeconst.h: $(src)/timeconst.pl FORCE\n"
- "+$(obj)/timeconst.h: $(src)/timeconst.sh FORCE\n"
- " \t$(call if_changed,timeconst)\n"
- "--- /dev/null\t1969-12-31 00:00:00.000000000 -0600\n"
- "+++ hg/kernel/timeconst.sh\t2009-01-01 23:53:17.000000000 -0600\n"
- "@@ -0,0 +1,91 @@\n"
- "+#!/bin/bash\n"
- "+\n"
- "+if [ $# -ne 1 ]\n"
- "+then\n"
- "+\techo \"Usage: timeconst.sh HZ\"\n"
- "+\texit 1\n"
- "+fi\n"
- "+\n"
- "+HZ=$1\n"
- "+\n"
- "+# Sanity test: even the shell in Red Hat 9 (circa 2003) supported 64 bit math.\n"
- "+\n"
- "+[ $((1<<32)) -lt 0 ] && exit 1\n"
- "+\n"
- "+# Output start of header file\n"
- "+\n"
- "+cat << EOF\n"
- "+/* Automatically generated by kernel/timeconst.sh */\n"
- "+/* Conversion constants for HZ == $HZ */\n"
- "+\n"
- "+#ifndef KERNEL_TIMECONST_H\n"
- "+#define KERNEL_TIMECONST_H\n"
- "+\n"
- "+#include <linux/param.h>\n"
- "+#include <linux/types.h>\n"
- "+\n"
- "+#if HZ != $HZ\n"
- "+#error \"kernel/timeconst.h has the wrong HZ value!\"\n"
- "+#endif\n"
- "+\n"
- "+EOF\n"
- "+\n"
- "+# For both Miliseconds and Microseconds\n"
- "+\n"
- "+for i in \"MSEC 1000\" \"USEC 1000000\"\n"
- "+do\n"
- "+\tNAME=$(echo $i | awk '{print $1}')\n"
- "+\tPERIOD=$(echo $i | awk '{print $2}')\n"
- "+\n"
- "+\t# Find greatest common denominator (using Euclid's algorithm)\n"
- "+\n"
- "+\tA=$HZ\n"
- "+\tB=$PERIOD\n"
- "+\n"
- "+\twhile [ $B -ne 0 ]\n"
- "+\tdo\n"
- "+\t\tC=$(($A%$B))\n"
- "+\t\tA=$B\n"
- "+\t\tB=$C\n"
- "+\tdone\n"
- "+\n"
- "+\tGCD=$A\n"
- "+\n"
- "+\t# Do this for each direction (HZ_TO_PERIOD and PERIOD_TO_HZ)\n"
- "+\n"
- "+\tfor DIRECTION in 0 1\n"
- "+\tdo\n"
- "+\t\tif [ $DIRECTION -eq 0 ]\n"
- "+\t\tthen\n"
- "+\t\t\tCONVERT=\"HZ_TO_${NAME}\"\n"
- "+\t\t\tFROM=$HZ\n"
- "+\t\t\tTO=$PERIOD\n"
- "+\t\telse\n"
- "+\t\t\tCONVERT=\"${NAME}_TO_HZ\"\n"
- "+\t\t\tFROM=$PERIOD\n"
- "+\t\t\tTO=$HZ\n"
- "+\t\tfi\n"
- "+\n"
- "+\t\t# How many shift bits give 32 bits of significant data?\n"
- "+\n"
- "+\t\tSHIFT=0\n"
- "+\t\twhile [ $(( (($TO<<$SHIFT)+$FROM-1)/$FROM )) -lt $((1<<31)) ]\n"
- "+\t\tdo\n"
- "+\t\t\tSHIFT=$(( $SHIFT+1 ))\n"
- "+\t\tdone\n"
- "+\n"
- "+\t\tMUL32=$(( (($TO<<$SHIFT)+$FROM-1)/$FROM ))\n"
- "+\t\tMUL32=$(printf %x $MUL32)\n"
- "+\t\techo \"#define ${CONVERT}_MUL32\tU64_C(0x$MUL32)\"\n"
- "+\t\tADJ32=$(($FROM/$GCD))\n"
- "+\t\tADJ32=$(( (($ADJ32-1)<<$SHIFT)/$ADJ32 ))\n"
- "+\t\tADJ32=$(printf %x $ADJ32)\n"
- "+\t\techo \"#define ${CONVERT}_ADJ32\tU64_C(0x$ADJ32)\"\n"
- "+\t\techo \"#define ${CONVERT}_SHR32\t$SHIFT\"\n"
- "+\t\techo \"#define ${CONVERT}_NUM\t\tU64_C($(($TO/$GCD)))\"\n"
- "+\t\techo \"#define ${CONVERT}_DEN\t\tU64_C($(($FROM/$GCD)))\"\n"
- "+\tdone\n"
- "+done\n"
- "+\n"
- "+echo\n"
- "+echo \"#endif /* KERNEL_TIMECHONST_H */\"\n"
- "--- hg/kernel/timeconst.pl\t2008-11-22 19:09:13.000000000 -0600\n"
- "+++ /dev/null\t1969-12-31 00:00:00.000000000 -0600\n"
- "@@ -1,378 +0,0 @@\n"
- "-#!/usr/bin/perl\n"
- "-# -----------------------------------------------------------------------\n"
- "-#\n"
- "-#   Copyright 2007-2008 rPath, Inc. - All Rights Reserved\n"
- "-#\n"
- "-#   This file is part of the Linux kernel, and is made available under\n"
- "-#   the terms of the GNU General Public License version 2 or (at your\n"
- "-#   option) any later version; incorporated herein by reference.\n"
- "-#\n"
- "-# -----------------------------------------------------------------------\n"
- "-#\n"
- "-\n"
- "-#\n"
- "-# Usage: timeconst.pl HZ > timeconst.h\n"
- "-#\n"
- "-\n"
- "-# Precomputed values for systems without Math::BigInt\n"
- "-# Generated by:\n"
- "-# timeconst.pl --can 24 32 48 64 100 122 128 200 250 256 300 512 1000 1024 1200\n"
- "-%canned_values = (\n"
- "-\t24 => [\n"
- "-\t\t'0xa6aaaaab','0x2aaaaaa',26,\n"
- "-\t\t125,3,\n"
- "-\t\t'0xc49ba5e4','0x1fbe76c8b4',37,\n"
- "-\t\t3,125,\n"
- "-\t\t'0xa2c2aaab','0xaaaa',16,\n"
- "-\t\t125000,3,\n"
- "-\t\t'0xc9539b89','0x7fffbce4217d',47,\n"
- "-\t\t3,125000,\n"
- "-\t], 32 => [\n"
- "-\t\t'0xfa000000','0x6000000',27,\n"
- "-\t\t125,4,\n"
- "-\t\t'0x83126e98','0xfdf3b645a',36,\n"
- "-\t\t4,125,\n"
- "-\t\t'0xf4240000','0x0',17,\n"
- "-\t\t31250,1,\n"
- "-\t\t'0x8637bd06','0x3fff79c842fa',46,\n"
- "-\t\t1,31250,\n"
- "-\t], 48 => [\n"
- "-\t\t'0xa6aaaaab','0x6aaaaaa',27,\n"
- "-\t\t125,6,\n"
- "-\t\t'0xc49ba5e4','0xfdf3b645a',36,\n"
- "-\t\t6,125,\n"
- "-\t\t'0xa2c2aaab','0x15555',17,\n"
- "-\t\t62500,3,\n"
- "-\t\t'0xc9539b89','0x3fffbce4217d',46,\n"
- "-\t\t3,62500,\n"
- "-\t], 64 => [\n"
- "-\t\t'0xfa000000','0xe000000',28,\n"
- "-\t\t125,8,\n"
- "-\t\t'0x83126e98','0x7ef9db22d',35,\n"
- "-\t\t8,125,\n"
- "-\t\t'0xf4240000','0x0',18,\n"
- "-\t\t15625,1,\n"
- "-\t\t'0x8637bd06','0x1fff79c842fa',45,\n"
- "-\t\t1,15625,\n"
- "-\t], 100 => [\n"
- "-\t\t'0xa0000000','0x0',28,\n"
- "-\t\t10,1,\n"
- "-\t\t'0xcccccccd','0x733333333',35,\n"
- "-\t\t1,10,\n"
- "-\t\t'0x9c400000','0x0',18,\n"
- "-\t\t10000,1,\n"
- "-\t\t'0xd1b71759','0x1fff2e48e8a7',45,\n"
- "-\t\t1,10000,\n"
- "-\t], 122 => [\n"
- "-\t\t'0x8325c53f','0xfbcda3a',28,\n"
- "-\t\t500,61,\n"
- "-\t\t'0xf9db22d1','0x7fbe76c8b',35,\n"
- "-\t\t61,500,\n"
- "-\t\t'0x8012e2a0','0x3ef36',18,\n"
- "-\t\t500000,61,\n"
- "-\t\t'0xffda4053','0x1ffffbce4217',45,\n"
- "-\t\t61,500000,\n"
- "-\t], 128 => [\n"
- "-\t\t'0xfa000000','0x1e000000',29,\n"
- "-\t\t125,16,\n"
- "-\t\t'0x83126e98','0x3f7ced916',34,\n"
- "-\t\t16,125,\n"
- "-\t\t'0xf4240000','0x40000',19,\n"
- "-\t\t15625,2,\n"
- "-\t\t'0x8637bd06','0xfffbce4217d',44,\n"
- "-\t\t2,15625,\n"
- "-\t], 200 => [\n"
- "-\t\t'0xa0000000','0x0',29,\n"
- "-\t\t5,1,\n"
- "-\t\t'0xcccccccd','0x333333333',34,\n"
- "-\t\t1,5,\n"
- "-\t\t'0x9c400000','0x0',19,\n"
- "-\t\t5000,1,\n"
- "-\t\t'0xd1b71759','0xfff2e48e8a7',44,\n"
- "-\t\t1,5000,\n"
- "-\t], 250 => [\n"
- "-\t\t'0x80000000','0x0',29,\n"
- "-\t\t4,1,\n"
- "-\t\t'0x80000000','0x180000000',33,\n"
- "-\t\t1,4,\n"
- "-\t\t'0xfa000000','0x0',20,\n"
- "-\t\t4000,1,\n"
- "-\t\t'0x83126e98','0x7ff7ced9168',43,\n"
- "-\t\t1,4000,\n"
- "-\t], 256 => [\n"
- "-\t\t'0xfa000000','0x3e000000',30,\n"
- "-\t\t125,32,\n"
- "-\t\t'0x83126e98','0x1fbe76c8b',33,\n"
- "-\t\t32,125,\n"
- "-\t\t'0xf4240000','0xc0000',20,\n"
- "-\t\t15625,4,\n"
- "-\t\t'0x8637bd06','0x7ffde7210be',43,\n"
- "-\t\t4,15625,\n"
- "-\t], 300 => [\n"
- "-\t\t'0xd5555556','0x2aaaaaaa',30,\n"
- "-\t\t10,3,\n"
- "-\t\t'0x9999999a','0x1cccccccc',33,\n"
- "-\t\t3,10,\n"
- "-\t\t'0xd0555556','0xaaaaa',20,\n"
- "-\t\t10000,3,\n"
- "-\t\t'0x9d495183','0x7ffcb923a29',43,\n"
- "-\t\t3,10000,\n"
- "-\t], 512 => [\n"
- "-\t\t'0xfa000000','0x7e000000',31,\n"
- "-\t\t125,64,\n"
- "-\t\t'0x83126e98','0xfdf3b645',32,\n"
- "-\t\t64,125,\n"
- "-\t\t'0xf4240000','0x1c0000',21,\n"
- "-\t\t15625,8,\n"
- "-\t\t'0x8637bd06','0x3ffef39085f',42,\n"
- "-\t\t8,15625,\n"
- "-\t], 1000 => [\n"
- "-\t\t'0x80000000','0x0',31,\n"
- "-\t\t1,1,\n"
- "-\t\t'0x80000000','0x0',31,\n"
- "-\t\t1,1,\n"
- "-\t\t'0xfa000000','0x0',22,\n"
- "-\t\t1000,1,\n"
- "-\t\t'0x83126e98','0x1ff7ced9168',41,\n"
- "-\t\t1,1000,\n"
- "-\t], 1024 => [\n"
- "-\t\t'0xfa000000','0xfe000000',32,\n"
- "-\t\t125,128,\n"
- "-\t\t'0x83126e98','0x7ef9db22',31,\n"
- "-\t\t128,125,\n"
- "-\t\t'0xf4240000','0x3c0000',22,\n"
- "-\t\t15625,16,\n"
- "-\t\t'0x8637bd06','0x1fff79c842f',41,\n"
- "-\t\t16,15625,\n"
- "-\t], 1200 => [\n"
- "-\t\t'0xd5555556','0xd5555555',32,\n"
- "-\t\t5,6,\n"
- "-\t\t'0x9999999a','0x66666666',31,\n"
- "-\t\t6,5,\n"
- "-\t\t'0xd0555556','0x2aaaaa',22,\n"
- "-\t\t2500,3,\n"
- "-\t\t'0x9d495183','0x1ffcb923a29',41,\n"
- "-\t\t3,2500,\n"
- "-\t]\n"
- "-);\n"
- "-\n"
- "-$has_bigint = eval 'use Math::BigInt qw(bgcd); 1;';\n"
- "-\n"
- "-sub bint($)\n"
- "-{\n"
- "-\tmy($x) = @_;\n"
- "-\treturn Math::BigInt->new($x);\n"
- "-}\n"
- "-\n"
- "-#\n"
- "-# Constants for division by reciprocal multiplication.\n"
- "-# (bits, numerator, denominator)\n"
- "-#\n"
- "-sub fmul($$$)\n"
- "-{\n"
- "-\tmy ($b,$n,$d) = @_;\n"
- "-\n"
- "-\t$n = bint($n);\n"
- "-\t$d = bint($d);\n"
- "-\n"
- "-\treturn scalar (($n << $b)+$d-bint(1))/$d;\n"
- "-}\n"
- "-\n"
- "-sub fadj($$$)\n"
- "-{\n"
- "-\tmy($b,$n,$d) = @_;\n"
- "-\n"
- "-\t$n = bint($n);\n"
- "-\t$d = bint($d);\n"
- "-\n"
- "-\t$d = $d/bgcd($n, $d);\n"
- "-\treturn scalar (($d-bint(1)) << $b)/$d;\n"
- "-}\n"
- "-\n"
- "-sub fmuls($$$) {\n"
- "-\tmy($b,$n,$d) = @_;\n"
- "-\tmy($s,$m);\n"
- "-\tmy($thres) = bint(1) << ($b-1);\n"
- "-\n"
- "-\t$n = bint($n);\n"
- "-\t$d = bint($d);\n"
- "-\n"
- "-\tfor ($s = 0; 1; $s++) {\n"
- "-\t\t$m = fmul($s,$n,$d);\n"
- "-\t\treturn $s if ($m >= $thres);\n"
- "-\t}\n"
- "-\treturn 0;\n"
- "-}\n"
- "-\n"
- "-# Generate a hex value if the result fits in 64 bits;\n"
- "-# otherwise skip.\n"
- "-sub bignum_hex($) {\n"
- "-\tmy($x) = @_;\n"
- "-\tmy $s = $x->as_hex();\n"
- "-\n"
- "-\treturn (length($s) > 18) ? undef : $s;\n"
- "-}\n"
- "-\n"
- "-# Provides mul, adj, and shr factors for a specific\n"
- "-# (bit, time, hz) combination\n"
- "-sub muladj($$$) {\n"
- "-\tmy($b, $t, $hz) = @_;\n"
- "-\tmy $s = fmuls($b, $t, $hz);\n"
- "-\tmy $m = fmul($s, $t, $hz);\n"
- "-\tmy $a = fadj($s, $t, $hz);\n"
- "-\treturn (bignum_hex($m), bignum_hex($a), $s);\n"
- "-}\n"
- "-\n"
- "-# Provides numerator, denominator values\n"
- "-sub numden($$) {\n"
- "-\tmy($n, $d) = @_;\n"
- "-\tmy $g = bgcd($n, $d);\n"
- "-\treturn ($n/$g, $d/$g);\n"
- "-}\n"
- "-\n"
- "-# All values for a specific (time, hz) combo\n"
- "-sub conversions($$) {\n"
- "-\tmy ($t, $hz) = @_;\n"
- "-\tmy @val = ();\n"
- "-\n"
- "-\t# HZ_TO_xx\n"
- "-\tpush(@val, muladj(32, $t, $hz));\n"
- "-\tpush(@val, numden($t, $hz));\n"
- "-\n"
- "-\t# xx_TO_HZ\n"
- "-\tpush(@val, muladj(32, $hz, $t));\n"
- "-\tpush(@val, numden($hz, $t));\n"
- "-\n"
- "-\treturn @val;\n"
- "-}\n"
- "-\n"
- "-sub compute_values($) {\n"
- "-\tmy($hz) = @_;\n"
- "-\tmy @val = ();\n"
- "-\tmy $s, $m, $a, $g;\n"
- "-\n"
- "-\tif (!$has_bigint) {\n"
- "-\t\tdie \"$0: HZ == $hz not canned and \".\n"
- "-\t\t    \"Math::BigInt not available\\n\";\n"
- "-\t}\n"
- "-\n"
- "-\t# MSEC conversions\n"
- "-\tpush(@val, conversions(1000, $hz));\n"
- "-\n"
- "-\t# USEC conversions\n"
- "-\tpush(@val, conversions(1000000, $hz));\n"
- "-\n"
- "-\treturn @val;\n"
- "-}\n"
- "-\n"
- "-sub outputval($$)\n"
- "-{\n"
- "-\tmy($name, $val) = @_;\n"
- "-\tmy $csuf;\n"
- "-\n"
- "-\tif (defined($val)) {\n"
- "-\t    if ($name !~ /SHR/) {\n"
- "-\t\t$val = \"U64_C($val)\";\n"
- "-\t    }\n"
- "-\t    printf \"#define %-23s %s\\n\", $name.$csuf, $val.$csuf;\n"
- "-\t}\n"
- "-}\n"
- "-\n"
- "-sub output($@)\n"
- "-{\n"
- "-\tmy($hz, @val) = @_;\n"
- "-\tmy $pfx, $bit, $suf, $s, $m, $a;\n"
- "-\n"
- "-\tprint \"/* Automatically generated by kernel/timeconst.pl */\\n\";\n"
- "-\tprint \"/* Conversion constants for HZ == $hz */\\n\";\n"
- "-\tprint \"\\n\";\n"
- "-\tprint \"#ifndef KERNEL_TIMECONST_H\\n\";\n"
- "-\tprint \"#define KERNEL_TIMECONST_H\\n\";\n"
- "-\tprint \"\\n\";\n"
- "-\n"
- "-\tprint \"#include <linux/param.h>\\n\";\n"
- "-\tprint \"#include <linux/types.h>\\n\";\n"
- "-\n"
- "-\tprint \"\\n\";\n"
- "-\tprint \"#if HZ != $hz\\n\";\n"
- "-\tprint \"#error \\\"kernel/timeconst.h has the wrong HZ value!\\\"\\n\";\n"
- "-\tprint \"#endif\\n\";\n"
- "-\tprint \"\\n\";\n"
- "-\n"
- "-\tforeach $pfx ('HZ_TO_MSEC','MSEC_TO_HZ',\n"
- "-\t\t      'HZ_TO_USEC','USEC_TO_HZ') {\n"
- "-\t\tforeach $bit (32) {\n"
- "-\t\t\tforeach $suf ('MUL', 'ADJ', 'SHR') {\n"
- "-\t\t\t\toutputval(\"${pfx}_$suf$bit\", shift(@val));\n"
- "-\t\t\t}\n"
- "-\t\t}\n"
- "-\t\tforeach $suf ('NUM', 'DEN') {\n"
- "-\t\t\toutputval(\"${pfx}_$suf\", shift(@val));\n"
- "-\t\t}\n"
- "-\t}\n"
- "-\n"
- "-\tprint \"\\n\";\n"
- "-\tprint \"#endif /* KERNEL_TIMECONST_H */\\n\";\n"
- "-}\n"
- "-\n"
- "-# Pretty-print Perl values\n"
- "-sub perlvals(@) {\n"
- "-\tmy $v;\n"
- "-\tmy @l = ();\n"
- "-\n"
- "-\tforeach $v (@_) {\n"
- "-\t\tif (!defined($v)) {\n"
- "-\t\t\tpush(@l, 'undef');\n"
- "-\t\t} elsif ($v =~ /^0x/) {\n"
- "-\t\t\tpush(@l, \"\\'\".$v.\"\\'\");\n"
- "-\t\t} else {\n"
- "-\t\t\tpush(@l, $v.'');\n"
- "-\t\t}\n"
- "-\t}\n"
- "-\treturn join(',', @l);\n"
- "-}\n"
- "-\n"
- "-($hz) = @ARGV;\n"
- "-\n"
- "-# Use this to generate the %canned_values structure\n"
- "-if ($hz eq '--can') {\n"
- "-\tshift(@ARGV);\n"
- "-\t@hzlist = sort {$a <=> $b} (@ARGV);\n"
- "-\n"
- "-\tprint \"# Precomputed values for systems without Math::BigInt\\n\";\n"
- "-\tprint \"# Generated by:\\n\";\n"
- "-\tprint \"# timeconst.pl --can \", join(' ', @hzlist), \"\\n\";\n"
- "-\tprint \"\\%canned_values = (\\n\";\n"
- "-\tmy $pf = \"\\t\";\n"
- "-\tforeach $hz (@hzlist) {\n"
- "-\t\tmy @values = compute_values($hz);\n"
- "-\t\tprint \"$pf$hz => [\\n\";\n"
- "-\t\twhile (scalar(@values)) {\n"
- "-\t\t\tmy $bit;\n"
- "-\t\t\tforeach $bit (32) {\n"
- "-\t\t\t\tmy $m = shift(@values);\n"
- "-\t\t\t\tmy $a = shift(@values);\n"
- "-\t\t\t\tmy $s = shift(@values);\n"
- "-\t\t\t\tprint \"\\t\\t\", perlvals($m,$a,$s), \",\\n\";\n"
- "-\t\t\t}\n"
- "-\t\t\tmy $n = shift(@values);\n"
- "-\t\t\tmy $d = shift(@values);\n"
- "-\t\t\tprint \"\\t\\t\", perlvals($n,$d), \",\\n\";\n"
- "-\t\t}\n"
- "-\t\tprint \"\\t]\";\n"
- "-\t\t$pf = ', ';\n"
- "-\t}\n"
- "-\tprint \"\\n);\\n\";\n"
- "-} else {\n"
- "-\t$hz += 0;\t\t\t# Force to number\n"
- "-\tif ($hz < 1) {\n"
- "-\t\tdie \"Usage: $0 HZ\\n\";\n"
- "-\t}\n"
- "-\n"
- "-\t@val = @{$canned_values{$hz}};\n"
- "-\tif (!defined(@val)) {\n"
- "-\t\t@val = compute_values($hz);\n"
- "-\t}\n"
- "-\toutput($hz, @val);\n"
- "-}\n"
- "-exit 0;\n"
- "\0"
+ "Replace kernel/timeconst.pl with kernel/timeconst.sh.  The new shell scriptis much simpler, about 1/4 the size, and runs on Red Hat 9 from 2003.\n"
+ "Peter Anvin added this perl to 2.6.25.  Before that, the kernel had neverrequired perl to build.\n"
+ "Signed-off-by: Rob Landley <rob@landley.net>---\n"
+ " kernel/Makefile     |    4  kernel/timeconst.pl |  378 ------------------------------------------ kernel/timeconst.sh |   91 ++++++++++ 3 files changed, 93 insertions(+), 380 deletions(-)\n"
+ "diff -r d0c7611dcfd6 kernel/Makefile--- a/kernel/Makefile\tTue Dec 30 17:48:25 2008 -0800+++ b/kernel/Makefile\tFri Jan 02 00:10:44 2009 -0600@@ -115,7 +115,7 @@ $(obj)/time.o: $(obj)/timeconst.h  quiet_cmd_timeconst  = TIMEC   $@-      cmd_timeconst  = $(PERL) $< $(CONFIG_HZ) > $@+      cmd_timeconst  = $(CONFIG_SHELL) $< $(CONFIG_HZ) > $@ targets += timeconst.h-$(obj)/timeconst.h: $(src)/timeconst.pl FORCE+$(obj)/timeconst.h: $(src)/timeconst.sh FORCE \t$(call if_changed,timeconst)--- /dev/null\t1969-12-31 00:00:00.000000000 -0600+++ hg/kernel/timeconst.sh\t2009-01-01 23:53:17.000000000 -0600@@ -0,0 +1,91 @@+#!/bin/bash++if [ $# -ne 1 ]+then+\techo \"Usage: timeconst.sh HZ\"+\texit 1+fi++HZ=$1++# Sanity test: even the shell in Red Hat 9 (circa 2003) supported 64 bit math.++[ $((1<<32)) -lt 0 ] && exit 1++# Output start of header file++cat << EOF+/* Automatically generated by kernel/timeconst.sh */+/* Conversion constants for HZ == $HZ */++#ifndef KERNEL_TIMECONST_H+#define KERNEL_TIMECONST_H++#include <linux/param.h>+#include <linux/types.h>++#if HZ != $HZ+#error \"kernel/timeconst.h has the wrong HZ value!\"+#endif++EOF++# For both Miliseconds and Microseconds++for i in \"MSEC 1000\" \"USEC 1000000\"+do+\tNAME=$(echo $i | awk '{print $1}')+\tPERIOD=$(echo $i | awk '{print $2}')++\t# Find greatest common denominator (using Euclid's algorithm)++\tA=$HZ+\tB=$PERIOD++\twhile [ $B -ne 0 ]+\tdo+\t\tC=$(($A%$B))+\t\tA=$B+\t\tB=$C+\tdone++\tGCD=$A++\t# Do this for each direction (HZ_TO_PERIOD and PERIOD_TO_HZ)++\tfor DIRECTION in 0 1+\tdo+\t\tif [ $DIRECTION -eq 0 ]+\t\tthen+\t\t\tCONVERT=\"HZ_TO_${NAME}\"+\t\t\tFROM=$HZ+\t\t\tTO=$PERIOD+\t\telse+\t\t\tCONVERT=\"${NAME}_TO_HZ\"+\t\t\tFROM=$PERIOD+\t\t\tTO=$HZ+\t\tfi++\t\t# How many shift bits give 32 bits of significant data?++\t\tSHIFT=0+\t\twhile [ $(( (($TO<<$SHIFT)+$FROM-1)/$FROM )) -lt $((1<<31)) ]+\t\tdo+\t\t\tSHIFT=$(( $SHIFT+1 ))+\t\tdone++\t\tMUL32=$(( (($TO<<$SHIFT)+$FROM-1)/$FROM ))+\t\tMUL32=$(printf %x $MUL32)+\t\techo \"#define ${CONVERT}_MUL32\tU64_C(0x$MUL32)\"+\t\tADJ32=$(($FROM/$GCD))+\t\tADJ32=$(( (($ADJ32-1)<<$SHIFT)/$ADJ32 ))+\t\tADJ32=$(printf %x $ADJ32)+\t\techo \"#define ${CONVERT}_ADJ32\tU64_C(0x$ADJ32)\"+\t\techo \"#define ${CONVERT}_SHR32\t$SHIFT\"+\t\techo \"#define ${CONVERT}_NUM\t\tU64_C($(($TO/$GCD)))\"+\t\techo \"#define ${CONVERT}_DEN\t\tU64_C($(($FROM/$GCD)))\"+\tdone+done++echo+echo \"#endif /* KERNEL_TIMECHONST_H */\"--- hg/kernel/timeconst.pl\t2008-11-22 19:09:13.000000000 -0600+++ /dev/null\t1969-12-31 00:00:00.000000000 -0600@@ -1,378 +0,0 @@-#!/usr/bin/perl-# ------------------------------------------------------------------------#-#   Copyright 2007-2008 rPath, Inc. - All Rights Reserved-#-#   This file is part of the Linux kernel, and is made available under-#   the terms of the GNU General Public License version 2 or (at your-#   option) any later version; incorporated herein by reference.-#-# ------------------------------------------------------------------------#--#-# Usage: timeconst.pl HZ > timeconst.h-#--# Precomputed values for systems without Math::BigInt-# Generated by:-# timeconst.pl --can 24 32 48 64 100 122 128 200 250 256 300 512 1000 1024 1200-%canned_values = (-\t24 => [-\t\t'0xa6aaaaab','0x2aaaaaa',26,-\t\t125,3,-\t\t'0xc49ba5e4','0x1fbe76c8b4',37,-\t\t3,125,-\t\t'0xa2c2aaab','0xaaaa',16,-\t\t125000,3,-\t\t'0xc9539b89','0x7fffbce4217d',47,-\t\t3,125000,-\t], 32 => [-\t\t'0xfa000000','0x6000000',27,-\t\t125,4,-\t\t'0x83126e98','0xfdf3b645a',36,-\t\t4,125,-\t\t'0xf4240000','0x0',17,-\t\t31250,1,-\t\t'0x8637bd06','0x3fff79c842fa',46,-\t\t1,31250,-\t], 48 => [-\t\t'0xa6aaaaab','0x6aaaaaa',27,-\t\t125,6,-\t\t'0xc49ba5e4','0xfdf3b645a',36,-\t\t6,125,-\t\t'0xa2c2aaab','0x15555',17,-\t\t62500,3,-\t\t'0xc9539b89','0x3fffbce4217d',46,-\t\t3,62500,-\t], 64 => [-\t\t'0xfa000000','0xe000000',28,-\t\t125,8,-\t\t'0x83126e98','0x7ef9db22d',35,-\t\t8,125,-\t\t'0xf4240000','0x0',18,-\t\t15625,1,-\t\t'0x8637bd06','0x1fff79c842fa',45,-\t\t1,15625,-\t], 100 => [-\t\t'0xa0000000','0x0',28,-\t\t10,1,-\t\t'0xcccccccd','0x733333333',35,-\t\t1,10,-\t\t'0x9c400000','0x0',18,-\t\t10000,1,-\t\t'0xd1b71759','0x1fff2e48e8a7',45,-\t\t1,10000,-\t], 122 => [-\t\t'0x8325c53f','0xfbcda3a',28,-\t\t500,61,-\t\t'0xf9db22d1','0x7fbe76c8b',35,-\t\t61,500,-\t\t'0x8012e2a0','0x3ef36',18,-\t\t500000,61,-\t\t'0xffda4053','0x1ffffbce4217',45,-\t\t61,500000,-\t], 128 => [-\t\t'0xfa000000','0x1e000000',29,-\t\t125,16,-\t\t'0x83126e98','0x3f7ced916',34,-\t\t16,125,-\t\t'0xf4240000','0x40000',19,-\t\t15625,2,-\t\t'0x8637bd06','0xfffbce4217d',44,-\t\t2,15625,-\t], 200 => [-\t\t'0xa0000000','0x0',29,-\t\t5,1,-\t\t'0xcccccccd','0x333333333',34,-\t\t1,5,-\t\t'0x9c400000','0x0',19,-\t\t5000,1,-\t\t'0xd1b71759','0xfff2e48e8a7',44,-\t\t1,5000,-\t], 250 => [-\t\t'0x80000000','0x0',29,-\t\t4,1,-\t\t'0x80000000','0x180000000',33,-\t\t1,4,-\t\t'0xfa000000','0x0',20,-\t\t4000,1,-\t\t'0x83126e98','0x7ff7ced9168',43,-\t\t1,4000,-\t], 256 => [-\t\t'0xfa000000','0x3e000000',30,-\t\t125,32,-\t\t'0x83126e98','0x1fbe76c8b',33,-\t\t32,125,-\t\t'0xf4240000','0xc0000',20,-\t\t15625,4,-\t\t'0x8637bd06','0x7ffde7210be',43,-\t\t4,15625,-\t], 300 => [-\t\t'0xd5555556','0x2aaaaaaa',30,-\t\t10,3,-\t\t'0x9999999a','0x1cccccccc',33,-\t\t3,10,-\t\t'0xd0555556','0xaaaaa',20,-\t\t10000,3,-\t\t'0x9d495183','0x7ffcb923a29',43,-\t\t3,10000,-\t], 512 => [-\t\t'0xfa000000','0x7e000000',31,-\t\t125,64,-\t\t'0x83126e98','0xfdf3b645',32,-\t\t64,125,-\t\t'0xf4240000','0x1c0000',21,-\t\t15625,8,-\t\t'0x8637bd06','0x3ffef39085f',42,-\t\t8,15625,-\t], 1000 => [-\t\t'0x80000000','0x0',31,-\t\t1,1,-\t\t'0x80000000','0x0',31,-\t\t1,1,-\t\t'0xfa000000','0x0',22,-\t\t1000,1,-\t\t'0x83126e98','0x1ff7ced9168',41,-\t\t1,1000,-\t], 1024 => [-\t\t'0xfa000000','0xfe000000',32,-\t\t125,128,-\t\t'0x83126e98','0x7ef9db22',31,-\t\t128,125,-\t\t'0xf4240000','0x3c0000',22,-\t\t15625,16,-\t\t'0x8637bd06','0x1fff79c842f',41,-\t\t16,15625,-\t], 1200 => [-\t\t'0xd5555556','0xd5555555',32,-\t\t5,6,-\t\t'0x9999999a','0x66666666',31,-\t\t6,5,-\t\t'0xd0555556','0x2aaaaa',22,-\t\t2500,3,-\t\t'0x9d495183','0x1ffcb923a29',41,-\t\t3,2500,-\t]-);--$has_bigint = eval 'use Math::BigInt qw(bgcd); 1;';--sub bint($)-{-\tmy($x) = @_;-\treturn Math::BigInt->new($x);-}--#-# Constants for division by reciprocal multiplication.-# (bits, numerator, denominator)-#-sub fmul($$$)-{-\tmy ($b,$n,$d) = @_;--\t$n = bint($n);-\t$d = bint($d);--\treturn scalar (($n << $b)+$d-bint(1))/$d;-}--sub fadj($$$)-{-\tmy($b,$n,$d) = @_;--\t$n = bint($n);-\t$d = bint($d);--\t$d = $d/bgcd($n, $d);-\treturn scalar (($d-bint(1)) << $b)/$d;-}--sub fmuls($$$) {-\tmy($b,$n,$d) = @_;-\tmy($s,$m);-\tmy($thres) = bint(1) << ($b-1);--\t$n = bint($n);-\t$d = bint($d);--\tfor ($s = 0; 1; $s++) {-\t\t$m = fmul($s,$n,$d);-\t\treturn $s if ($m >= $thres);-\t}-\treturn 0;-}--# Generate a hex value if the result fits in 64 bits;-# otherwise skip.-sub bignum_hex($) {-\tmy($x) = @_;-\tmy $s = $x->as_hex();--\treturn (length($s) > 18) ? undef : $s;-}--# Provides mul, adj, and shr factors for a specific-# (bit, time, hz) combination-sub muladj($$$) {-\tmy($b, $t, $hz) = @_;-\tmy $s = fmuls($b, $t, $hz);-\tmy $m = fmul($s, $t, $hz);-\tmy $a = fadj($s, $t, $hz);-\treturn (bignum_hex($m), bignum_hex($a), $s);-}--# Provides numerator, denominator values-sub numden($$) {-\tmy($n, $d) = @_;-\tmy $g = bgcd($n, $d);-\treturn ($n/$g, $d/$g);-}--# All values for a specific (time, hz) combo-sub conversions($$) {-\tmy ($t, $hz) = @_;-\tmy @val = ();--\t# HZ_TO_xx-\tpush(@val, muladj(32, $t, $hz));-\tpush(@val, numden($t, $hz));--\t# xx_TO_HZ-\tpush(@val, muladj(32, $hz, $t));-\tpush(@val, numden($hz, $t));--\treturn @val;-}--sub compute_values($) {-\tmy($hz) = @_;-\tmy @val = ();-\tmy $s, $m, $a, $g;--\tif (!$has_bigint) {-\t\tdie \"$0: HZ == $hz not canned and \".-\t\t    \"Math::BigInt not available\\n\";-\t}--\t# MSEC conversions-\tpush(@val, conversions(1000, $hz));--\t# USEC conversions-\tpush(@val, conversions(1000000, $hz));--\treturn @val;-}--sub outputval($$)-{-\tmy($name, $val) = @_;-\tmy $csuf;--\tif (defined($val)) {-\t    if ($name !~ /SHR/) {-\t\t$val = \"U64_C($val)\";-\t    }-\t    printf \"#define %-23s %s\\n\", $name.$csuf, $val.$csuf;-\t}-}--sub output($@)-{-\tmy($hz, @val) = @_;-\tmy $pfx, $bit, $suf, $s, $m, $a;--\tprint \"/* Automatically generated by kernel/timeconst.pl */\\n\";-\tprint \"/* Conversion constants for HZ == $hz */\\n\";-\tprint \"\\n\";-\tprint \"#ifndef KERNEL_TIMECONST_H\\n\";-\tprint \"#define KERNEL_TIMECONST_H\\n\";-\tprint \"\\n\";--\tprint \"#include <linux/param.h>\\n\";-\tprint \"#include <linux/types.h>\\n\";--\tprint \"\\n\";-\tprint \"#if HZ != $hz\\n\";-\tprint \"#error \\\"kernel/timeconst.h has the wrong HZ value!\\\"\\n\";-\tprint \"#endif\\n\";-\tprint \"\\n\";--\tforeach $pfx ('HZ_TO_MSEC','MSEC_TO_HZ',-\t\t      'HZ_TO_USEC','USEC_TO_HZ') {-\t\tforeach $bit (32) {-\t\t\tforeach $suf ('MUL', 'ADJ', 'SHR') {-\t\t\t\toutputval(\"${pfx}_$suf$bit\", shift(@val));-\t\t\t}-\t\t}-\t\tforeach $suf ('NUM', 'DEN') {-\t\t\toutputval(\"${pfx}_$suf\", shift(@val));-\t\t}-\t}--\tprint \"\\n\";-\tprint \"#endif /* KERNEL_TIMECONST_H */\\n\";-}--# Pretty-print Perl values-sub perlvals(@) {-\tmy $v;-\tmy @l = ();--\tforeach $v (@_) {-\t\tif (!defined($v)) {-\t\t\tpush(@l, 'undef');-\t\t} elsif ($v =~ /^0x/) {-\t\t\tpush(@l, \"\\'\".$v.\"\\'\");-\t\t} else {-\t\t\tpush(@l, $v.'');-\t\t}-\t}-\treturn join(',', @l);-}--($hz) = @ARGV;--# Use this to generate the %canned_values structure-if ($hz eq '--can') {-\tshift(@ARGV);-\t@hzlist = sort {$a <=> $b} (@ARGV);--\tprint \"# Precomputed values for systems without Math::BigInt\\n\";-\tprint \"# Generated by:\\n\";-\tprint \"# timeconst.pl --can \", join(' ', @hzlist), \"\\n\";-\tprint \"\\%canned_values = (\\n\";-\tmy $pf = \"\\t\";-\tforeach $hz (@hzlist) {-\t\tmy @values = compute_values($hz);-\t\tprint \"$pf$hz => [\\n\";-\t\twhile (scalar(@values)) {-\t\t\tmy $bit;-\t\t\tforeach $bit (32) {-\t\t\t\tmy $m = shift(@values);-\t\t\t\tmy $a = shift(@values);-\t\t\t\tmy $s = shift(@values);-\t\t\t\tprint \"\\t\\t\", perlvals($m,$a,$s), \",\\n\";-\t\t\t}-\t\t\tmy $n = shift(@values);-\t\t\tmy $d = shift(@values);-\t\t\tprint \"\\t\\t\", perlvals($n,$d), \",\\n\";-\t\t}-\t\tprint \"\\t]\";-\t\t$pf = ', ';-\t}-\tprint \"\\n);\\n\";-} else {-\t$hz += 0;\t\t\t# Force to number-\tif ($hz < 1) {-\t\tdie \"Usage: $0 HZ\\n\";-\t}--\t@val = @{$canned_values{$hz}};-\tif (!defined(@val)) {-\t\t@val = compute_values($hz);-\t}-\toutput($hz, @val);-}-exit 0;\0\303\277\303\264\303\250\302\272{.n\303\207+\302\211\302\267\302\237\302\256\302\211\302\255\302\206+%\302\212\303\213\303\277\302\261\303\251\303\235\302\266\027\302\245\302\212w\303\277\302\272{.n\303\207+\302\211\302\267\302\245\302\212{\302\261\303\276G\302\253\302\235\303\251\303\277\302\212{ay\302\272\035\303\212\302\207\303\232\302\231\303\253,j\a\302\255\302\242f\302\243\302\242\302\267h\302\232\302\217\303\257\302\201\303\252\303\277\302\221\303\252\303\247z_\303\250\302\256\003(\302\255\303\251\302\232\302\216\302\212\303\235\302\242j\"\302\235\303\272\032\302\266\033m\302\247\303\277\303\277\302\276\a\302\253\303\276G\302\253\302\235\303\251\303\277\302\242\302\270?\302\231\302\250\303\250\302\255\303\232&\302\243\303\270\302\247~\302\217\303\241\302\266iO\302\225\303\246\302\254z\302\267\302\232v\303\230^\024\004\032\302\266\033m\302\247\303\277\303\277\303\203\f\303\277\302\266\303\254\303\277\302\242\302\270?\302\226I\302\245"
 
-20dab5975fb6f31ee3415bcc05b0793128e4bbda8ccfb7ddbb165e1a6c4ce222
+1ac399e4961d18f3bfa856927df0f87d547ca3c5633e847a13a14248e775de65

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.