1package Crypt::AppleTwoFish; 2 3use strict; 4use warnings; 5use Digest::SHA; 6use Math::BigInt; 7use Carp qw( carp ); 8 9our $VERSION = "0.051"; 10 11#--- lookup tables declared here are defined after the other package code ---# 12 13my ( @apple_tf_iTMS, @apple_tf_DRMS ); 14 15my ( %veggies, @planter_table, %veggie_table ); 16 17#-------------- non-member functions ----------------# 18 19sub _combine_keys { 20 21 # note: the arguments are binary bytes and 22 # two ints: 6, 4, and 4 bytes each 23 my ( $hwID, $keyID, $userID ) = @_; 24 return $hwID . pack( 'N', $keyID ) . pack( 'N', $userID ) . "\xFF\xFF"; 25} 26 27sub _compost_cow { 28 my $i = shift; 29 use integer; 30 return $i * 0xA2ED4502 + 0x6CD8D601; 31} 32 33sub _compost_horse { 34 my ( $i, $j, $k ) = @_; 35 use integer; 36 return ( $i + $j ) * 0xA2ED4502 + $k * 0xFFFFFFFE + 0xD9B1AC01; 37} 38 39sub _compost_sheep { 40 my ( $b, $c, $d, $e, $f ) = @_; 41 use integer; 42 return ( $b + $c + $d ) * 0xA2ED4502 + ( $e + $f ) * 0xFFFFFFFE + 43 0x468A8201; 44} 45 46sub _till { 47 my ( $bytes, $veggie ) = @_; 48 use integer; 49 for my $byte ( @{$bytes} ) { 50 $byte = ( $veggie_table{$veggie}->[$byte] ^ 0x5D ) & 0xFF; 51 } 52 return $bytes; 53} 54 55sub _weed { 56 my ( $bytes, $veggie ) = @_; 57 use integer; 58 my ( $i, $j ) = @{ $veggies{$veggie} }; 59 for my $byte ( @{$bytes} ) { 60 $byte = ( $byte * $i + $j ) & 0xFF; 61 } 62 return $bytes; 63} 64 65sub _dust { 66 my (@hex_bytes) = @_; 67 use integer; 68 my $num_bytes = scalar @hex_bytes; 69 my $num_ints = $num_bytes / 4; 70 my @b; 71 my $count; 72 while ( 0 < ( $count = scalar @hex_bytes ) ) { 73 my @digits; 74 if ( $count > 4 ) { 75 @digits = @hex_bytes[ 0 .. 3 ]; 76 @hex_bytes = @hex_bytes[ 4 .. $count - 1 ]; 77 } 78 else { 79 @digits = @hex_bytes; 80 @hex_bytes = (); 81 } 82 my $n = _fumigate(@digits); 83 push @b, sprintf "%02X", ($n) & 0xFF; 84 push @b, sprintf "%02X", ( $n >> 8 ) & 0xFF; 85 push @b, sprintf "%02X", ( $n >> 16 ) & 0xFF; 86 push @b, sprintf "%02X", ( $n >> 24 ) & 0xFF; 87 } 88 return @b; 89} 90 91sub _fumigate { 92 my (@bytes) = @_; 93 use integer; 94 my $i = 0; 95 my $sum = 0; 96 for my $byte (@bytes) { 97 my $lshifter = $i * 8; 98 my $shifted = 1 << $lshifter; 99 my $n = _crop_duster($byte) << $lshifter; 100 my $m = ( $n + $shifted + 0xFFFFFFFF ) | ( -1 - $sum ); 101 $sum += $m - $shifted - $n + 1; 102 ++$i; 103 } 104 return $sum; 105} 106 107sub _crop_duster { 108 my $i = shift; 109 use integer; 110 my $a = $i * 0xFFFFFA29 + 0x307E; 111 my $b = ( $i * 0xFFF38978 + 0x2327B048 ) ^ ( $a | 0xFF ); 112 my $c = ( $a | ( $i * 0xC7688 + 0xDCD84FB7 ) ) | 0xFF; 113 return $i * 0xC70B1 + $b * 0xFFFFFFFF + $c * 0xFFFFFFFE + 0xDCD88033; 114} 115 116#-------------- class member methods ---------------------# 117 118sub new { 119 my ( $class, %args ) = @_; 120 my $self = {}; 121 bless( $self, $class ); 122 123 $self->{DEBUG} = $args{DEBUG}; 124 125 # iTMS crypt-apple-twofish scrambler 126 $self->{key} = $args{key}; 127 128 # iTunes veggie tales scrambler 129 $self->{veggie} = $args{veggie}; 130 $self->{byte_table} = $args{byte_table}; 131 $self->{int_table} = $args{int_table}; 132 $self->{hwID} = $args{hwID}; 133 $self->{keyID} = $args{keyID}; 134 $self->{userID} = $args{userID}; 135 136 return $self; 137} 138 139#------------ iTMS methods ---------------------------------# 140 141sub _process_iTMS_key { 142 my ($self) = @_; 143 my $k = ''; 144 my $key = $self->{key}; 145 my $siz = length $key; 146 for ( my $i = 0 ; $i < $siz ; $i++ ) { 147 $k .= chr $apple_tf_iTMS[ $i % 16 ]->[ ord substr( $key, $i % 16, 1 ) ]; 148 } 149 return $k; 150} 151 152sub decrypted_for_iTMS { return shift->_process_iTMS_key() } 153 154sub _process_DRMS_key { 155 my ($self) = @_; 156 my $k = ''; 157 my $key = $self->{key}; 158 my $siz = length $key; 159 for ( my $i = 0 ; $i < $siz ; $i++ ) { 160 $k .= chr $apple_tf_DRMS[ $i % 16 ]->[ ord substr( $key, $i % 16, 1 ) ]; 161 } 162 return $k; 163} 164 165sub decrypted_for_DRMS { return shift->_process_DRMS_key() } 166 167#-------------- SC Info methods -------------------------------------# 168 169sub key { 170 my ( $self, $new_key ) = @_; 171 $self->{key} = $new_key if defined $new_key; 172 return $self->{key}; 173} 174 175sub int_table { 176 my ( $self, $new_table ) = @_; 177 $self->{int_table} = $new_table if defined $new_table; 178 return $self->{int_table}; 179} 180 181sub byte_table { 182 my ( $self, $new_table ) = @_; 183 $self->{byte_table} = $new_table if defined $new_table; 184 return $self->{byte_table}; 185} 186 187sub veggie { 188 my ( $self, $new_veg ) = @_; 189 $self->{veggie} = $new_veg if defined $new_veg; 190 return $self->{veggie}; 191} 192 193sub hwID { 194 my ( $self, $newhwID ) = @_; 195 $self->{hwID} = $newhwID if defined $newhwID; 196 return $self->{hwID}; 197} 198 199sub keyID { 200 my ( $self, $newkeyID ) = @_; 201 $self->{keyID} = $newkeyID if defined $newkeyID; 202 return $self->{keyID}; 203} 204 205sub userID { 206 my ( $self, $newuser ) = @_; 207 $self->{userID} = $newuser if defined $newuser; 208 return $self->{userID}; 209} 210 211sub _hoe_hoe_hoe { 212 my ( $self, $byte, $i, $j, $k, $n ) = @_; 213 use integer; 214 my $offset = 0x24004; 215 my $table_idx = 216 ord( $self->{byte_table}->[ $i * 0x100 + $byte + $offset ] ) + $j * 0x100; 217 return ( $planter_table[$table_idx] * $k + $n ) & 0xFF; 218} 219 220sub plant_veggies { 221 my ($self) = @_; 222 my $table = $self->{int_table}; 223 my $combine = 224 _combine_keys( $self->{hwID}, $self->{keyID}, $self->{userID} ); 225 $self->{combine_key} = $combine; 226 my @bytes = map { ord } split //, $combine; 227 use integer; 228 for my $i ( 0 .. 8 ) { 229 my @planter; 230 for my $j ( 0 .. 15 ) { 231 my $idx = $i * 0x1000 + $j * 0x100 + $bytes[ ( $j * 5 ) & 0xF ]; 232 $planter[$j] = $table->[$idx] * 0x50A19981 + 0x5E39C9C0; 233 } 234 for my $j ( 0 .. 3 ) { 235 my $a = $planter[ $j * 4 ]; 236 my $b = $planter[ $j * 4 + 1 ]; 237 my $c = $planter[ $j * 4 + 2 ]; 238 my $d = $planter[ $j * 4 + 3 ]; 239 my $e = _compost_cow($c) | _compost_cow($b); 240 my $f = _compost_horse( $b, $c, $e ) | _compost_cow($d); 241 my $g = _compost_sheep( $b, $c, $d, $e, $f ) | _compost_cow($a); 242 my $h = 243 ( $a + $b + $c + $d + ( $e + $f + $g ) * 0xD3F0627F + 0x8DC2C100 ) 244 * 0x2E895D7F + 0xC99394FF; 245 246 for my $k ( 0 .. 3 ) { 247 $bytes[ $j * 4 + $k ] = ( $h >> ( 24 - $k * 8 ) ) & 0xFF; 248 } 249 } 250 } 251 print "\nprecultivation bytes are ", ( join q{}, map { chr } @bytes ), "\n" 252 if $self->{DEBUG}; 253 $bytes[0] = $self->_hoe_hoe_hoe( $bytes[0], 0, 2, 0x99, 0xDF ); 254 $bytes[4] = $self->_hoe_hoe_hoe( $bytes[4], 4, 3, 0xB5, 0xFF ); 255 $bytes[8] = $self->_hoe_hoe_hoe( $bytes[8], 8, 4, 0x59, 0xD3 ); 256 $bytes[12] = $self->_hoe_hoe_hoe( $bytes[12], 12, 5, 0x2F, 0x1E ); 257 my $tmp = $bytes[1]; 258 $bytes[1] = $self->_hoe_hoe_hoe( $bytes[5], 1, 6, 0x95, 0xFC ); 259 $bytes[5] = $self->_hoe_hoe_hoe( $bytes[9], 5, 7, 0x05, 0x36 ); 260 $bytes[9] = $self->_hoe_hoe_hoe( $bytes[13], 9, 0, 0x05, 0x6D ); 261 $bytes[13] = $self->_hoe_hoe_hoe( $tmp, 13, 9, 0x05, 0xE1 ); 262 $tmp = $bytes[2]; 263 $bytes[2] = $self->_hoe_hoe_hoe( $bytes[10], 2, 10, 0x4D, 0xB0 ); 264 $bytes[10] = $self->_hoe_hoe_hoe( $tmp, 10, 11, 0x0B, 0x2E ); 265 $tmp = $bytes[6]; 266 $bytes[6] = $self->_hoe_hoe_hoe( $bytes[14], 6, 12, 0x93, 0x4E ); 267 $bytes[14] = $self->_hoe_hoe_hoe( $tmp, 14, 13, 0x9b, 0x75 ); 268 269 $tmp = $bytes[3]; 270 $bytes[3] = $self->_hoe_hoe_hoe( $bytes[15], 3, 14, 0x93, 0xC8 ); 271 $bytes[15] = $self->_hoe_hoe_hoe( $bytes[11], 15, 15, 0x33, 0x8B ); 272 $bytes[11] = $self->_hoe_hoe_hoe( $bytes[7], 11, 1, 0x5B, 0x25 ); 273 $bytes[7] = $self->_hoe_hoe_hoe( $tmp, 7, 8, 0xED, 0xC5 ); 274 print "cultivated bytes are ", ( join q{}, map { chr } @bytes ), "\n" 275 if $self->{DEBUG}; 276 return @bytes; 277} 278 279sub harvest_veggies { 280 my ( $self, @bytes ) = @_; 281 my $veggie = $self->{veggie}; 282 283 use integer; 284 if ( $veggie =~ m/carrot|garlic|potato|radish|tomato/ ) { 285 _till( \@bytes, $veggie ); 286 } 287 288 _weed( \@bytes, $veggie ); 289 my $sha1 = Digest::SHA->new(1); 290 $sha1->add( $self->{combine_key} ); 291 my @digest_bytes = map { ord } split //, $sha1->digest; 292 _weed( \@digest_bytes, 'pepcid' ); 293 294 for my $i ( 0 .. 13 ) { 295 my $a = $bytes[ $i + 2 ]; 296 my $b = $digest_bytes[ $i + 1 ]; 297 my $c = ( $a * 0xFFFF9129 + 0xA07E ) | 0xFF; 298 my $d = ( $a * 0xFFAD8735 + 0x109ABD82 ) ^ $c; 299 my $e = ( $a * 0xFFFF9129 + 0xA07E ) | ( $a * 0x5278CB + 0xEF65427D ); 300 my $f = $e | 0xFF; 301 my $g = ( $b * 0xFFFFCB29 + 0x417E ) | 0xFF; 302 my $h = ( $b * 0xFFFFCB29 + 0x417E ) | ( $b * 0x698AC6 + 0xD597C97D ); 303 my $j = $h | 0xFF; 304 my $k = ( $b * 0xFF96753A + 0x2A683682 ) ^ $g; 305 my $m = 306 ( $b * 0xD2ABDE + $j * 0xFFFFFFFC + $k * 0xFFFFFFFE + 0xAB3015F3 ) | 307 ( $a * 0xA413E8 + $d * 0xFFFFFFFE + $f * 0xFFFFFFFC + 0xDECBC5F3 ); 308 $digest_bytes[ $i + 1 ] = ( 309 ( 310 $a * 0x3FC1ACD4 + 311 $b * 0x5B76357 + 312 ( $d + $k + $m ) * 0x71070EE7 + 313 ( $f + $j ) * 0xE20E1DCE + 0xB7ABCB54 314 ) 315 ) & 0xFF; 316 } 317 my $a = ord substr $self->{hwID}, 4, 1; 318 my $b = $a * 0xFFFF9CFF + 0xB8FF; 319 my $c = $b | 0xFF; 320 my $d = $b | ( $a * 0x32FA52 + 0x21E2D7AB ); 321 my $e = ( $a * 0xFFCD05AE + 0xDE1D2854 ) ^ $c; 322 my $f = $d | 0xFF; 323 my $nsize = ( $a * 0xFFCD68AF + $e + $f * 2 + 0xDE1C6F57 ) & 0x80000003 + 8; 324 use bigint; 325 my $ndigest_bytes = '0x' . join q{}, 326 _dust( @digest_bytes[ 0 .. $nsize - 1 ] ); 327 $ndigest_bytes = substr $ndigest_bytes, 0, ( $nsize * 2 ) + 2; 328 my $nd = Math::BigInt->new($ndigest_bytes); 329 my $nbytes_str = '0x' . join q{}, 330 map { length $_ > 1 ? $_ : '0' . $_ } _dust(@bytes); 331 my $nbytes = Math::BigInt->new($nbytes_str); 332 # print "nbytes_str is $nbytes_str, nybytes is $nbytes\n" if $self->{DEBUG}; 333 my $nB2 = 0xFFFFFFFFFFFFFFF9C31A00000000000933CCD065; 334 my $n00 = 0x100000000000000063CE600000000001DB577CE3F; 335 my $n1 = 1; 336 my $bits_in_digest = length( ( Math::BigInt->new($nd) )->as_bin ) - 2; 337 338 for ( my $i = $bits_in_digest - 1 ; $i >= 0 ; --$i ) { 339 $n1 *= $n1; 340 $nbytes *= $nbytes; 341 if ( $nd & ( 1 << $i ) ) { 342 $n1 = $nbytes - $n1; 343 my $m = ( ( ( $n1 >> 159 ) * $n00 ) >> 161 ) * $nB2; 344 $n1 = ( $n1 - $m ) % $nB2; 345 $m = ( ( ( $nbytes >> 159 ) * $n00 )>> 161 ) * $nB2; 346 $nbytes = ( $nbytes - $m ) % $nB2; 347 } 348 else { 349 $nbytes -= $n1; 350 my $m = ( ( ( $nbytes >> 159 ) * $n00 ) >> 161 )* $nB2; 351 $nbytes = ( $nbytes - $m )% $nB2; 352 $m = ( ( ( $n1 >> 159 ) * $n00 ) >> 161 ) * $nB2; 353 $n1 -= $m; 354 $nbytes %= $nB2; 355 } 356 } # now $n1 is right 357 my @digits = 358 ( substr( ( Math::BigInt->new($n1) )->as_hex, 2 ) ) =~ m/[\d\w]{2}/g; 359 my $digit_count = scalar @digits; 360 my $digest_fodder = join q{}, map { chr( hex $_ ) } @digits; 361 if ( $digit_count < 32 ) { 362 my $zeroes = "\x00" x ( 32 - $digit_count ); 363 $digest_fodder = $zeroes . $digest_fodder; 364 } 365 $sha1->reset; 366 $sha1->add($digest_fodder); 367 my $key_key = substr $sha1->digest, 1, 16; 368 print "The key key (for the priv keys) is $key_key\n" if $self->{DEBUG}; 369 return $key_key; 370} 371 372#------------- scramble tables --------------------------------------# 373 374@apple_tf_iTMS = ( 375 [ 376 4, 145, 105, 51, 65, 245, 121, 233, 87, 85, 24, 110, 118, 149, 377 117, 2, 83, 91, 246, 57, 53, 251, 126, 69, 129, 144, 199, 164, 378 198, 181, 132, 35, 206, 214, 21, 152, 146, 103, 93, 227, 23, 68, 379 44, 248, 169, 217, 50, 92, 131, 224, 14, 204, 140, 114, 124, 143, 380 120, 171, 56, 158, 232, 183, 48, 176, 37, 192, 41, 28, 36, 155, 381 231, 201, 221, 52, 189, 125, 122, 191, 242, 178, 249, 111, 109, 170, 382 6, 180, 237, 174, 254, 202, 17, 223, 230, 195, 141, 47, 67, 182, 383 99, 104, 15, 238, 45, 7, 27, 20, 166, 207, 159, 196, 244, 162, 384 133, 54, 138, 116, 8, 168, 156, 16, 0, 38, 148, 66, 19, 86, 385 115, 73, 239, 188, 136, 61, 108, 33, 247, 142, 193, 39, 90, 82, 386 34, 200, 197, 26, 88, 10, 25, 71, 1, 119, 130, 100, 98, 18, 387 154, 72, 106, 78, 70, 213, 173, 12, 229, 235, 228, 186, 77, 209, 388 84, 147, 160, 127, 76, 64, 139, 112, 60, 222, 177, 253, 49, 30, 389 81, 161, 13, 123, 243, 62, 212, 31, 97, 80, 250, 9, 225, 153, 390 40, 46, 172, 218, 220, 184, 63, 29, 102, 194, 22, 79, 59, 179, 391 96, 55, 11, 157, 175, 95, 113, 107, 185, 210, 208, 167, 236, 89, 392 32, 128, 137, 43, 241, 75, 150, 42, 135, 234, 215, 5, 187, 163, 393 151, 3, 94, 165, 203, 134, 211, 101, 216, 190, 58, 205, 219, 252, 394 74, 226, 255, 240, 395 ], 396 [ 397 201, 226, 95, 10, 98, 222, 106, 146, 254, 86, 109, 137, 35, 39, 398 56, 243, 245, 241, 57, 181, 158, 250, 104, 89, 23, 154, 40, 42, 399 132, 179, 195, 48, 76, 22, 167, 34, 25, 68, 62, 58, 235, 209, 400 125, 221, 206, 174, 147, 242, 251, 194, 208, 220, 200, 63, 193, 11, 401 156, 9, 0, 4, 46, 164, 41, 144, 212, 38, 101, 90, 85, 117, 402 28, 186, 159, 18, 183, 173, 97, 213, 207, 94, 187, 72, 114, 157, 403 7, 6, 126, 53, 203, 121, 188, 171, 78, 54, 202, 100, 130, 172, 404 232, 227, 224, 233, 122, 19, 108, 236, 150, 69, 75, 43, 103, 142, 405 123, 70, 238, 45, 169, 211, 44, 120, 71, 140, 124, 148, 197, 133, 406 113, 163, 88, 216, 79, 175, 199, 234, 80, 99, 231, 110, 81, 92, 407 182, 37, 170, 155, 27, 84, 180, 33, 31, 111, 13, 2, 136, 127, 408 105, 196, 59, 102, 184, 249, 73, 165, 237, 185, 15, 160, 239, 112, 409 178, 162, 20, 47, 219, 192, 8, 66, 217, 161, 1, 55, 91, 177, 410 246, 26, 198, 191, 17, 83, 141, 93, 32, 21, 30, 61, 52, 253, 411 36, 96, 119, 116, 139, 252, 74, 51, 151, 145, 77, 255, 225, 176, 412 248, 12, 3, 152, 134, 240, 230, 60, 118, 5, 210, 190, 129, 244, 413 205, 14, 149, 166, 247, 204, 67, 189, 50, 153, 131, 135, 143, 214, 414 128, 223, 229, 228, 64, 218, 138, 87, 29, 49, 168, 82, 215, 65, 415 115, 107, 16, 24, 416 ], 417 [ 418 208, 110, 109, 139, 9, 100, 10, 132, 96, 133, 5, 220, 250, 92, 419 36, 61, 244, 117, 171, 68, 52, 8, 144, 162, 146, 67, 107, 200, 420 240, 147, 213, 54, 253, 72, 85, 234, 11, 29, 38, 178, 184, 91, 421 44, 215, 202, 101, 247, 46, 190, 1, 88, 229, 173, 114, 16, 99, 422 104, 26, 186, 148, 89, 183, 137, 53, 185, 206, 175, 164, 218, 20, 423 225, 87, 231, 57, 121, 168, 3, 120, 254, 83, 28, 80, 201, 60, 424 158, 76, 39, 0, 243, 166, 204, 49, 189, 82, 255, 95, 62, 97, 425 69, 224, 63, 156, 154, 199, 246, 212, 237, 56, 32, 149, 176, 163, 426 228, 252, 211, 24, 214, 188, 14, 222, 84, 138, 221, 203, 55, 122, 427 35, 58, 127, 22, 71, 34, 170, 210, 98, 7, 31, 226, 43, 151, 428 191, 59, 152, 23, 90, 66, 42, 223, 12, 187, 33, 130, 118, 113, 429 41, 245, 6, 48, 238, 81, 242, 141, 78, 161, 21, 179, 103, 249, 430 65, 216, 4, 155, 77, 159, 25, 18, 251, 174, 239, 111, 169, 73, 431 230, 209, 241, 129, 160, 196, 2, 192, 150, 47, 45, 125, 75, 30, 432 182, 51, 124, 13, 37, 227, 123, 15, 108, 126, 233, 248, 207, 119, 433 131, 70, 136, 74, 180, 153, 172, 181, 193, 219, 217, 195, 236, 17, 434 143, 79, 102, 19, 128, 235, 198, 27, 115, 194, 112, 177, 157, 165, 435 94, 140, 86, 93, 142, 64, 145, 105, 205, 135, 106, 232, 116, 167, 436 50, 197, 134, 40, 437 ], 438 [ 439 117, 161, 170, 193, 109, 111, 58, 80, 55, 160, 8, 56, 106, 239, 440 53, 247, 128, 65, 232, 173, 74, 105, 244, 188, 233, 190, 49, 159, 441 210, 110, 212, 137, 92, 60, 67, 18, 107, 100, 115, 211, 185, 27, 442 31, 230, 7, 32, 102, 77, 44, 199, 217, 13, 150, 252, 23, 62, 443 200, 255, 0, 29, 54, 36, 103, 12, 162, 133, 191, 57, 240, 242, 444 2, 94, 194, 28, 147, 157, 192, 213, 6, 43, 204, 154, 51, 153, 445 222, 121, 11, 254, 151, 180, 71, 172, 225, 123, 127, 97, 25, 171, 446 249, 79, 227, 40, 136, 177, 4, 229, 35, 243, 195, 39, 120, 168, 447 138, 9, 148, 184, 5, 113, 218, 101, 45, 186, 140, 85, 143, 253, 448 181, 63, 228, 134, 75, 112, 219, 95, 108, 96, 33, 201, 37, 3, 449 165, 226, 182, 175, 14, 223, 235, 87, 93, 251, 198, 231, 183, 205, 450 220, 206, 16, 84, 119, 26, 238, 15, 73, 126, 82, 78, 86, 88, 451 207, 141, 118, 89, 10, 236, 68, 216, 187, 114, 130, 144, 131, 59, 452 64, 164, 241, 189, 214, 42, 41, 224, 197, 245, 208, 237, 48, 24, 453 76, 129, 19, 1, 135, 30, 125, 38, 90, 99, 209, 166, 149, 47, 454 83, 174, 203, 234, 46, 132, 142, 98, 202, 50, 81, 91, 248, 34, 455 246, 250, 66, 196, 124, 69, 156, 22, 158, 145, 167, 176, 152, 17, 456 221, 179, 52, 70, 104, 163, 61, 116, 139, 20, 146, 21, 215, 178, 457 72, 122, 169, 155, 458 ], 459 [ 460 12, 23, 233, 120, 139, 254, 24, 182, 41, 64, 69, 13, 98, 230, 461 65, 190, 251, 172, 115, 144, 71, 155, 79, 111, 97, 208, 19, 143, 462 192, 209, 219, 57, 250, 39, 119, 116, 34, 2, 134, 215, 84, 141, 463 61, 122, 59, 27, 92, 194, 50, 17, 72, 51, 93, 245, 96, 177, 464 117, 226, 83, 153, 135, 88, 175, 74, 160, 32, 29, 252, 110, 213, 465 114, 229, 63, 66, 1, 113, 179, 176, 62, 90, 253, 157, 21, 5, 466 60, 94, 15, 185, 180, 168, 235, 241, 107, 220, 9, 127, 99, 217, 467 211, 76, 212, 188, 45, 0, 68, 26, 161, 75, 149, 239, 178, 35, 468 10, 214, 218, 131, 159, 20, 224, 30, 199, 148, 163, 228, 195, 58, 469 78, 128, 154, 54, 193, 123, 101, 255, 196, 244, 125, 25, 67, 187, 470 234, 170, 55, 186, 231, 236, 87, 232, 104, 124, 103, 11, 207, 80, 471 138, 95, 109, 38, 223, 202, 47, 173, 189, 204, 4, 147, 150, 200, 472 248, 167, 43, 40, 142, 133, 203, 53, 174, 22, 158, 171, 184, 7, 473 242, 183, 197, 44, 249, 89, 81, 121, 85, 246, 164, 210, 166, 82, 474 52, 18, 31, 151, 206, 49, 46, 238, 145, 240, 14, 130, 112, 3, 475 77, 100, 205, 191, 243, 16, 8, 56, 106, 28, 225, 181, 108, 227, 476 136, 221, 48, 237, 73, 146, 37, 91, 105, 6, 42, 118, 36, 33, 477 137, 156, 247, 222, 216, 165, 86, 152, 140, 129, 169, 70, 126, 162, 478 198, 132, 201, 102, 479 ], 480 [ 481 32, 147, 54, 169, 8, 64, 100, 21, 49, 220, 73, 79, 236, 154, 482 232, 210, 14, 132, 204, 188, 39, 241, 121, 170, 237, 224, 95, 126, 483 130, 173, 211, 53, 19, 151, 202, 68, 219, 226, 229, 139, 22, 103, 484 96, 15, 93, 1, 182, 111, 145, 52, 2, 149, 218, 84, 255, 207, 485 125, 178, 233, 90, 28, 118, 193, 69, 75, 209, 5, 253, 26, 194, 486 82, 197, 98, 248, 114, 215, 55, 243, 222, 57, 133, 245, 199, 51, 487 144, 198, 244, 59, 179, 16, 3, 161, 155, 200, 213, 30, 61, 252, 488 135, 235, 146, 136, 143, 33, 113, 124, 203, 206, 94, 238, 105, 36, 489 189, 24, 142, 186, 223, 87, 166, 76, 181, 81, 184, 160, 176, 104, 490 46, 175, 44, 120, 85, 20, 177, 138, 190, 56, 65, 71, 4, 106, 491 196, 134, 247, 108, 60, 109, 246, 48, 153, 119, 62, 122, 250, 195, 492 234, 163, 74, 140, 31, 180, 63, 92, 230, 35, 101, 227, 158, 0, 493 9, 13, 167, 239, 89, 17, 67, 38, 43, 192, 7, 29, 70, 137, 494 240, 102, 117, 12, 172, 187, 34, 171, 99, 141, 150, 165, 97, 41, 495 127, 66, 159, 91, 216, 83, 225, 6, 212, 47, 107, 164, 205, 152, 496 251, 40, 249, 115, 191, 208, 214, 86, 37, 156, 128, 25, 88, 183, 497 116, 129, 77, 157, 112, 221, 45, 174, 50, 123, 217, 27, 18, 168, 498 201, 72, 185, 131, 78, 11, 148, 58, 23, 42, 162, 228, 10, 80, 499 242, 110, 231, 254, 500 ], 501 [ 502 240, 192, 203, 158, 19, 171, 135, 225, 193, 126, 67, 121, 100, 246, 503 186, 195, 233, 7, 131, 55, 166, 39, 14, 64, 167, 173, 188, 127, 504 160, 125, 59, 57, 237, 26, 56, 241, 189, 137, 23, 34, 86, 185, 505 37, 44, 17, 8, 245, 165, 80, 35, 199, 175, 169, 43, 48, 176, 506 92, 0, 210, 178, 238, 198, 208, 224, 105, 216, 141, 95, 150, 140, 507 236, 249, 235, 129, 106, 138, 134, 103, 10, 73, 13, 212, 143, 219, 508 211, 252, 112, 229, 142, 155, 108, 183, 244, 170, 18, 128, 184, 214, 509 96, 149, 254, 82, 88, 116, 230, 97, 40, 60, 78, 79, 177, 85, 510 205, 6, 242, 49, 218, 123, 239, 54, 201, 72, 151, 221, 107, 132, 511 75, 84, 94, 154, 182, 215, 174, 248, 213, 99, 28, 231, 22, 70, 512 157, 164, 41, 172, 253, 5, 191, 200, 98, 247, 45, 163, 32, 223, 513 24, 227, 89, 161, 16, 251, 130, 104, 30, 120, 145, 91, 52, 65, 514 122, 4, 27, 93, 111, 124, 181, 250, 255, 217, 21, 29, 179, 190, 515 206, 33, 196, 168, 46, 102, 71, 66, 81, 87, 76, 68, 147, 162, 516 20, 207, 234, 117, 133, 36, 180, 204, 226, 209, 50, 159, 25, 119, 517 101, 197, 15, 2, 202, 232, 31, 11, 113, 194, 38, 243, 9, 51, 518 69, 61, 62, 58, 12, 228, 144, 115, 1, 42, 83, 156, 220, 3, 519 109, 77, 114, 152, 187, 74, 146, 47, 136, 110, 90, 63, 222, 139, 520 148, 153, 53, 118, 521 ], 522 [ 523 159, 5, 106, 136, 30, 230, 132, 176, 109, 91, 85, 66, 222, 112, 524 226, 71, 211, 245, 209, 34, 111, 197, 247, 26, 13, 153, 168, 215, 525 167, 121, 194, 203, 244, 239, 148, 126, 69, 80, 7, 115, 0, 33, 526 131, 208, 25, 94, 243, 249, 200, 97, 82, 8, 145, 221, 119, 207, 527 108, 22, 19, 163, 155, 198, 170, 35, 120, 107, 231, 89, 98, 156, 528 86, 4, 241, 195, 44, 157, 186, 224, 219, 164, 165, 54, 135, 143, 529 113, 116, 28, 59, 104, 90, 125, 227, 218, 139, 63, 216, 27, 225, 530 220, 166, 41, 151, 100, 75, 193, 37, 161, 150, 88, 129, 213, 16, 531 242, 147, 64, 49, 171, 117, 180, 29, 252, 192, 60, 238, 114, 237, 532 236, 14, 202, 79, 96, 240, 189, 9, 36, 196, 101, 2, 191, 68, 533 57, 124, 234, 250, 138, 46, 187, 123, 67, 253, 81, 174, 62, 210, 534 169, 205, 146, 51, 162, 199, 23, 72, 178, 179, 18, 160, 47, 184, 535 42, 65, 154, 38, 78, 92, 12, 20, 133, 223, 52, 11, 212, 177, 536 201, 48, 55, 102, 134, 251, 206, 141, 110, 128, 56, 137, 1, 74, 537 173, 158, 83, 255, 144, 181, 217, 17, 15, 127, 31, 190, 228, 24, 538 84, 93, 204, 182, 149, 73, 21, 248, 61, 233, 103, 122, 3, 152, 539 50, 140, 10, 39, 70, 118, 214, 142, 254, 229, 43, 32, 6, 45, 540 53, 235, 246, 183, 99, 232, 87, 95, 185, 76, 188, 105, 77, 175, 541 130, 40, 58, 172, 542 ], 543 [ 544 211, 130, 35, 117, 136, 59, 57, 156, 143, 181, 42, 9, 63, 60, 545 132, 195, 150, 183, 221, 33, 249, 171, 226, 191, 111, 68, 194, 229, 546 20, 26, 77, 190, 179, 31, 86, 164, 103, 200, 122, 233, 167, 125, 547 159, 206, 168, 104, 36, 222, 232, 234, 65, 245, 127, 94, 0, 210, 548 14, 67, 4, 173, 16, 217, 186, 38, 92, 64, 43, 85, 71, 116, 549 30, 91, 45, 10, 53, 49, 121, 139, 120, 62, 113, 72, 254, 144, 550 198, 23, 185, 252, 214, 141, 225, 79, 46, 112, 172, 11, 27, 146, 551 81, 131, 74, 3, 213, 248, 95, 8, 138, 51, 238, 18, 239, 178, 552 123, 228, 37, 90, 100, 251, 157, 151, 166, 124, 187, 165, 203, 212, 553 240, 22, 73, 246, 48, 107, 34, 70, 61, 78, 227, 153, 97, 40, 554 101, 69, 21, 50, 155, 25, 66, 148, 175, 205, 242, 12, 87, 184, 555 55, 255, 76, 193, 28, 231, 58, 54, 17, 208, 137, 202, 133, 96, 556 236, 41, 80, 39, 174, 163, 98, 6, 158, 224, 169, 161, 47, 149, 557 147, 106, 189, 29, 89, 176, 152, 145, 83, 32, 2, 250, 52, 118, 558 220, 142, 192, 93, 196, 253, 82, 128, 56, 88, 170, 237, 218, 247, 559 140, 199, 204, 230, 7, 244, 209, 154, 15, 24, 201, 44, 99, 84, 560 223, 135, 182, 243, 180, 160, 177, 129, 19, 119, 102, 115, 5, 219, 561 235, 162, 109, 1, 13, 75, 241, 197, 216, 215, 126, 134, 114, 108, 562 105, 188, 110, 207, 563 ], 564 [ 565 90, 102, 154, 161, 197, 61, 105, 120, 16, 230, 127, 128, 36, 23, 566 103, 92, 57, 212, 9, 169, 158, 123, 216, 232, 0, 231, 139, 153, 567 35, 104, 144, 116, 142, 150, 87, 49, 113, 94, 206, 55, 3, 51, 568 151, 84, 214, 133, 165, 201, 38, 60, 202, 54, 176, 119, 195, 166, 569 43, 252, 79, 72, 107, 21, 219, 227, 18, 233, 88, 213, 243, 75, 570 41, 143, 164, 160, 147, 46, 73, 225, 137, 210, 193, 240, 226, 152, 571 25, 218, 203, 101, 11, 254, 220, 141, 209, 135, 115, 207, 148, 248, 572 157, 156, 68, 236, 234, 228, 253, 196, 177, 63, 187, 12, 70, 204, 573 28, 114, 172, 200, 198, 31, 215, 8, 159, 122, 132, 222, 19, 149, 574 44, 191, 26, 45, 7, 124, 192, 171, 67, 29, 69, 24, 10, 199, 575 100, 173, 6, 98, 244, 89, 34, 81, 181, 255, 80, 40, 109, 74, 576 211, 188, 118, 58, 130, 30, 239, 138, 71, 251, 146, 145, 242, 163, 577 246, 66, 235, 97, 245, 167, 178, 241, 249, 221, 247, 53, 62, 121, 578 237, 117, 110, 140, 131, 184, 2, 1, 48, 76, 217, 112, 136, 15, 579 223, 78, 64, 99, 20, 205, 86, 83, 185, 174, 37, 183, 82, 13, 580 65, 129, 125, 134, 186, 208, 27, 47, 190, 126, 52, 85, 155, 93, 581 50, 22, 106, 224, 194, 180, 238, 95, 108, 96, 59, 111, 17, 182, 582 162, 250, 56, 91, 32, 5, 175, 77, 42, 229, 39, 170, 14, 168, 583 4, 189, 33, 179, 584 ], 585 [ 586 164, 73, 41, 48, 14, 20, 92, 34, 57, 198, 27, 107, 119, 243, 587 188, 140, 122, 97, 127, 62, 19, 46, 146, 224, 77, 245, 225, 210, 588 123, 230, 26, 176, 191, 6, 169, 89, 218, 180, 227, 182, 148, 120, 589 234, 108, 156, 209, 238, 167, 170, 183, 65, 186, 163, 141, 248, 145, 590 239, 112, 187, 247, 79, 195, 222, 184, 82, 244, 3, 181, 233, 241, 591 11, 236, 161, 5, 117, 153, 175, 205, 152, 98, 85, 76, 162, 40, 592 37, 229, 64, 160, 72, 24, 157, 135, 16, 172, 174, 0, 90, 4, 593 190, 86, 61, 31, 80, 249, 149, 151, 166, 138, 133, 110, 197, 189, 594 171, 78, 52, 214, 173, 54, 226, 116, 237, 32, 179, 105, 22, 70, 595 150, 254, 131, 137, 12, 36, 235, 255, 66, 60, 147, 193, 109, 211, 596 240, 212, 199, 38, 228, 154, 10, 30, 178, 42, 7, 43, 88, 75, 597 130, 21, 47, 55, 231, 139, 124, 84, 177, 253, 196, 29, 102, 39, 598 206, 221, 232, 81, 125, 136, 202, 83, 59, 53, 99, 192, 201, 67, 599 216, 2, 94, 68, 33, 13, 159, 208, 242, 246, 69, 18, 185, 58, 600 63, 104, 9, 252, 158, 115, 8, 118, 103, 132, 100, 194, 91, 87, 601 142, 74, 213, 223, 106, 101, 165, 15, 251, 121, 25, 50, 51, 45, 602 168, 93, 113, 250, 204, 126, 35, 28, 49, 143, 56, 200, 219, 128, 603 17, 207, 95, 111, 215, 217, 96, 155, 144, 1, 129, 134, 220, 44, 604 71, 23, 203, 114, 605 ], 606 [ 607 245, 217, 174, 135, 25, 2, 99, 176, 57, 159, 150, 226, 243, 205, 608 55, 109, 129, 203, 42, 253, 138, 105, 120, 111, 254, 74, 207, 110, 609 75, 147, 36, 81, 255, 172, 53, 160, 238, 3, 199, 119, 169, 103, 610 244, 197, 189, 45, 102, 193, 116, 232, 15, 16, 0, 41, 114, 167, 611 173, 247, 151, 158, 191, 101, 68, 60, 54, 154, 77, 61, 219, 96, 612 231, 182, 47, 156, 95, 155, 229, 82, 195, 26, 44, 89, 29, 200, 613 56, 49, 22, 213, 87, 28, 124, 251, 133, 131, 126, 179, 225, 130, 614 220, 184, 67, 214, 187, 198, 65, 218, 175, 48, 234, 71, 141, 127, 615 241, 192, 212, 239, 123, 165, 27, 40, 107, 148, 34, 21, 108, 79, 616 227, 84, 221, 4, 181, 235, 90, 35, 223, 85, 104, 201, 233, 112, 617 106, 190, 118, 146, 216, 248, 33, 163, 8, 24, 73, 194, 246, 121, 618 117, 13, 140, 139, 149, 14, 37, 170, 98, 64, 128, 88, 91, 94, 619 228, 78, 144, 152, 166, 252, 153, 115, 157, 46, 93, 113, 58, 204, 620 177, 72, 188, 38, 183, 39, 11, 242, 145, 100, 164, 186, 132, 66, 621 80, 10, 230, 162, 23, 202, 209, 43, 69, 249, 30, 59, 224, 196, 622 211, 18, 178, 134, 208, 20, 125, 215, 83, 70, 122, 168, 62, 86, 623 92, 143, 19, 206, 237, 97, 236, 6, 185, 180, 52, 76, 137, 12, 624 136, 1, 51, 5, 171, 142, 161, 63, 7, 50, 210, 9, 240, 31, 625 250, 32, 222, 17, 626 ], 627 [ 628 194, 224, 115, 126, 70, 203, 214, 192, 157, 97, 146, 200, 10, 61, 629 238, 129, 85, 84, 195, 50, 28, 218, 53, 136, 124, 169, 247, 229, 630 121, 88, 57, 252, 153, 137, 141, 199, 81, 201, 11, 227, 144, 130, 631 120, 234, 216, 98, 172, 119, 34, 46, 95, 44, 83, 249, 168, 72, 632 156, 237, 104, 245, 179, 63, 189, 239, 159, 29, 110, 71, 36, 162, 633 65, 20, 160, 147, 107, 246, 205, 251, 142, 17, 212, 230, 184, 235, 634 67, 41, 190, 128, 133, 92, 102, 25, 22, 58, 149, 161, 174, 196, 635 4, 86, 5, 26, 135, 7, 117, 167, 74, 62, 69, 170, 150, 176, 636 96, 166, 38, 106, 131, 180, 132, 202, 134, 191, 254, 158, 250, 233, 637 78, 89, 109, 197, 105, 64, 68, 178, 118, 240, 47, 56, 18, 209, 638 39, 100, 94, 24, 211, 173, 165, 45, 15, 12, 164, 3, 19, 48, 639 213, 220, 243, 30, 187, 111, 181, 35, 13, 140, 222, 186, 206, 151, 640 6, 113, 255, 145, 215, 54, 175, 55, 99, 125, 228, 27, 101, 217, 641 244, 9, 139, 207, 33, 138, 91, 198, 232, 177, 80, 93, 90, 73, 642 163, 122, 236, 14, 127, 226, 171, 66, 108, 219, 193, 112, 75, 40, 643 223, 248, 60, 79, 210, 123, 32, 116, 52, 2, 114, 87, 204, 148, 644 143, 241, 103, 1, 182, 42, 253, 59, 155, 188, 82, 76, 43, 49, 645 16, 37, 221, 183, 154, 185, 242, 8, 31, 77, 0, 208, 51, 152, 646 231, 21, 23, 225, 647 ], 648 [ 649 110, 197, 222, 126, 246, 32, 225, 173, 0, 247, 204, 135, 35, 189, 650 87, 148, 73, 206, 43, 75, 140, 1, 12, 141, 58, 113, 103, 166, 651 20, 33, 236, 46, 172, 233, 229, 227, 85, 40, 152, 186, 223, 104, 652 88, 219, 97, 124, 255, 25, 47, 59, 116, 81, 2, 90, 107, 60, 653 214, 109, 19, 108, 6, 22, 41, 192, 48, 16, 61, 234, 155, 24, 654 118, 163, 147, 131, 7, 72, 251, 79, 17, 162, 242, 129, 171, 184, 655 240, 138, 199, 183, 30, 66, 217, 96, 212, 237, 21, 31, 74, 209, 656 28, 64, 82, 52, 123, 70, 94, 198, 119, 182, 78, 29, 150, 228, 657 49, 5, 196, 215, 62, 9, 133, 232, 65, 105, 159, 137, 180, 93, 658 51, 188, 208, 136, 158, 181, 231, 8, 80, 4, 250, 13, 193, 125, 659 106, 11, 176, 156, 53, 54, 143, 86, 177, 55, 239, 167, 202, 44, 660 238, 226, 187, 221, 15, 134, 178, 244, 216, 99, 114, 207, 102, 38, 661 100, 146, 175, 200, 57, 151, 149, 203, 69, 169, 128, 160, 121, 63, 662 161, 10, 224, 120, 190, 36, 249, 27, 243, 77, 185, 245, 92, 98, 663 254, 165, 18, 101, 145, 170, 195, 39, 174, 76, 252, 95, 130, 248, 664 111, 83, 179, 230, 91, 68, 218, 112, 210, 211, 235, 122, 37, 14, 665 115, 220, 45, 127, 213, 164, 132, 89, 168, 50, 84, 3, 191, 139, 666 157, 154, 194, 205, 67, 201, 142, 34, 153, 117, 26, 71, 241, 144, 667 23, 56, 42, 253, 668 ], 669 [ 670 175, 153, 20, 104, 23, 169, 5, 110, 234, 70, 161, 46, 210, 75, 671 254, 174, 133, 225, 237, 118, 88, 59, 224, 68, 111, 69, 143, 87, 672 215, 248, 36, 7, 168, 138, 177, 184, 229, 121, 142, 152, 77, 117, 673 182, 43, 85, 176, 127, 12, 82, 81, 188, 231, 151, 226, 14, 65, 674 228, 206, 38, 211, 204, 124, 180, 19, 22, 191, 157, 27, 9, 49, 675 72, 63, 24, 48, 141, 134, 186, 18, 159, 230, 56, 219, 119, 245, 676 171, 105, 30, 158, 26, 155, 189, 160, 57, 249, 207, 123, 112, 165, 677 251, 131, 154, 29, 95, 172, 192, 200, 6, 67, 92, 106, 144, 255, 678 220, 198, 223, 140, 147, 130, 167, 145, 61, 190, 54, 240, 202, 0, 679 13, 8, 58, 193, 238, 212, 203, 62, 129, 173, 93, 187, 102, 214, 680 45, 47, 32, 40, 178, 170, 185, 205, 78, 218, 103, 99, 16, 21, 681 52, 3, 42, 243, 71, 86, 94, 196, 120, 89, 232, 31, 28, 73, 682 74, 90, 128, 137, 241, 217, 108, 76, 60, 209, 247, 183, 44, 55, 683 125, 79, 4, 156, 233, 239, 216, 235, 98, 11, 15, 132, 181, 163, 684 194, 222, 2, 17, 242, 96, 64, 35, 50, 246, 33, 115, 236, 139, 685 164, 197, 53, 150, 135, 80, 84, 213, 113, 100, 107, 136, 208, 114, 686 97, 166, 83, 25, 41, 66, 109, 10, 122, 1, 51, 91, 37, 250, 687 146, 195, 148, 116, 227, 244, 199, 252, 39, 253, 126, 179, 201, 149, 688 221, 162, 34, 101, 689 ], 690 [ 691 10, 243, 251, 143, 29, 186, 72, 113, 185, 127, 94, 13, 47, 220, 692 193, 188, 77, 207, 160, 181, 49, 116, 238, 81, 165, 85, 204, 100, 693 153, 123, 236, 163, 159, 109, 3, 158, 133, 69, 192, 12, 125, 73, 694 48, 215, 247, 245, 103, 146, 219, 168, 30, 52, 40, 120, 218, 101, 695 140, 230, 224, 86, 58, 20, 149, 21, 114, 203, 142, 172, 104, 5, 696 174, 19, 75, 87, 56, 148, 107, 232, 96, 4, 248, 129, 92, 246, 697 183, 249, 170, 57, 214, 226, 150, 198, 144, 175, 110, 179, 233, 83, 698 212, 16, 61, 71, 234, 59, 205, 45, 74, 36, 216, 34, 65, 119, 699 162, 190, 66, 115, 8, 196, 27, 237, 176, 95, 197, 68, 76, 63, 700 108, 189, 97, 223, 187, 222, 79, 173, 199, 126, 253, 89, 42, 156, 701 241, 18, 43, 182, 200, 152, 50, 24, 23, 221, 70, 250, 157, 41, 702 124, 136, 178, 208, 90, 225, 244, 255, 184, 64, 210, 195, 62, 44, 703 145, 78, 84, 242, 28, 130, 93, 213, 155, 132, 60, 154, 161, 25, 704 167, 105, 39, 164, 7, 202, 91, 211, 0, 118, 106, 235, 254, 191, 705 31, 147, 135, 131, 239, 228, 82, 122, 171, 26, 138, 134, 128, 121, 706 33, 53, 54, 169, 88, 112, 55, 6, 117, 102, 252, 2, 206, 17, 707 1, 32, 227, 98, 99, 11, 15, 14, 80, 35, 177, 22, 51, 9, 708 180, 166, 46, 209, 111, 151, 194, 38, 37, 229, 141, 201, 67, 137, 709 240, 139, 231, 217, 710 ] 711); 712 713@apple_tf_DRMS = ( 714 [ 715 157, 170, 213, 240, 230, 43, 19, 202, 225, 32, 247, 42, 63, 160, 716 132, 182, 233, 244, 228, 187, 104, 245, 198, 140, 46, 231, 72, 16, 717 83, 212, 24, 224, 156, 229, 163, 175, 162, 218, 54, 249, 30, 250, 718 185, 35, 118, 189, 171, 139, 4, 8, 103, 253, 211, 21, 141, 20, 719 165, 128, 146, 243, 114, 2, 93, 242, 10, 74, 84, 121, 34, 3, 720 36, 81, 252, 1, 14, 69, 108, 91, 246, 110, 92, 6, 119, 207, 721 248, 38, 130, 55, 251, 194, 28, 180, 201, 178, 148, 67, 236, 107, 722 22, 222, 147, 142, 18, 123, 197, 59, 190, 78, 125, 109, 127, 186, 723 237, 66, 5, 234, 137, 100, 169, 52, 85, 117, 80, 70, 7, 60, 724 105, 183, 138, 0, 235, 23, 145, 47, 129, 62, 77, 232, 149, 203, 725 172, 12, 68, 181, 73, 255, 133, 53, 40, 45, 15, 150, 82, 90, 726 155, 79, 238, 111, 113, 112, 71, 39, 88, 196, 205, 199, 27, 195, 727 215, 239, 41, 241, 122, 57, 217, 184, 191, 44, 177, 216, 11, 226, 728 65, 50, 76, 95, 158, 136, 159, 210, 254, 134, 151, 98, 61, 89, 729 164, 86, 33, 208, 99, 209, 152, 97, 179, 37, 168, 223, 31, 102, 730 144, 167, 51, 192, 87, 166, 116, 49, 188, 13, 200, 221, 25, 9, 731 64, 153, 219, 154, 94, 214, 204, 131, 220, 26, 75, 29, 227, 161, 732 48, 174, 101, 124, 176, 193, 56, 96, 58, 206, 135, 17, 115, 173, 733 126, 120, 143, 106, 734 ], 735 [ 736 79, 114, 199, 94, 3, 36, 212, 117, 193, 121, 182, 76, 32, 137, 737 190, 231, 104, 248, 210, 58, 213, 33, 21, 246, 101, 252, 46, 229, 738 133, 203, 96, 165, 177, 53, 119, 171, 255, 127, 204, 161, 45, 24, 739 184, 111, 34, 55, 61, 168, 202, 200, 169, 20, 142, 245, 150, 19, 740 4, 174, 77, 164, 62, 145, 48, 41, 100, 249, 197, 147, 159, 240, 741 113, 99, 72, 124, 30, 154, 196, 211, 74, 223, 0, 80, 207, 40, 742 185, 17, 37, 81, 15, 110, 148, 152, 160, 106, 85, 130, 225, 22, 743 131, 47, 235, 52, 233, 189, 179, 68, 221, 51, 218, 173, 146, 97, 744 181, 50, 157, 149, 14, 122, 241, 54, 59, 162, 89, 60, 87, 214, 745 39, 134, 69, 5, 250, 139, 216, 11, 56, 31, 198, 155, 129, 67, 746 128, 236, 232, 175, 105, 13, 84, 143, 95, 209, 75, 98, 219, 43, 747 224, 6, 156, 239, 27, 244, 208, 205, 222, 25, 103, 135, 188, 86, 748 26, 228, 220, 2, 215, 8, 153, 186, 115, 191, 195, 194, 243, 237, 749 170, 126, 178, 227, 163, 102, 91, 88, 254, 12, 38, 66, 44, 63, 750 82, 151, 23, 35, 238, 242, 206, 118, 73, 16, 29, 158, 172, 132, 751 42, 57, 138, 247, 234, 166, 176, 125, 116, 141, 107, 49, 78, 1, 752 136, 217, 90, 109, 83, 192, 10, 187, 9, 120, 108, 123, 7, 28, 753 144, 70, 230, 140, 18, 93, 183, 65, 180, 167, 64, 71, 253, 226, 754 201, 251, 92, 112, 755 ], 756 [ 757 234, 49, 53, 46, 190, 129, 148, 57, 174, 159, 74, 24, 51, 87, 758 76, 40, 208, 196, 173, 91, 115, 82, 149, 120, 206, 68, 62, 10, 759 204, 209, 79, 253, 108, 188, 214, 104, 243, 36, 164, 160, 21, 230, 760 19, 7, 229, 61, 23, 111, 84, 151, 201, 71, 94, 152, 210, 17, 761 197, 205, 89, 232, 3, 156, 72, 241, 220, 14, 8, 31, 179, 101, 762 110, 213, 216, 116, 75, 170, 70, 222, 227, 142, 73, 6, 48, 167, 763 103, 117, 223, 171, 123, 128, 114, 38, 130, 145, 225, 132, 168, 240, 764 112, 127, 247, 133, 161, 252, 172, 97, 88, 238, 184, 194, 125, 180, 765 249, 66, 106, 9, 99, 203, 144, 33, 29, 195, 69, 22, 126, 176, 766 154, 45, 13, 32, 131, 166, 44, 81, 119, 18, 221, 52, 12, 39, 767 41, 11, 92, 139, 30, 255, 98, 34, 2, 153, 83, 212, 181, 86, 768 100, 239, 236, 85, 27, 54, 141, 102, 250, 182, 163, 147, 96, 215, 769 157, 122, 124, 224, 56, 113, 134, 25, 136, 107, 242, 146, 178, 219, 770 26, 158, 155, 198, 20, 246, 50, 16, 43, 67, 237, 193, 254, 15, 771 140, 95, 1, 42, 105, 137, 218, 60, 187, 231, 47, 217, 202, 162, 772 251, 80, 59, 207, 192, 183, 135, 118, 169, 175, 77, 226, 248, 244, 773 78, 55, 233, 186, 211, 235, 63, 200, 121, 191, 245, 4, 150, 5, 774 109, 189, 143, 0, 185, 28, 37, 93, 35, 199, 90, 165, 138, 65, 775 177, 228, 58, 64, 776 ], 777 [ 778 45, 196, 144, 81, 131, 53, 52, 59, 178, 174, 191, 237, 219, 186, 779 109, 125, 247, 235, 19, 106, 1, 165, 95, 221, 38, 63, 117, 83, 780 244, 65, 4, 139, 172, 26, 103, 159, 194, 220, 211, 160, 189, 13, 781 47, 3, 223, 215, 119, 147, 50, 200, 171, 156, 225, 184, 89, 201, 782 169, 222, 78, 175, 255, 98, 15, 182, 116, 213, 10, 249, 66, 21, 783 56, 48, 167, 203, 168, 240, 105, 33, 154, 5, 73, 46, 254, 241, 784 31, 14, 180, 128, 0, 101, 87, 24, 68, 96, 107, 11, 2, 157, 785 40, 250, 121, 236, 227, 140, 60, 64, 239, 115, 177, 179, 207, 246, 786 198, 197, 166, 173, 233, 8, 202, 146, 205, 111, 170, 104, 248, 120, 787 187, 155, 35, 55, 88, 90, 138, 152, 126, 6, 148, 110, 22, 86, 788 145, 124, 224, 84, 62, 242, 39, 228, 135, 51, 85, 232, 226, 41, 789 77, 230, 37, 190, 231, 133, 153, 9, 113, 57, 118, 93, 130, 143, 790 134, 58, 7, 245, 70, 23, 36, 76, 199, 20, 183, 43, 163, 192, 791 136, 185, 92, 209, 72, 195, 204, 97, 251, 216, 44, 214, 149, 34, 792 164, 114, 181, 122, 82, 99, 100, 75, 253, 30, 218, 25, 29, 229, 793 162, 91, 71, 69, 210, 137, 27, 142, 243, 234, 42, 238, 102, 123, 794 17, 193, 28, 151, 217, 252, 80, 61, 212, 54, 176, 94, 79, 18, 795 67, 150, 12, 188, 49, 74, 127, 112, 208, 108, 141, 132, 32, 129, 796 161, 158, 16, 206, 797 ], 798 [ 799 240, 230, 183, 118, 16, 224, 217, 82, 219, 153, 156, 157, 5, 126, 800 100, 172, 72, 160, 105, 176, 89, 63, 149, 91, 233, 4, 18, 192, 801 211, 216, 191, 46, 99, 236, 200, 19, 25, 179, 62, 64, 71, 142, 802 237, 202, 108, 28, 54, 234, 181, 50, 162, 39, 167, 141, 81, 229, 803 13, 185, 151, 83, 205, 186, 44, 196, 210, 125, 146, 111, 165, 178, 804 35, 218, 103, 171, 119, 120, 2, 43, 7, 148, 116, 93, 32, 24, 805 56, 232, 169, 70, 33, 241, 137, 253, 6, 98, 94, 128, 154, 96, 806 17, 166, 66, 107, 67, 104, 212, 209, 40, 174, 213, 235, 51, 132, 807 138, 255, 12, 21, 227, 190, 117, 173, 86, 163, 87, 225, 193, 0, 808 244, 27, 243, 135, 139, 215, 187, 246, 97, 75, 80, 175, 206, 76, 809 189, 170, 38, 9, 238, 144, 223, 79, 124, 101, 251, 22, 129, 3, 810 204, 214, 90, 220, 77, 195, 26, 140, 134, 58, 112, 152, 59, 57, 811 68, 95, 245, 222, 41, 11, 31, 55, 113, 102, 208, 45, 85, 250, 812 84, 36, 147, 133, 114, 106, 228, 150, 53, 201, 121, 158, 248, 131, 813 188, 194, 30, 65, 110, 34, 221, 177, 226, 8, 69, 127, 198, 164, 814 254, 109, 123, 14, 74, 61, 92, 161, 115, 88, 252, 231, 15, 155, 815 73, 42, 168, 143, 249, 23, 78, 159, 207, 197, 1, 239, 29, 136, 816 49, 20, 48, 10, 184, 130, 199, 242, 145, 60, 52, 247, 122, 182, 817 180, 47, 37, 203, 818 ], 819 [ 820 2, 128, 152, 3, 185, 50, 231, 58, 65, 124, 68, 36, 156, 59, 821 213, 165, 180, 31, 89, 146, 252, 164, 76, 141, 228, 254, 119, 101, 822 183, 48, 159, 212, 5, 86, 225, 221, 9, 195, 30, 20, 78, 81, 823 127, 19, 218, 120, 189, 223, 147, 163, 170, 239, 148, 115, 17, 44, 824 167, 245, 63, 208, 74, 11, 202, 184, 77, 102, 34, 206, 134, 217, 825 16, 246, 149, 140, 109, 25, 190, 151, 186, 236, 69, 53, 203, 153, 826 150, 121, 92, 227, 187, 4, 15, 75, 113, 96, 251, 66, 226, 49, 827 240, 40, 215, 143, 112, 204, 220, 238, 171, 83, 22, 1, 224, 244, 828 234, 47, 242, 194, 41, 229, 26, 166, 100, 7, 211, 118, 80, 255, 829 130, 32, 54, 175, 237, 232, 176, 168, 99, 73, 181, 29, 95, 135, 830 98, 188, 37, 111, 233, 210, 79, 46, 55, 93, 247, 103, 248, 104, 831 137, 169, 154, 88, 117, 21, 198, 173, 33, 132, 230, 178, 14, 38, 832 72, 18, 172, 129, 158, 201, 199, 97, 214, 107, 139, 216, 142, 196, 833 138, 91, 64, 52, 123, 133, 131, 82, 27, 192, 136, 197, 209, 126, 834 12, 191, 56, 243, 193, 110, 174, 6, 235, 253, 177, 61, 122, 42, 835 125, 157, 108, 144, 200, 57, 205, 87, 8, 13, 114, 10, 23, 182, 836 51, 106, 24, 62, 160, 67, 162, 241, 90, 35, 145, 179, 84, 85, 837 28, 250, 116, 161, 94, 155, 71, 39, 222, 60, 43, 70, 105, 207, 838 45, 0, 249, 219, 839 ], 840 [ 841 152, 51, 46, 10, 108, 109, 173, 157, 35, 119, 74, 164, 70, 37, 842 254, 174, 147, 183, 62, 99, 165, 248, 205, 145, 59, 223, 21, 246, 843 175, 120, 132, 83, 187, 117, 128, 76, 63, 131, 27, 130, 72, 44, 844 189, 71, 203, 103, 106, 188, 79, 206, 151, 148, 146, 249, 182, 200, 845 167, 125, 141, 49, 234, 38, 242, 171, 22, 111, 34, 8, 82, 96, 846 154, 184, 161, 45, 105, 181, 155, 85, 232, 252, 26, 43, 81, 69, 847 211, 153, 65, 133, 88, 89, 77, 142, 110, 222, 215, 224, 239, 57, 848 0, 13, 66, 235, 9, 127, 163, 243, 238, 162, 75, 41, 11, 54, 849 18, 25, 29, 197, 241, 80, 24, 98, 20, 87, 137, 214, 23, 217, 850 229, 124, 225, 1, 30, 255, 169, 7, 114, 123, 4, 129, 227, 84, 851 28, 210, 190, 50, 55, 101, 126, 247, 3, 186, 236, 115, 170, 212, 852 113, 48, 191, 64, 193, 202, 56, 213, 149, 250, 185, 94, 140, 42, 853 194, 199, 156, 6, 244, 52, 216, 15, 160, 231, 33, 135, 144, 168, 854 228, 97, 92, 172, 245, 104, 209, 220, 68, 230, 195, 180, 138, 118, 855 179, 177, 139, 226, 31, 102, 233, 251, 5, 2, 32, 12, 95, 208, 856 112, 14, 166, 122, 67, 36, 58, 158, 218, 39, 53, 86, 16, 159, 857 107, 93, 192, 221, 207, 91, 237, 240, 198, 121, 196, 134, 73, 116, 858 78, 178, 61, 150, 143, 176, 136, 219, 100, 201, 253, 40, 60, 47, 859 19, 204, 90, 17, 860 ], 861 [ 862 17, 92, 106, 71, 15, 76, 148, 14, 184, 69, 182, 145, 165, 189, 863 133, 176, 223, 134, 234, 114, 249, 157, 137, 161, 41, 229, 48, 197, 864 169, 131, 65, 30, 28, 55, 232, 104, 9, 132, 174, 124, 33, 213, 865 73, 190, 45, 151, 250, 116, 154, 105, 158, 218, 98, 81, 27, 89, 866 42, 153, 253, 24, 150, 96, 110, 200, 163, 143, 225, 85, 52, 1, 867 102, 83, 181, 94, 144, 29, 77, 123, 128, 79, 7, 167, 117, 100, 868 194, 224, 210, 59, 171, 46, 62, 173, 159, 78, 51, 139, 187, 162, 869 84, 11, 245, 72, 236, 152, 179, 108, 149, 64, 178, 99, 103, 129, 870 109, 140, 192, 34, 227, 66, 240, 217, 204, 220, 57, 31, 122, 47, 871 22, 246, 135, 39, 40, 2, 199, 231, 146, 3, 10, 58, 203, 242, 872 243, 170, 18, 138, 172, 130, 191, 255, 221, 119, 202, 82, 118, 198, 873 97, 87, 86, 75, 25, 209, 37, 16, 248, 20, 141, 80, 193, 74, 874 188, 201, 8, 19, 251, 233, 32, 70, 147, 212, 126, 208, 230, 196, 875 219, 237, 186, 4, 120, 43, 26, 50, 35, 23, 244, 222, 0, 226, 876 211, 53, 155, 254, 205, 195, 56, 91, 164, 241, 206, 160, 107, 115, 877 235, 185, 38, 125, 13, 61, 238, 63, 111, 112, 252, 239, 90, 175, 878 183, 101, 156, 67, 214, 121, 177, 168, 180, 54, 127, 207, 166, 228, 879 68, 93, 44, 215, 142, 88, 49, 60, 113, 21, 36, 6, 216, 136, 880 247, 95, 12, 5, 881 ], 882 [ 883 213, 255, 153, 71, 239, 226, 145, 120, 124, 97, 233, 245, 121, 177, 884 212, 85, 218, 112, 251, 180, 225, 73, 42, 94, 221, 95, 27, 47, 885 205, 165, 111, 98, 247, 183, 2, 141, 56, 93, 129, 198, 31, 119, 886 7, 248, 211, 184, 171, 250, 249, 66, 26, 9, 38, 133, 96, 228, 887 53, 237, 122, 50, 105, 37, 139, 11, 219, 104, 126, 68, 18, 147, 888 25, 206, 240, 82, 158, 170, 178, 227, 234, 163, 3, 208, 216, 176, 889 203, 92, 217, 128, 229, 109, 181, 215, 182, 114, 156, 75, 10, 241, 890 244, 6, 34, 54, 232, 19, 209, 134, 195, 21, 159, 1, 67, 155, 891 102, 46, 152, 90, 99, 74, 231, 35, 107, 58, 61, 127, 236, 235, 892 220, 57, 254, 138, 223, 91, 191, 117, 130, 169, 62, 188, 36, 40, 893 246, 115, 135, 199, 81, 100, 200, 230, 146, 150, 45, 222, 157, 72, 894 43, 15, 83, 214, 197, 175, 39, 5, 193, 78, 161, 185, 55, 137, 895 101, 253, 87, 194, 166, 252, 210, 154, 88, 41, 84, 140, 201, 143, 896 204, 60, 44, 123, 142, 192, 190, 187, 202, 80, 12, 13, 29, 89, 897 33, 172, 242, 125, 160, 28, 76, 23, 64, 103, 52, 69, 113, 136, 898 189, 167, 174, 164, 16, 168, 22, 24, 108, 59, 30, 32, 106, 79, 899 173, 162, 224, 77, 86, 148, 63, 116, 179, 131, 238, 8, 48, 14, 900 149, 65, 144, 20, 243, 196, 151, 118, 186, 110, 4, 207, 70, 51, 901 49, 0, 17, 132, 902 ], 903 [ 904 195, 179, 81, 140, 48, 69, 167, 183, 86, 26, 24, 161, 231, 2, 905 219, 133, 254, 114, 240, 230, 128, 27, 163, 165, 82, 221, 17, 97, 906 202, 95, 223, 182, 215, 246, 136, 15, 217, 113, 229, 177, 243, 239, 907 242, 213, 91, 11, 210, 204, 160, 12, 200, 63, 252, 116, 33, 45, 908 147, 52, 3, 170, 162, 249, 1, 4, 255, 209, 212, 85, 174, 236, 909 184, 18, 164, 145, 110, 238, 55, 60, 218, 74, 67, 234, 20, 31, 910 0, 137, 142, 130, 253, 157, 192, 155, 190, 108, 84, 14, 54, 40, 911 197, 92, 65, 119, 43, 208, 152, 94, 191, 189, 214, 25, 104, 80, 912 153, 211, 76, 10, 90, 44, 149, 154, 121, 41, 247, 34, 58, 194, 913 127, 206, 241, 22, 169, 248, 98, 88, 146, 46, 175, 102, 109, 68, 914 132, 126, 50, 232, 235, 158, 135, 225, 101, 237, 23, 37, 13, 32, 915 185, 61, 173, 99, 47, 7, 233, 205, 59, 123, 77, 124, 39, 6, 916 251, 49, 199, 115, 181, 62, 56, 203, 66, 19, 228, 207, 138, 78, 917 141, 166, 122, 111, 73, 151, 134, 112, 87, 53, 72, 156, 226, 148, 918 159, 89, 178, 196, 75, 139, 5, 168, 8, 9, 21, 188, 131, 28, 919 16, 103, 176, 150, 96, 172, 180, 227, 117, 144, 79, 57, 143, 107, 920 105, 93, 51, 245, 220, 186, 38, 35, 193, 64, 42, 201, 71, 120, 921 216, 244, 198, 171, 83, 70, 250, 125, 129, 36, 118, 100, 222, 106, 922 187, 30, 224, 29, 923 ], 924 [ 925 122, 103, 120, 2, 33, 215, 203, 170, 76, 174, 61, 232, 183, 60, 926 42, 82, 137, 84, 246, 96, 223, 62, 55, 228, 48, 193, 151, 123, 927 133, 64, 6, 58, 30, 87, 16, 191, 105, 218, 165, 239, 107, 97, 928 206, 19, 175, 126, 116, 187, 222, 69, 237, 88, 135, 98, 238, 155, 929 171, 247, 91, 149, 66, 169, 93, 241, 44, 160, 54, 0, 176, 113, 930 75, 125, 202, 4, 45, 199, 121, 118, 8, 94, 51, 12, 147, 243, 931 73, 15, 65, 31, 146, 158, 159, 225, 46, 28, 86, 13, 172, 140, 932 251, 230, 26, 185, 161, 21, 178, 106, 198, 144, 108, 85, 227, 119, 933 109, 49, 217, 67, 205, 81, 102, 139, 134, 29, 233, 209, 71, 131, 934 186, 130, 14, 250, 40, 92, 179, 212, 127, 34, 25, 214, 150, 167, 935 7, 95, 195, 182, 240, 52, 37, 77, 138, 156, 115, 22, 90, 111, 936 63, 79, 249, 18, 245, 190, 173, 177, 197, 236, 252, 216, 57, 201, 937 10, 80, 229, 89, 180, 196, 74, 9, 213, 153, 157, 117, 100, 253, 938 208, 78, 56, 11, 224, 184, 143, 39, 124, 242, 168, 38, 59, 41, 939 235, 23, 164, 43, 83, 136, 145, 112, 53, 194, 110, 254, 1, 5, 940 181, 221, 207, 162, 204, 72, 104, 99, 101, 154, 210, 152, 129, 255, 941 244, 141, 163, 220, 20, 50, 192, 36, 219, 47, 24, 211, 188, 142, 942 70, 231, 3, 68, 226, 148, 234, 132, 17, 248, 200, 32, 27, 166, 943 35, 128, 114, 189, 944 ], 945 [ 946 59, 55, 181, 60, 64, 203, 17, 19, 4, 100, 248, 43, 96, 148, 947 38, 173, 91, 182, 110, 141, 13, 87, 193, 134, 185, 40, 174, 68, 948 168, 10, 66, 81, 71, 241, 57, 105, 90, 254, 221, 124, 192, 200, 949 160, 218, 189, 121, 247, 27, 42, 99, 226, 191, 210, 211, 177, 135, 950 30, 48, 164, 97, 8, 5, 183, 33, 171, 11, 122, 21, 46, 94, 951 18, 41, 109, 147, 49, 229, 154, 9, 178, 236, 239, 184, 116, 199, 952 132, 88, 216, 194, 54, 227, 86, 80, 158, 67, 228, 25, 166, 22, 953 215, 212, 39, 136, 157, 152, 198, 85, 83, 172, 7, 26, 204, 61, 954 34, 225, 169, 65, 126, 220, 98, 250, 156, 235, 159, 240, 69, 77, 955 186, 107, 79, 31, 252, 104, 155, 29, 75, 78, 20, 163, 133, 249, 956 84, 3, 139, 108, 230, 103, 222, 76, 12, 93, 195, 50, 35, 162, 957 117, 52, 58, 232, 47, 245, 234, 202, 89, 246, 196, 112, 170, 62, 958 201, 131, 238, 111, 53, 56, 253, 114, 140, 231, 153, 118, 180, 28, 959 143, 73, 37, 72, 237, 190, 208, 150, 179, 244, 197, 146, 206, 113, 960 217, 142, 224, 138, 92, 74, 119, 63, 137, 32, 255, 125, 24, 82, 961 144, 0, 102, 161, 149, 129, 151, 123, 95, 188, 242, 214, 223, 70, 962 187, 2, 14, 120, 36, 16, 15, 128, 207, 6, 44, 106, 127, 45, 963 167, 101, 1, 205, 251, 130, 51, 209, 243, 115, 165, 219, 175, 213, 964 145, 233, 176, 23, 965 ], 966 [ 967 251, 31, 207, 102, 22, 224, 76, 54, 108, 41, 70, 242, 104, 120, 968 160, 98, 221, 48, 131, 121, 93, 79, 223, 141, 219, 177, 149, 36, 969 71, 17, 243, 62, 164, 97, 56, 6, 55, 103, 234, 241, 38, 186, 970 53, 45, 231, 25, 193, 172, 250, 27, 96, 249, 208, 2, 167, 145, 971 125, 150, 142, 137, 99, 138, 248, 205, 80, 12, 107, 240, 105, 201, 972 85, 106, 86, 40, 34, 73, 196, 128, 52, 130, 140, 233, 153, 65, 973 78, 47, 163, 44, 229, 169, 132, 174, 162, 21, 23, 225, 237, 109, 974 139, 188, 58, 214, 143, 4, 7, 16, 67, 32, 185, 147, 89, 61, 975 91, 247, 175, 14, 244, 90, 230, 181, 228, 220, 18, 178, 19, 37, 976 113, 134, 235, 171, 168, 253, 199, 15, 66, 77, 211, 226, 83, 95, 977 239, 254, 69, 24, 115, 42, 64, 245, 135, 10, 92, 206, 116, 51, 978 192, 252, 9, 82, 203, 100, 212, 28, 176, 127, 200, 60, 26, 46, 979 33, 94, 72, 173, 119, 43, 101, 110, 213, 136, 222, 122, 155, 59, 980 20, 146, 232, 0, 81, 50, 216, 148, 183, 154, 210, 152, 227, 35, 981 187, 112, 118, 88, 3, 170, 1, 114, 158, 39, 191, 184, 124, 218, 982 215, 182, 166, 133, 49, 194, 117, 159, 126, 202, 63, 11, 29, 75, 983 8, 156, 68, 123, 30, 111, 5, 189, 84, 204, 157, 190, 13, 197, 984 144, 57, 255, 151, 236, 165, 238, 217, 209, 161, 87, 246, 180, 179, 985 198, 74, 195, 129, 986 ], 987 [ 988 216, 20, 160, 73, 253, 2, 47, 246, 49, 159, 12, 76, 100, 69, 989 105, 213, 0, 113, 143, 85, 94, 64, 180, 174, 40, 184, 254, 166, 990 83, 17, 252, 203, 68, 16, 212, 13, 1, 206, 151, 177, 35, 176, 991 175, 54, 56, 89, 31, 157, 240, 61, 59, 104, 186, 15, 82, 164, 992 133, 210, 72, 167, 170, 250, 226, 62, 232, 245, 9, 211, 130, 162, 993 101, 168, 43, 75, 219, 197, 185, 200, 191, 107, 215, 14, 91, 205, 994 63, 50, 96, 21, 58, 207, 106, 209, 111, 172, 204, 178, 224, 169, 995 214, 201, 255, 229, 29, 146, 145, 22, 165, 150, 7, 27, 99, 87, 996 41, 19, 26, 188, 92, 46, 81, 52, 51, 225, 187, 117, 93, 241, 997 28, 228, 251, 235, 182, 227, 98, 67, 115, 221, 244, 102, 142, 114, 998 116, 153, 4, 34, 33, 218, 6, 5, 154, 161, 42, 152, 132, 192, 999 247, 23, 121, 70, 148, 48, 238, 103, 39, 144, 11, 230, 84, 136, 1000 198, 60, 128, 38, 122, 208, 45, 149, 119, 202, 127, 53, 24, 118, 1001 36, 66, 195, 135, 141, 222, 179, 171, 239, 88, 110, 220, 44, 234, 1002 80, 125, 112, 37, 139, 134, 126, 183, 190, 131, 86, 10, 173, 147, 1003 78, 193, 248, 231, 8, 25, 140, 129, 95, 223, 236, 77, 18, 32, 1004 237, 249, 156, 243, 79, 196, 109, 155, 124, 137, 57, 217, 3, 97, 1005 158, 199, 120, 55, 30, 242, 65, 163, 194, 108, 90, 138, 123, 71, 1006 233, 189, 181, 74, 1007 ], 1008 [ 1009 46, 125, 92, 69, 40, 159, 217, 37, 43, 186, 19, 250, 247, 16, 1010 205, 50, 156, 103, 68, 187, 132, 184, 70, 11, 130, 163, 200, 74, 1011 105, 89, 44, 248, 77, 212, 143, 101, 98, 39, 241, 53, 116, 29, 1012 84, 166, 1, 14, 23, 237, 177, 196, 85, 142, 236, 6, 65, 88, 1013 73, 117, 128, 172, 102, 213, 90, 233, 180, 118, 107, 9, 173, 157, 1014 195, 144, 160, 15, 243, 71, 136, 227, 152, 87, 232, 223, 216, 79, 1015 140, 182, 104, 194, 149, 168, 100, 93, 191, 120, 228, 175, 51, 218, 1016 34, 58, 208, 78, 48, 28, 226, 75, 113, 17, 225, 192, 244, 246, 1017 134, 253, 82, 60, 176, 52, 170, 126, 167, 30, 178, 8, 5, 188, 1018 121, 4, 135, 235, 10, 183, 59, 252, 27, 31, 76, 179, 254, 45, 1019 222, 220, 138, 99, 122, 209, 41, 202, 238, 33, 197, 147, 131, 38, 1020 171, 239, 26, 215, 127, 63, 169, 21, 151, 111, 207, 106, 229, 129, 1021 133, 20, 83, 2, 193, 112, 13, 139, 124, 119, 49, 245, 12, 95, 1022 7, 224, 62, 240, 249, 55, 109, 36, 206, 198, 108, 148, 165, 203, 1023 61, 137, 96, 22, 164, 189, 158, 35, 153, 97, 154, 242, 86, 24, 1024 221, 91, 115, 3, 94, 72, 201, 161, 42, 123, 255, 64, 230, 204, 1025 150, 251, 146, 210, 162, 114, 190, 185, 66, 25, 67, 234, 145, 54, 1026 110, 56, 81, 32, 155, 219, 174, 0, 214, 47, 57, 181, 211, 18, 1027 231, 141, 199, 80, 1028 ], 1029 [ 1030 55, 223, 107, 214, 197, 109, 99, 16, 239, 155, 33, 188, 217, 96, 1031 241, 69, 4, 52, 122, 208, 179, 92, 141, 64, 173, 160, 63, 50, 1032 86, 162, 201, 46, 0, 140, 98, 85, 71, 75, 175, 195, 41, 167, 1033 60, 131, 249, 245, 135, 228, 9, 56, 84, 58, 221, 205, 233, 77, 1034 13, 111, 49, 161, 152, 8, 32, 19, 82, 106, 231, 229, 235, 67, 1035 171, 124, 150, 80, 35, 73, 7, 242, 66, 211, 236, 114, 250, 27, 1036 51, 100, 14, 207, 1, 237, 138, 15, 157, 213, 72, 137, 209, 177, 1037 128, 47, 230, 108, 43, 119, 42, 127, 248, 144, 110, 24, 168, 74, 1038 54, 65, 184, 17, 206, 218, 104, 199, 253, 97, 11, 181, 126, 102, 1039 191, 225, 18, 254, 133, 81, 23, 232, 129, 26, 227, 186, 12, 244, 1040 243, 22, 2, 123, 185, 76, 154, 120, 178, 174, 116, 238, 89, 37, 1041 193, 117, 166, 203, 31, 222, 40, 25, 148, 79, 240, 113, 134, 83, 1042 251, 139, 164, 130, 44, 48, 101, 61, 182, 255, 147, 53, 183, 210, 1043 192, 190, 39, 59, 176, 158, 95, 115, 216, 94, 196, 34, 172, 118, 1044 136, 88, 5, 252, 28, 151, 156, 112, 146, 247, 165, 93, 21, 163, 1045 215, 234, 212, 202, 194, 20, 159, 87, 200, 170, 125, 70, 38, 180, 1046 224, 132, 45, 62, 143, 121, 105, 226, 149, 246, 91, 30, 145, 142, 1047 90, 103, 220, 3, 189, 219, 78, 57, 10, 204, 153, 187, 169, 29, 1048 198, 36, 68, 6, 1049 ], 1050); 1051 1052#---------- lookup tables for veggie tales crypto -------------# 1053 1054%veggies = ( 1055 carrot => [ 113, 28 ], 1056 celery => [ 235, 135 ], 1057 fennel => [ 197, 217 ], 1058 garlic => [ 197, 240 ], 1059 peanut => [ 103, 109 ], 1060 potato => [ 55, 250 ], 1061 radish => [ 155, 70 ], 1062 squash => [ 249, 74 ], 1063 tomato => [ 23, 239 ], 1064 turnip => [ 239, 4 ], 1065 pepcid => [ 231, 153 ], # not a real veggie, therein lies a tale 1066); 1067 1068# 4096 byte table 1069@planter_table = ( 1070 210, 245, 177, 209, 93, 29, 141, 138, 162, 14, 70, 204, 5, 253, 1071 2, 28, 251, 51, 81, 115, 50, 110, 250, 167, 255, 195, 241, 65, 1072 8, 139, 242, 236, 113, 72, 107, 0, 32, 85, 198, 132, 127, 38, 1073 230, 73, 172, 225, 82, 17, 171, 21, 202, 170, 48, 125, 120, 67, 1074 159, 121, 131, 156, 114, 47, 66, 239, 89, 160, 183, 122, 146, 190, 1075 104, 154, 134, 105, 192, 10, 39, 232, 49, 83, 228, 108, 116, 74, 1076 235, 151, 194, 22, 33, 133, 52, 27, 244, 174, 35, 91, 3, 103, 1077 135, 80, 130, 178, 30, 191, 203, 237, 64, 180, 211, 20, 161, 112, 1078 119, 79, 247, 212, 164, 199, 186, 143, 173, 168, 185, 24, 84, 166, 1079 252, 36, 106, 7, 31, 90, 53, 176, 61, 254, 23, 99, 100, 109, 1080 62, 140, 102, 87, 34, 95, 157, 163, 220, 42, 11, 19, 249, 25, 1081 136, 226, 165, 181, 196, 152, 137, 76, 207, 200, 96, 12, 215, 213, 1082 18, 231, 63, 78, 15, 188, 234, 55, 37, 46, 58, 184, 1, 92, 1083 60, 187, 9, 44, 71, 13, 153, 148, 246, 224, 169, 205, 69, 147, 1084 123, 214, 26, 155, 45, 43, 41, 68, 189, 118, 217, 216, 223, 238, 1085 6, 101, 175, 221, 218, 59, 233, 222, 57, 201, 193, 117, 144, 98, 1086 54, 248, 142, 243, 111, 182, 158, 229, 129, 179, 219, 75, 94, 97, 1087 124, 197, 206, 240, 16, 227, 208, 126, 149, 4, 128, 56, 150, 88, 1088 77, 40, 145, 86, 198, 3, 199, 167, 155, 219, 107, 14, 246, 10, 1089 210, 12, 243, 251, 150, 188, 189, 133, 39, 69, 102, 170, 158, 145, 1090 57, 245, 135, 55, 80, 45, 166, 236, 7, 16, 77, 88, 56, 163, 1091 82, 84, 185, 242, 50, 47, 44, 151, 70, 103, 13, 227, 206, 238, 1092 40, 123, 224, 117, 153, 255, 53, 60, 38, 9, 86, 73, 31, 184, 1093 129, 30, 6, 90, 240, 254, 146, 15, 152, 142, 17, 112, 71, 101, 1094 244, 108, 100, 78, 205, 161, 214, 2, 87, 115, 164, 157, 228, 106, 1095 149, 93, 181, 209, 177, 8, 22, 230, 250, 121, 237, 11, 24, 36, 1096 229, 196, 215, 232, 193, 233, 65, 4, 52, 113, 222, 169, 75, 176, 1097 191, 64, 132, 114, 220, 180, 46, 49, 25, 62, 195, 168, 187, 26, 1098 33, 85, 116, 139, 218, 76, 178, 225, 118, 217, 91, 21, 252, 110, 1099 173, 165, 127, 95, 208, 182, 83, 67, 20, 192, 239, 140, 105, 144, 1100 248, 204, 97, 35, 134, 81, 249, 202, 41, 28, 174, 1, 211, 234, 1101 94, 160, 119, 124, 156, 253, 111, 172, 241, 235, 223, 68, 34, 120, 1102 207, 43, 179, 37, 61, 66, 126, 29, 203, 141, 79, 148, 59, 162, 1103 159, 128, 89, 42, 18, 147, 137, 27, 190, 125, 143, 58, 63, 175, 1104 183, 131, 200, 54, 226, 96, 138, 197, 201, 98, 122, 19, 247, 5, 1105 221, 109, 186, 23, 92, 51, 74, 104, 72, 213, 136, 154, 99, 212, 1106 216, 32, 130, 0, 171, 48, 231, 194, 232, 111, 251, 155, 183, 119, 1107 39, 64, 120, 244, 204, 26, 63, 215, 88, 42, 61, 21, 27, 85, 1108 200, 212, 240, 249, 113, 101, 59, 75, 38, 141, 136, 186, 187, 102, 1109 237, 190, 94, 79, 76, 114, 241, 44, 236, 179, 122, 107, 104, 219, 1110 45, 15, 128, 224, 46, 87, 214, 229, 145, 35, 37, 170, 8, 225, 1111 152, 161, 131, 222, 201, 112, 168, 228, 6, 16, 12, 83, 126, 192, 1112 121, 134, 123, 181, 82, 58, 162, 0, 109, 41, 24, 92, 171, 191, 1113 98, 221, 34, 20, 69, 29, 165, 185, 89, 206, 216, 72, 196, 49, 1114 205, 7, 254, 226, 53, 194, 43, 110, 137, 129, 9, 130, 18, 153, 1115 176, 193, 199, 70, 99, 246, 2, 172, 138, 146, 160, 217, 17, 208, 1116 175, 174, 23, 36, 169, 133, 210, 135, 100, 218, 108, 233, 248, 81, 1117 247, 197, 234, 96, 13, 117, 163, 67, 166, 184, 95, 47, 178, 118, 1118 243, 154, 1, 230, 158, 90, 105, 207, 40, 57, 177, 52, 65, 74, 1119 32, 73, 223, 148, 48, 22, 11, 106, 202, 253, 115, 250, 25, 167, 1120 195, 66, 188, 30, 147, 103, 127, 245, 189, 28, 144, 93, 71, 173, 1121 19, 50, 151, 60, 3, 182, 209, 84, 140, 31, 97, 55, 80, 125, 1122 211, 132, 227, 51, 203, 239, 14, 56, 252, 86, 116, 213, 33, 124, 1123 68, 159, 139, 149, 157, 77, 4, 235, 10, 255, 180, 238, 142, 5, 1124 78, 164, 143, 242, 62, 150, 220, 54, 231, 198, 91, 156, 104, 187, 1125 55, 87, 163, 99, 211, 160, 56, 100, 28, 2, 203, 67, 152, 82, 1126 33, 217, 215, 25, 200, 196, 16, 141, 101, 105, 119, 199, 254, 177, 1127 136, 34, 247, 62, 145, 118, 150, 27, 156, 58, 229, 252, 188, 79, 1128 226, 103, 232, 151, 209, 219, 224, 192, 166, 195, 110, 233, 5, 127, 1129 41, 210, 8, 149, 216, 85, 95, 22, 157, 144, 40, 20, 94, 176, 1130 92, 111, 54, 32, 13, 222, 183, 249, 154, 162, 42, 96, 17, 125, 1131 88, 236, 167, 75, 234, 65, 170, 4, 201, 129, 169, 77, 109, 198, 1132 24, 72, 116, 37, 241, 51, 182, 106, 121, 202, 39, 230, 93, 181, 1133 221, 138, 90, 173, 208, 245, 243, 158, 191, 14, 10, 124, 50, 218, 1134 128, 237, 133, 112, 251, 38, 131, 84, 253, 9, 26, 179, 148, 194, 1135 60, 61, 184, 197, 227, 73, 18, 64, 49, 185, 255, 31, 126, 120, 1136 107, 123, 122, 142, 143, 130, 53, 190, 214, 66, 189, 155, 168, 205, 1137 165, 164, 117, 242, 0, 29, 235, 132, 80, 174, 135, 146, 114, 225, 1138 15, 98, 45, 83, 159, 74, 204, 86, 175, 19, 11, 57, 161, 172, 1139 48, 193, 115, 81, 47, 250, 3, 76, 223, 206, 69, 68, 220, 43, 1140 21, 35, 240, 97, 239, 52, 63, 207, 71, 59, 6, 248, 12, 238, 1141 228, 153, 213, 140, 244, 171, 7, 89, 1, 113, 180, 231, 178, 139, 1142 36, 102, 134, 137, 70, 212, 91, 186, 246, 46, 108, 78, 147, 30, 1143 23, 44, 212, 27, 167, 71, 99, 35, 211, 44, 100, 224, 184, 134, 1144 235, 131, 68, 150, 105, 65, 199, 129, 180, 192, 220, 37, 157, 145, 1145 231, 247, 146, 185, 116, 38, 103, 210, 25, 42, 202, 251, 56, 222, 1146 29, 24, 216, 95, 230, 23, 84, 135, 89, 187, 108, 204, 154, 3, 1147 66, 17, 189, 207, 81, 22, 244, 13, 132, 205, 47, 74, 245, 92, 1148 148, 208, 114, 252, 248, 255, 234, 172, 165, 242, 39, 225, 190, 166, 1149 14, 236, 153, 85, 4, 72, 87, 107, 206, 9, 142, 0, 113, 73, 1150 209, 229, 133, 58, 196, 52, 176, 93, 249, 179, 106, 78, 97, 46, 1151 215, 218, 181, 173, 53, 238, 126, 197, 156, 237, 115, 178, 15, 98, 1152 110, 152, 246, 254, 140, 5, 61, 188, 91, 26, 195, 16, 213, 177, 1153 62, 51, 80, 70, 88, 21, 228, 125, 163, 241, 86, 76, 57, 161, 1154 79, 239, 18, 164, 11, 219, 30, 226, 159, 6, 45, 82, 10, 198, 1155 149, 123, 20, 101, 221, 32, 109, 182, 12, 117, 139, 128, 28, 130, 1156 183, 214, 54, 41, 31, 102, 69, 83, 111, 174, 168, 138, 63, 19, 1157 43, 33, 233, 8, 124, 137, 243, 217, 191, 158, 67, 40, 175, 34, 1158 253, 64, 120, 203, 141, 227, 60, 169, 127, 112, 143, 223, 119, 155, 1159 122, 36, 232, 194, 96, 1, 77, 104, 48, 75, 55, 193, 201, 121, 1160 240, 151, 118, 171, 160, 90, 250, 49, 186, 144, 59, 94, 170, 2, 1161 200, 162, 147, 50, 7, 136, 231, 104, 124, 220, 224, 32, 240, 207, 1162 215, 123, 227, 165, 24, 192, 247, 21, 170, 18, 92, 210, 7, 155, 1163 159, 14, 214, 66, 60, 172, 57, 218, 71, 5, 188, 249, 122, 225, 1164 65, 136, 99, 141, 86, 131, 195, 4, 69, 140, 103, 156, 58, 200, 1165 143, 47, 241, 64, 9, 194, 182, 20, 130, 149, 199, 230, 183, 38, 1166 180, 193, 190, 31, 39, 11, 89, 127, 163, 100, 33, 79, 142, 217, 1167 252, 114, 173, 133, 221, 15, 250, 94, 55, 211, 76, 152, 29, 10, 1168 93, 91, 98, 202, 2, 78, 174, 81, 119, 135, 43, 22, 154, 16, 1169 161, 157, 242, 189, 204, 177, 254, 70, 126, 253, 237, 110, 223, 6, 1170 80, 25, 212, 233, 125, 3, 181, 109, 111, 46, 54, 191, 40, 113, 1171 128, 203, 222, 34, 45, 144, 139, 229, 67, 158, 87, 246, 160, 226, 1172 85, 175, 90, 178, 148, 244, 185, 151, 248, 168, 77, 105, 196, 37, 1173 198, 121, 1, 101, 30, 8, 167, 206, 150, 59, 134, 245, 239, 62, 1174 120, 219, 95, 201, 236, 213, 117, 234, 68, 197, 238, 112, 116, 61, 1175 115, 129, 36, 176, 216, 50, 42, 19, 255, 138, 208, 186, 164, 205, 1176 0, 243, 52, 41, 118, 27, 35, 56, 102, 96, 63, 106, 228, 107, 1177 84, 132, 44, 232, 17, 23, 51, 137, 251, 82, 166, 179, 171, 184, 1178 108, 146, 74, 26, 235, 12, 53, 88, 187, 49, 145, 162, 209, 75, 1179 72, 13, 97, 73, 83, 169, 48, 153, 28, 147, 159, 210, 206, 238, 1180 186, 122, 234, 215, 111, 27, 211, 121, 226, 90, 207, 201, 248, 176, 1181 110, 240, 255, 123, 71, 228, 188, 64, 14, 94, 245, 136, 191, 153, 1182 142, 53, 104, 109, 141, 50, 83, 177, 60, 179, 115, 230, 89, 254, 1183 31, 46, 168, 242, 23, 247, 157, 218, 101, 192, 92, 22, 0, 73, 1184 63, 236, 15, 172, 246, 13, 244, 199, 95, 203, 85, 231, 19, 6, 1185 45, 87, 100, 213, 78, 208, 17, 25, 161, 151, 232, 212, 143, 163, 1186 62, 98, 97, 24, 33, 187, 160, 88, 128, 164, 196, 189, 79, 127, 1187 43, 124, 200, 74, 173, 225, 80, 65, 190, 221, 180, 12, 52, 1, 1188 209, 4, 7, 76, 10, 149, 86, 5, 129, 51, 169, 81, 183, 68, 1189 220, 167, 18, 29, 154, 11, 84, 224, 145, 202, 75, 57, 243, 148, 1190 239, 28, 250, 32, 137, 119, 8, 144, 150, 182, 117, 175, 130, 146, 1191 241, 133, 38, 249, 140, 181, 205, 185, 20, 178, 223, 36, 252, 91, 1192 204, 105, 55, 116, 2, 59, 135, 165, 30, 9, 233, 184, 166, 217, 1193 132, 106, 54, 193, 131, 77, 70, 42, 34, 16, 120, 99, 103, 152, 1194 138, 40, 198, 113, 26, 3, 118, 197, 156, 251, 147, 66, 108, 58, 1195 39, 56, 134, 235, 214, 102, 222, 82, 253, 47, 195, 229, 155, 112, 1196 44, 67, 171, 194, 158, 48, 216, 72, 107, 126, 41, 162, 219, 93, 1197 125, 96, 61, 139, 114, 49, 237, 37, 35, 69, 170, 21, 174, 227, 1198 221, 0, 188, 220, 104, 40, 152, 149, 173, 25, 81, 215, 16, 8, 1199 13, 39, 6, 62, 92, 126, 61, 121, 5, 178, 10, 206, 252, 76, 1200 19, 150, 253, 247, 124, 83, 118, 11, 43, 96, 209, 143, 138, 49, 1201 241, 84, 183, 236, 93, 28, 182, 32, 213, 181, 59, 136, 131, 78, 1202 170, 132, 142, 167, 125, 58, 77, 250, 100, 171, 194, 133, 157, 201, 1203 115, 165, 145, 116, 203, 21, 50, 243, 60, 94, 239, 119, 127, 85, 1204 246, 162, 205, 33, 44, 144, 63, 38, 255, 185, 46, 102, 14, 114, 1205 146, 91, 141, 189, 41, 202, 214, 248, 75, 191, 222, 31, 172, 123, 1206 130, 90, 2, 223, 175, 210, 197, 154, 184, 179, 196, 35, 95, 177, 1207 7, 47, 117, 18, 42, 101, 64, 187, 72, 9, 34, 110, 111, 120, 1208 73, 151, 113, 98, 45, 106, 168, 174, 231, 53, 22, 30, 4, 36, 1209 147, 237, 176, 192, 207, 163, 148, 87, 218, 211, 107, 23, 226, 224, 1210 29, 242, 74, 89, 26, 199, 245, 66, 48, 57, 69, 195, 12, 103, 1211 71, 198, 20, 55, 82, 24, 164, 159, 1, 235, 180, 216, 80, 158, 1212 134, 225, 37, 166, 56, 54, 52, 79, 200, 129, 228, 227, 234, 249, 1213 17, 112, 186, 232, 229, 70, 244, 233, 68, 212, 204, 128, 155, 109, 1214 65, 3, 153, 254, 122, 193, 169, 240, 140, 190, 230, 86, 105, 108, 1215 135, 208, 217, 251, 27, 238, 219, 137, 160, 15, 139, 67, 161, 99, 1216 88, 51, 156, 97, 138, 21, 241, 17, 61, 253, 237, 130, 218, 230, 1217 94, 180, 165, 221, 58, 132, 235, 99, 145, 163, 234, 70, 114, 55, 1218 207, 115, 49, 1, 16, 251, 170, 212, 177, 80, 219, 72, 104, 117, 1219 222, 172, 79, 62, 254, 201, 148, 161, 10, 81, 27, 53, 194, 162, 1220 248, 93, 0, 243, 111, 121, 51, 4, 42, 127, 122, 63, 89, 232, 1221 199, 242, 74, 22, 112, 18, 158, 233, 8, 2, 183, 240, 113, 131, 1222 12, 84, 28, 66, 91, 167, 250, 174, 225, 37, 220, 11, 156, 134, 1223 211, 75, 179, 247, 23, 24, 186, 106, 118, 143, 59, 77, 136, 92, 1224 3, 188, 97, 56, 135, 159, 7, 124, 204, 87, 50, 223, 13, 176, 1225 185, 160, 252, 190, 100, 76, 98, 151, 239, 210, 85, 120, 29, 86, 1226 39, 19, 140, 205, 150, 116, 126, 103, 90, 47, 125, 83, 68, 34, 1227 123, 67, 249, 25, 144, 26, 69, 213, 236, 32, 9, 52, 31, 208, 1228 168, 244, 231, 245, 202, 119, 15, 38, 95, 36, 226, 71, 197, 6, 1229 178, 64, 193, 196, 164, 171, 137, 20, 215, 109, 153, 60, 142, 40, 1230 41, 45, 229, 195, 107, 110, 146, 139, 141, 155, 169, 108, 157, 14, 1231 217, 96, 175, 198, 30, 5, 255, 189, 82, 43, 105, 54, 57, 73, 1232 129, 149, 88, 154, 206, 128, 102, 35, 191, 78, 246, 133, 65, 227, 1233 203, 187, 182, 33, 228, 101, 166, 184, 216, 147, 152, 214, 181, 44, 1234 200, 192, 46, 224, 173, 48, 209, 238, 238, 17, 205, 237, 121, 57, 1235 169, 166, 190, 42, 98, 232, 33, 25, 30, 56, 23, 79, 109, 143, 1236 78, 138, 22, 195, 27, 223, 13, 93, 36, 167, 14, 8, 141, 100, 1237 135, 28, 60, 113, 226, 160, 155, 66, 2, 101, 200, 253, 110, 45, 1238 199, 49, 230, 198, 76, 153, 148, 95, 187, 149, 159, 184, 142, 75, 1239 94, 11, 117, 188, 211, 150, 174, 218, 132, 182, 162, 133, 220, 38, 1240 67, 4, 77, 111, 0, 136, 144, 102, 7, 179, 222, 50, 61, 161, 1241 80, 55, 16, 202, 63, 119, 31, 131, 163, 108, 158, 206, 58, 219, 1242 231, 9, 92, 208, 239, 48, 189, 140, 147, 107, 19, 240, 192, 227, 1243 214, 171, 201, 196, 213, 52, 112, 194, 24, 64, 134, 35, 59, 118, 1244 81, 204, 89, 26, 51, 127, 128, 137, 90, 168, 130, 115, 62, 123, 1245 185, 191, 248, 70, 39, 47, 21, 53, 164, 254, 193, 209, 224, 180, 1246 165, 104, 235, 228, 124, 40, 243, 241, 46, 3, 91, 106, 43, 216, 1247 6, 83, 65, 74, 86, 212, 29, 120, 88, 215, 37, 72, 99, 41, 1248 181, 176, 18, 252, 197, 233, 97, 175, 151, 242, 54, 183, 73, 71, 1249 69, 96, 217, 146, 245, 244, 251, 10, 34, 129, 203, 249, 246, 87, 1250 5, 250, 85, 229, 221, 145, 172, 126, 82, 20, 170, 15, 139, 210, 1251 186, 1, 157, 207, 247, 103, 122, 125, 152, 225, 234, 12, 44, 255, 1252 236, 154, 177, 32, 156, 84, 178, 116, 105, 68, 173, 114, 179, 158, 1253 250, 26, 198, 134, 118, 171, 3, 143, 7, 29, 46, 102, 99, 237, 1254 52, 172, 154, 236, 19, 239, 155, 0, 152, 188, 58, 10, 249, 68, 1255 211, 61, 186, 57, 36, 49, 81, 254, 135, 21, 24, 231, 167, 210, 1256 253, 170, 51, 90, 100, 190, 235, 203, 225, 230, 233, 60, 56, 130, 1257 124, 109, 83, 72, 163, 8, 98, 209, 144, 27, 115, 191, 89, 59, 1258 71, 242, 241, 43, 128, 217, 122, 204, 117, 189, 133, 107, 164, 112, 1259 35, 87, 234, 174, 69, 84, 5, 47, 28, 148, 252, 192, 224, 1, 1260 227, 147, 31, 88, 132, 214, 113, 197, 76, 37, 106, 33, 80, 104, 1261 208, 229, 53, 32, 91, 168, 150, 153, 194, 137, 101, 103, 205, 181, 1262 139, 96, 184, 251, 222, 97, 166, 255, 240, 92, 245, 86, 63, 221, 1263 39, 48, 131, 248, 6, 156, 173, 75, 196, 140, 2, 34, 121, 67, 1264 206, 94, 85, 9, 18, 157, 232, 185, 145, 93, 176, 126, 243, 64, 1265 216, 207, 40, 141, 11, 16, 78, 175, 219, 41, 202, 45, 13, 244, 1266 146, 125, 160, 246, 162, 165, 55, 17, 50, 182, 110, 12, 180, 23, 1267 187, 212, 22, 228, 178, 213, 38, 183, 226, 73, 120, 111, 199, 142, 1268 200, 70, 123, 116, 114, 223, 66, 82, 138, 30, 65, 195, 119, 105, 1269 15, 108, 136, 247, 159, 14, 74, 44, 20, 4, 95, 42, 77, 238, 1270 79, 161, 193, 220, 129, 127, 62, 149, 177, 169, 215, 201, 54, 25, 1271 218, 151, 171, 24, 156, 124, 48, 112, 0, 115, 219, 175, 247, 145, 1272 8, 144, 123, 65, 50, 122, 252, 58, 75, 79, 3, 198, 238, 234, 1273 92, 12, 149, 162, 139, 113, 220, 85, 194, 29, 253, 184, 119, 89, 1274 110, 23, 87, 132, 177, 108, 43, 60, 130, 248, 51, 83, 237, 16, 1275 37, 106, 78, 84, 42, 193, 11, 190, 59, 254, 116, 125, 182, 131, 1276 235, 255, 53, 99, 183, 100, 93, 243, 70, 181, 28, 90, 249, 241, 1277 105, 179, 66, 214, 187, 39, 44, 136, 169, 18, 233, 15, 138, 210, 1278 170, 6, 230, 205, 251, 203, 159, 46, 98, 160, 221, 41, 218, 201, 1279 172, 173, 246, 158, 118, 9, 57, 166, 67, 94, 224, 245, 20, 133, 1280 137, 151, 97, 185, 147, 102, 206, 163, 216, 109, 80, 191, 86, 74, 1281 121, 32, 127, 209, 215, 22, 91, 142, 240, 10, 129, 211, 34, 154, 1282 212, 180, 21, 155, 104, 88, 25, 5, 68, 17, 30, 213, 189, 81, 1283 150, 56, 107, 134, 174, 111, 222, 161, 19, 54, 232, 143, 195, 229, 1284 76, 1, 33, 114, 196, 49, 38, 128, 52, 73, 71, 61, 36, 192, 1285 200, 26, 178, 103, 227, 146, 96, 2, 164, 153, 208, 199, 244, 197, 1286 14, 207, 55, 168, 62, 176, 35, 242, 228, 223, 148, 4, 140, 152, 1287 141, 27, 7, 165, 47, 186, 126, 135, 31, 40, 204, 250, 82, 226, 1288 95, 236, 225, 72, 239, 45, 13, 202, 77, 63, 120, 217, 157, 101, 1289 167, 69, 64, 117, 188, 231, 131, 120, 156, 124, 80, 144, 160, 139, 1290 51, 39, 175, 89, 232, 176, 211, 137, 162, 42, 252, 234, 35, 199, 1291 155, 86, 190, 26, 92, 140, 253, 146, 99, 57, 220, 189, 178, 197, 1292 165, 24, 47, 97, 62, 207, 15, 196, 121, 236, 3, 60, 114, 88, 1293 75, 107, 21, 48, 13, 154, 30, 20, 90, 9, 227, 14, 147, 78, 1294 52, 37, 198, 27, 195, 247, 157, 251, 111, 164, 5, 11, 214, 29, 1295 28, 10, 1, 185, 241, 203, 50, 230, 19, 95, 172, 104, 49, 130, 1296 113, 135, 186, 66, 218, 150, 118, 245, 83, 163, 151, 254, 82, 64, 1297 133, 177, 138, 81, 44, 213, 6, 238, 134, 145, 65, 54, 219, 174, 1298 128, 93, 212, 109, 17, 79, 169, 193, 171, 246, 158, 59, 56, 149, 1299 112, 183, 102, 122, 129, 192, 119, 153, 143, 38, 179, 94, 16, 58, 1300 201, 235, 18, 74, 148, 116, 125, 243, 72, 184, 33, 237, 132, 217, 1301 110, 61, 101, 25, 166, 152, 67, 22, 126, 231, 46, 233, 43, 70, 1302 200, 7, 91, 205, 204, 73, 105, 226, 4, 249, 182, 32, 244, 209, 1303 127, 229, 100, 96, 168, 202, 34, 159, 123, 2, 0, 242, 228, 161, 1304 240, 255, 180, 173, 222, 71, 239, 136, 142, 208, 187, 98, 36, 215, 1305 84, 68, 12, 248, 181, 115, 63, 141, 167, 106, 206, 191, 23, 8, 1306 76, 170, 194, 210, 87, 108, 41, 40, 103, 85, 53, 250, 117, 55, 1307 216, 225, 69, 77, 223, 45, 224, 221, 188, 31, 86, 211, 151, 119, 1308 107, 171, 59, 158, 134, 154, 98, 28, 195, 203, 38, 204, 13, 213, 1309 247, 149, 246, 58, 46, 225, 137, 69, 87, 7, 96, 125, 54, 252, 1310 215, 32, 157, 104, 72, 115, 226, 100, 9, 130, 194, 255, 60, 103, 1311 214, 55, 93, 179, 94, 126, 56, 75, 240, 197, 233, 207, 133, 76, 1312 182, 89, 230, 153, 239, 200, 209, 174, 150, 234, 0, 142, 34, 223, 1313 168, 30, 97, 128, 23, 181, 4, 124, 116, 222, 29, 241, 102, 146, 1314 39, 67, 180, 237, 244, 250, 229, 173, 5, 33, 1, 24, 166, 118, 1315 138, 201, 61, 219, 40, 52, 53, 212, 167, 248, 17, 57, 145, 20, 1316 68, 193, 110, 249, 27, 192, 143, 80, 148, 2, 236, 196, 190, 129, 1317 105, 206, 147, 184, 139, 170, 113, 165, 132, 91, 106, 92, 66, 49, 1318 6, 41, 43, 101, 12, 254, 253, 245, 79, 47, 224, 70, 35, 19, 1319 36, 208, 191, 156, 185, 160, 8, 220, 177, 243, 22, 161, 73, 90, 1320 121, 44, 62, 81, 163, 122, 238, 176, 71, 140, 172, 77, 63, 188, 1321 65, 187, 175, 84, 178, 136, 159, 251, 131, 117, 141, 210, 14, 109, 1322 155, 221, 31, 164, 11, 50, 111, 144, 169, 186, 162, 99, 217, 235, 1323 78, 205, 95, 202, 15, 127, 135, 83, 216, 198, 114, 112, 26, 21, 1324 25, 242, 10, 227, 199, 85, 45, 189, 74, 231, 108, 3, 218, 120, 1325 88, 37, 152, 42, 51, 228, 232, 48, 18, 16, 123, 64, 183, 82, 1326 165, 154, 190, 158, 114, 178, 194, 173, 85, 73, 209, 123, 10, 210, 1327 245, 171, 196, 76, 30, 12, 69, 233, 189, 120, 224, 60, 126, 174, 1328 31, 180, 133, 91, 254, 223, 212, 231, 199, 58, 81, 131, 96, 241, 1329 49, 230, 155, 14, 37, 94, 148, 122, 109, 141, 55, 82, 47, 188, 1330 64, 54, 124, 43, 5, 48, 181, 112, 86, 71, 232, 61, 229, 25, 1331 191, 29, 145, 198, 39, 45, 248, 63, 62, 44, 35, 219, 19, 237, 1332 84, 8, 53, 129, 206, 138, 83, 164, 147, 169, 220, 100, 252, 184, 1333 152, 23, 117, 197, 185, 32, 116, 98, 167, 211, 172, 115, 78, 247, 1334 40, 16, 168, 179, 99, 88, 253, 208, 162, 127, 246, 143, 51, 113, 1335 203, 227, 205, 24, 192, 93, 90, 183, 146, 217, 136, 156, 163, 226, 1336 153, 187, 177, 72, 213, 128, 50, 92, 235, 13, 52, 108, 182, 150, 1337 159, 21, 106, 218, 67, 15, 166, 251, 144, 95, 135, 59, 200, 186, 1338 101, 56, 160, 9, 80, 11, 77, 104, 234, 41, 125, 239, 238, 107, 1339 139, 4, 38, 27, 216, 66, 22, 243, 161, 7, 134, 130, 202, 236, 1340 68, 193, 157, 36, 34, 20, 6, 195, 18, 33, 214, 207, 0, 105, 1341 17, 170, 176, 242, 221, 132, 70, 249, 118, 102, 46, 26, 215, 149, 1342 97, 175, 201, 140, 240, 225, 57, 42, 110, 204, 228, 244, 121, 142, 1343 75, 74, 137, 119, 87, 28, 151, 89, 250, 3, 103, 111, 1, 79, 1344 2, 255, 222, 65, 20, 169, 77, 45, 129, 193, 209, 28, 196, 56, 1345 192, 170, 25, 225, 100, 218, 19, 155, 173, 91, 180, 216, 44, 71, 1346 175, 139, 13, 61, 206, 3, 244, 138, 141, 142, 35, 150, 118, 73, 1347 64, 178, 47, 224, 32, 117, 202, 157, 148, 237, 227, 137, 220, 252, 1348 230, 97, 222, 11, 15, 197, 203, 90, 116, 255, 36, 63, 229, 246, 1349 183, 172, 84, 8, 110, 140, 128, 85, 214, 156, 199, 238, 205, 123, 1350 82, 10, 66, 92, 163, 215, 164, 112, 93, 153, 130, 243, 194, 152, 1351 43, 179, 75, 135, 103, 198, 228, 52, 168, 239, 195, 113, 86, 2, 1352 251, 162, 221, 166, 247, 223, 119, 226, 146, 39, 108, 159, 177, 46, 1353 133, 62, 98, 96, 250, 18, 60, 231, 143, 204, 105, 102, 161, 200, 1354 87, 235, 210, 241, 136, 234, 160, 23, 68, 79, 65, 171, 26, 124, 1355 131, 187, 69, 37, 78, 132, 121, 233, 114, 190, 53, 42, 95, 14, 1356 54, 106, 151, 201, 212, 7, 111, 248, 31, 58, 188, 55, 249, 24, 1357 236, 158, 125, 154, 186, 83, 181, 74, 167, 81, 165, 34, 144, 182, 1358 21, 145, 217, 59, 147, 176, 12, 115, 49, 99, 149, 242, 33, 16, 1359 101, 126, 207, 88, 0, 185, 127, 1, 76, 211, 213, 232, 5, 245, 1360 189, 41, 134, 4, 80, 94, 184, 219, 191, 208, 40, 57, 253, 27, 1361 51, 67, 104, 29, 122, 89, 120, 38, 6, 107, 70, 72, 9, 50, 1362 22, 30, 240, 254, 17, 174, 109, 48, 1363); 1364 1365%veggie_table = ( 1366 tomato => [ 1367 168, 144, 40, 133, 43, 117, 252, 212, 147, 148, 94, 211, 113, 84, 1368 185, 178, 201, 114, 88, 245, 71, 5, 171, 53, 135, 163, 165, 96, 1369 118, 210, 125, 59, 173, 204, 219, 246, 105, 169, 115, 214, 131, 110, 1370 34, 140, 0, 66, 167, 194, 166, 227, 142, 7, 223, 254, 75, 159, 1371 41, 78, 130, 99, 209, 9, 180, 63, 67, 205, 104, 164, 70, 55, 1372 153, 137, 208, 42, 4, 82, 149, 61, 16, 31, 25, 73, 215, 126, 1373 207, 17, 8, 150, 224, 183, 199, 3, 18, 11, 120, 36, 30, 10, 1374 20, 24, 49, 106, 161, 37, 217, 83, 200, 57, 181, 249, 128, 162, 1375 62, 175, 48, 127, 233, 50, 151, 111, 87, 44, 14, 187, 172, 229, 1376 69, 56, 85, 232, 247, 170, 155, 33, 81, 1, 154, 251, 191, 184, 1377 58, 77, 51, 39, 19, 203, 60, 236, 23, 29, 255, 74, 116, 157, 1378 12, 202, 64, 101, 193, 145, 242, 38, 89, 225, 152, 76, 65, 143, 1379 15, 237, 47, 98, 79, 121, 2, 156, 213, 238, 28, 240, 198, 93, 1380 26, 206, 253, 241, 221, 160, 32, 46, 239, 248, 216, 177, 189, 123, 1381 119, 134, 220, 243, 192, 54, 139, 186, 68, 91, 190, 146, 250, 100, 1382 174, 138, 231, 218, 92, 112, 235, 197, 97, 234, 136, 226, 6, 108, 1383 107, 21, 103, 176, 179, 35, 228, 195, 22, 109, 27, 188, 52, 230, 1384 122, 95, 72, 132, 222, 182, 158, 80, 102, 86, 244, 196, 13, 45, 1385 141, 90, 124, 129, 1386 ], 1387 carrot => [ 1388 207, 110, 211, 170, 253, 115, 1, 88, 142, 252, 80, 24, 113, 25, 1389 50, 238, 244, 78, 166, 151, 210, 206, 177, 127, 150, 198, 216, 148, 1390 137, 81, 220, 232, 191, 75, 90, 235, 102, 186, 212, 122, 70, 248, 1391 96, 241, 42, 183, 169, 143, 41, 217, 6, 134, 161, 132, 84, 199, 1392 171, 230, 116, 93, 77, 99, 229, 62, 233, 164, 46, 94, 213, 52, 1393 129, 35, 152, 100, 228, 33, 63, 218, 9, 15, 136, 173, 49, 181, 1394 121, 112, 43, 146, 26, 71, 67, 97, 56, 225, 221, 240, 195, 89, 1395 201, 141, 250, 107, 231, 120, 27, 74, 4, 239, 13, 160, 126, 82, 1396 234, 36, 209, 123, 249, 7, 45, 247, 53, 202, 51, 87, 105, 158, 1397 255, 22, 47, 59, 193, 243, 60, 34, 196, 182, 106, 69, 203, 138, 1398 153, 145, 215, 73, 162, 208, 251, 222, 130, 223, 224, 165, 95, 131, 1399 135, 156, 174, 157, 189, 61, 55, 254, 32, 28, 194, 30, 17, 139, 1400 109, 37, 16, 65, 192, 178, 39, 2, 58, 40, 204, 101, 175, 111, 1401 3, 219, 167, 237, 119, 124, 23, 172, 72, 57, 188, 5, 104, 10, 1402 19, 133, 246, 44, 21, 31, 149, 8, 180, 76, 187, 200, 48, 245, 1403 185, 0, 242, 159, 179, 205, 20, 226, 18, 155, 227, 118, 168, 197, 1404 86, 214, 103, 190, 128, 140, 147, 108, 184, 236, 144, 125, 54, 64, 1405 14, 66, 11, 83, 85, 38, 163, 154, 91, 114, 29, 98, 12, 79, 1406 92, 117, 68, 176, 1407 ], 1408 potato => [ 1409 207, 150, 249, 92, 224, 35, 18, 80, 131, 86, 163, 23, 149, 217, 1410 42, 110, 173, 177, 143, 214, 154, 83, 45, 8, 219, 232, 128, 209, 1411 30, 28, 221, 245, 192, 85, 79, 168, 213, 63, 97, 51, 243, 114, 1412 171, 255, 194, 230, 153, 200, 20, 37, 169, 111, 74, 117, 135, 246, 1413 98, 147, 127, 29, 157, 183, 189, 184, 62, 215, 115, 138, 34, 82, 1414 238, 90, 130, 237, 195, 102, 166, 71, 109, 68, 226, 47, 229, 233, 1415 14, 1, 65, 96, 99, 43, 24, 212, 146, 118, 156, 197, 59, 190, 1416 12, 227, 39, 126, 91, 134, 142, 58, 236, 223, 179, 199, 54, 50, 1417 60, 176, 133, 242, 164, 125, 105, 208, 21, 172, 103, 228, 57, 75, 1418 95, 252, 89, 141, 113, 234, 175, 148, 106, 101, 48, 76, 36, 132, 1419 38, 187, 139, 140, 202, 162, 193, 26, 196, 205, 165, 7, 136, 185, 1420 56, 121, 55, 52, 94, 61, 152, 174, 203, 53, 22, 248, 123, 4, 1421 9, 129, 120, 27, 87, 44, 137, 201, 222, 15, 198, 72, 244, 220, 1422 124, 6, 3, 254, 112, 235, 218, 64, 151, 225, 160, 81, 5, 10, 1423 181, 25, 250, 122, 247, 32, 69, 66, 67, 78, 88, 0, 231, 167, 1424 239, 144, 182, 211, 70, 49, 180, 178, 159, 108, 241, 84, 11, 16, 1425 161, 41, 158, 216, 145, 253, 251, 33, 116, 77, 104, 13, 119, 19, 1426 191, 204, 170, 206, 31, 107, 93, 240, 186, 210, 17, 73, 46, 155, 1427 100, 2, 40, 188, 1428 ], 1429 radish => [ 1430 68, 94, 16, 181, 225, 234, 166, 157, 57, 78, 106, 62, 158, 52, 1431 201, 211, 10, 88, 87, 193, 191, 194, 38, 243, 169, 253, 204, 95, 1432 152, 31, 76, 241, 147, 131, 221, 29, 50, 163, 86, 232, 216, 127, 1433 197, 233, 214, 173, 164, 224, 145, 123, 167, 92, 49, 215, 160, 161, 1434 44, 80, 3, 17, 61, 120, 144, 110, 151, 178, 6, 89, 250, 71, 1435 99, 226, 190, 19, 183, 26, 236, 200, 125, 230, 112, 34, 2, 235, 1436 205, 247, 65, 217, 22, 149, 227, 67, 46, 82, 208, 240, 5, 195, 1437 251, 90, 138, 121, 101, 117, 115, 32, 207, 129, 206, 107, 244, 126, 1438 220, 218, 45, 185, 242, 134, 43, 72, 189, 177, 136, 20, 79, 150, 1439 7, 24, 30, 27, 0, 202, 25, 60, 14, 248, 159, 70, 182, 223, 1440 102, 114, 245, 11, 12, 73, 93, 40, 51, 156, 56, 55, 142, 8, 1441 21, 48, 198, 254, 135, 13, 84, 41, 239, 176, 238, 85, 255, 168, 1442 128, 228, 180, 59, 213, 219, 222, 53, 47, 231, 209, 122, 137, 187, 1443 15, 83, 109, 39, 174, 192, 141, 58, 9, 113, 28, 116, 1, 103, 1444 75, 210, 153, 165, 172, 140, 111, 130, 199, 196, 42, 118, 74, 91, 1445 37, 23, 146, 252, 64, 203, 108, 98, 96, 63, 179, 69, 246, 4, 1446 188, 81, 104, 162, 124, 54, 171, 237, 132, 133, 249, 148, 139, 18, 1447 77, 170, 154, 100, 119, 186, 33, 155, 212, 66, 175, 97, 105, 35, 1448 36, 184, 143, 229, 1449 ], 1450 garlic => [ 1451 64, 125, 53, 199, 27, 95, 196, 166, 146, 139, 238, 67, 98, 239, 1452 158, 85, 255, 180, 66, 204, 150, 112, 163, 236, 216, 226, 74, 90, 1453 73, 47, 171, 54, 41, 108, 22, 75, 51, 227, 229, 44, 93, 11, 1454 164, 113, 96, 38, 59, 220, 176, 23, 88, 182, 173, 230, 133, 21, 1455 42, 121, 107, 179, 198, 8, 170, 242, 246, 50, 245, 135, 29, 68, 1456 80, 76, 48, 91, 141, 177, 203, 45, 190, 186, 213, 62, 195, 30, 1457 222, 52, 253, 55, 148, 254, 243, 5, 202, 123, 117, 58, 153, 120, 1458 56, 234, 144, 14, 24, 140, 126, 178, 212, 20, 157, 210, 69, 110, 1459 127, 1, 240, 183, 237, 3, 197, 191, 15, 241, 231, 78, 156, 102, 1460 10, 128, 167, 206, 218, 60, 28, 181, 247, 37, 81, 71, 134, 49, 1461 248, 0, 97, 94, 217, 89, 215, 228, 131, 4, 205, 132, 40, 36, 1462 63, 116, 145, 159, 82, 46, 143, 18, 165, 100, 223, 147, 65, 192, 1463 9, 39, 225, 168, 32, 154, 233, 136, 194, 169, 7, 235, 12, 103, 1464 209, 87, 25, 119, 26, 31, 252, 172, 201, 188, 57, 249, 130, 250, 1465 17, 79, 70, 6, 35, 211, 61, 72, 142, 214, 122, 232, 101, 84, 1466 16, 105, 137, 155, 193, 224, 208, 86, 138, 118, 152, 161, 151, 124, 1467 104, 184, 187, 34, 160, 207, 13, 175, 83, 185, 77, 19, 219, 244, 1468 109, 92, 251, 43, 221, 149, 33, 162, 200, 2, 174, 115, 111, 106, 1469 129, 189, 99, 114, 1470 ], 1471); 1472 1473=head1 NAME 1474 1475Crypt::AppleTwoFish -- two Apple iTMS/iTunes key descrambling algorithms 1476 1477=head1 DESCRIPTION 1478 1479The first algorithm appears to have only cursory resemblance to Bruce Schneier's 1480blowfish and twofish algorithms in that it too has a table-based decoder. 1481 1482The second algorithm is more standard encryption using S-box type permutations 1483and lookup tables, and might have started out something like Twofish or Blowfish. 1484 1485=head1 SYNOPSIS 1486 1487 for iTMS usages: 1488 1489 use Crypt::AppleTwoFish; 1490 1491 my $scrambled_key = '=sixteen uchars='; 1492 1493 my $apple_twofish = new Crypt::AppleTwoFish(key => $scrambled_key); 1494 1495 my $descrambled_key = $apple_twofish->decrypted_for_iTMS; 1496 1497 my $descrambled_another_way = $apple_twofish->decrypted_for_DRMS; 1498 1499 1500 ..and for iTunes 7 compatible usages: 1501 1502 Functions cloned from lower level compiled code which was likely intended 1503 to be difficult to reconstruct cannot easily be given sensible names. Ada 1504 Pro is good, but dull. We chose to be amused during the tedium by coming 1505 up with function names from a vegetable farm. 1506 1507 For actual usage, see also: 1508 1509L<iTunes::Sid>. 1510 1511=head1 METHODS 1512 1513=over 4 1514 1515=item B<new> 1516 1517Call with the key as a scalar argument. When passed (LWP simulating iTunes) over iTMS, 1518encrypted M4P keys for your purchased music are currently 16 unsigned chars in length. 1519 1520=item B<decrypted_for_iTMS> 1521 1522Returns the unscrambled key for use with the Apple Music Store. 1523 1524=item B<decrypted_for_DRMS> 1525 1526Returns the unscrambled key for use with iTunes/iPod DRM. 1527 1528=item B<key> 1529 1530 Get/set initial key. 1531 1532=item B<int_table> 1533 1534 Get/set veggie integer table. 1535 1536=item B<byte_table> 1537 1538 Get/set veggie byte table. 1539 1540=item B<veggie> 1541 1542 Get/set veggie. 1543 1544=item B<hwID> 1545 1546 Get/set hardware ID (MAC address or other machine based data). 6 bytes. 1547 1548=item B<keyID> 1549 1550 Get/set key ID. 4 bytes. 1551 1552=item B<userID> 1553 1554 Get/set user ID. 4 bytes. 1555 1556=item B<plant_veggies> 1557 1558 Key munging, spring season 1559 1560=item B<harvest_veggies> 1561 1562 Key munging, harvest season 1563 1564=back 1565 1566=head1 AUTHOR 1567 1568 iTMS decrambler adapted from FairKeys 0.5, by Jon Lech Johansen, and from 1569 the alterate scramble table found by FutureProof. 1570 1571 Veggie Tales algorithm courtesy of Ada and other anonymous pros :-). 1572 1573=head1 SUPPORT 1574 1575Questions, feature requests and bug reports should go to 1576<wherrera@skylightview.com>. 1577 1578=head1 COPYRIGHT 1579 1580=over 4 1581 1582 Copyright (c) 2005, 2008 William Herrera. All rights reserved. 1583 1584 Licensing Terms 1585 1586 a) The terms of Perl itself, plus the following: 1587 1588 b) UNDER NO CIRCUMSTANCES CAN THIS CODE BE USED FOR CIRCUMVENTION OF ANY 1589 TECHNOLOGICAL MEASURE WHICH EFFECTIVELY CONTROLS A PROTECTED MEDIA WORK 1590 UNDER THE DCMA (USA, 1998) OR EU COPYRIGHT DIRECTIVE (EUCD, ARTICLE 6, 1591 OF 2001), UNDER ANY OPERATING SYSTEM PLATFORM SUPPORTED BY APPLE COMPUTER 1592 CORPORATION FOR ITS ITUNES OR IPOD PLAYER SOFTWARE IN ANY APPLE CORPORATION 1593 DISTRIBUTED BINARY FORMAT OF ITUNES FOR THE PLATFORM UNDER WHICH THAT MEDIA 1594 IS TO BE PLAYED. AS OF 2008, PROHIBITED PLATFORMS INCLUDE THE IPOD, IPHONE, 1595 APPLE OS X, AND MICROSOFT WINDOWS, BUT NOT LINUX, BSD, OR SOLARIS. UNDER NO 1596 CIRCUMSTANCES CAN THE AUTHOR(S) OF THIS CODE BE HELD LIABLE FOR ANY 1597 INFRINGEMENT INVOLVING THE PROHIBITED PLATFORMS ABOVE. 1598 1599 c) Use, storage, or distribution of this code implies that you accept that 1600 its intended purpose is legal and legitimate under any applicable US or EU 1601 law, as above, and agree that any and all risk as to the quality, 1602 performance, and legality of this code lies with you. 1603 1604=back 1605 1606=cut 1607 1608return 1; 1609