Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support zstd-compressed ELF sections. #626

Merged
merged 5 commits into from
Sep 15, 2024
Merged

Conversation

khuey
Copy link
Contributor

@khuey khuey commented May 25, 2024

zstd has been introduced as an alternative to zlib for the compression of debug sections.1 Toolchain support is widely present at this time but lack of support in backtrace is a severe limitation on using this feature in Rust programs.

This uses a Rust reimplementation of zstd (the ruzstd crate). This has the benefit of simplifying the build process, but this crate is less used and admittedly slower than the zstd crate that binds to the C libzstd.

Footnotes

  1. https://maskray.me/blog/2022-09-09-zstd-compressed-debug-sections

@workingjubilee
Copy link
Member

workingjubilee commented May 27, 2024

This itself will also wait for a bit due to dependency chains. I would rather not have two syns in my dependency tree, so I will be waiting for a version with KillingSpark/zstd-rs#60

@bjorn3
Copy link
Member

bjorn3 commented May 27, 2024

It also needs rustc-dep-of-std support, right?

@workingjubilee
Copy link
Member

hmm probably.

Comment on lines 100 to 99
- run: cargo test
if: contains(matrix.os, 'ubuntu-24.04')
env:
RUSTFLAGS: "-C link-arg=-Wl,--compress-debug-sections=zstd"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

see #627

Comment on lines +25 to +30
- os: ubuntu-24.04
rust: stable
- os: ubuntu-24.04
rust: beta
- os: ubuntu-24.04
rust: nightly
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hmm, why are we bumping this? I kinda think we should just bump ahead to a recent ubuntu if we gotta?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

--compress-debug-sections=zstd is only available in the binutils/etc that ships with 24.04, not with 20.04 or 22.04.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

And no chance of installing that stuff on ubuntu 20 without exploding the world, huh?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would be scared to try :)

If rust-lld propagates out to the stable branches I think it'll just work there though.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh cool. Can you give that a whirl against our CI for nightly + ubuntu 20.04, then?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks like that's rust-lang/rust#120953

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

huh.

Copy link
Member

@workingjubilee workingjubilee May 28, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

...wait, can we just install lld and test with that or something? (not sure if that actually works out with all the versions involved...)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

rust-lang/rust#125642 is also good lmao.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

According to rust-lang/rust#124129 we can just use -Zlinker-features=-lld but I feel like rust-lld should be fixed.

Comment on lines 57 to 60
# Starting with Ubuntu 22.04 libc6-dbg is needed.
- name: Install libc debug info
run: sudo apt-get install -y libc6-dbg
shell: bash
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

which would make this unconditional.

Comment on lines +184 to +240
match header.ch_type(self.endian) {
ELFCOMPRESS_ZLIB => {
let size = usize::try_from(header.ch_size(self.endian)).ok()?;
let buf = stash.allocate(size);
decompress_zlib(data.0, buf)?;
return Some(buf);
}
ELFCOMPRESS_ZSTD => {
let size = usize::try_from(header.ch_size(self.endian)).ok()?;
let buf = stash.allocate(size);
decompress_zstd(data.0, buf)?;
return Some(buf);
}
_ => return None, // Unknown compression type.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, the actual implementation seems basically fine.

@workingjubilee
Copy link
Member

It's also ever-so-slightly nicer to be able to submit PRs to a Rust crate if I want their code to operate differently somehow (run faster, jump higher, whatever) rather than have to also dive into a tangled pile of C, y'know?

@khuey
Copy link
Contributor Author

khuey commented May 28, 2024

It's also ever-so-slightly nicer to be able to submit PRs to a Rust crate if I want their code to operate differently somehow (run faster, jump higher, whatever) rather than have to also dive into a tangled pile of C, y'know?

Personally I'd take the dependency that's professionally maintained and used by everyone else on the planet but it's not my crate.

@workingjubilee
Copy link
Member

Alas, no one is really paying for professional maintenance of backtrace-rs, unfortunately.

@khuey
Copy link
Contributor Author

khuey commented Aug 13, 2024

Bleh, the new ruzstd also took an MSRV of 1.73.0. I don't suppose backtrace-rs could match that?

@khuey
Copy link
Contributor Author

khuey commented Aug 14, 2024

Bleh, the new ruzstd also took an MSRV of 1.73.0. I don't suppose backtrace-rs could match that?

@workingjubilee?

@workingjubilee
Copy link
Member

Yes, we can raise MSRV as high as 1.78 if we need to.

@khuey
Copy link
Contributor Author

khuey commented Aug 19, 2024

So it seems like in order for CI in this repository to pass rustc's library/std/Cargo.toml needs to be updated too ...

@workingjubilee
Copy link
Member

huh.

@khuey
Copy link
Contributor Author

khuey commented Aug 23, 2024

library/std does deeply sketchy things to build library/backtrace https://github.com/rust-lang/rust/blob/a60a9e567a7319b33619f6551dc29522c6f58687/library/std/src/lib.rs#L668. library/backtrace/Cargo.toml doesn't actually control building of backtrace-rs when it's built as part of rustc as a result.

@workingjubilee
Copy link
Member

Right. Hm.

@workingjubilee
Copy link
Member

I wonder if that's actually a requirement anymore...

@workingjubilee
Copy link
Member

Answer is yes.

@workingjubilee
Copy link
Member

@khuey Resolve the merge conflicts, please, and I will do what I must.

I do not want to publish versions of this crate that do not pass CI, and I cannot allow rust-lang/rust to break its CI, obviously, but I have the power to do what must be done to make this crate compile in rust-lang/rust and will make it happen.

@khuey
Copy link
Contributor Author

khuey commented Aug 24, 2024

Alright, done.

@workingjubilee
Copy link
Member

I begin to absolutely despise how std defines io::Read.

@workingjubilee
Copy link
Member

Right, so, the current problem, and this was going to be an issue with both the C-based zstd crate, and the ruzstd crate, is that the crate in question needs to participate in the horrible abomination that backtrace does if it's going to use types from std, including, say, std::io::Read.

This is a pretty invasive change and imo pretty unreasonable to ask anyone.

@philipc
Copy link
Contributor

philipc commented Aug 25, 2024

Is the problem that ruzstd still needs rustc-dep-of-std support? For example, gimli needed gimli-rs/gimli#503

@workingjubilee
Copy link
Member

workingjubilee commented Sep 13, 2024

@KillingSpark It seems that your decompressor either was incomplete or has become incomplete sometime in the last few zstd releases. That or we are somehow holding it wrong, which seems doubtful.

@KillingSpark
Copy link

I'll have a look

@KillingSpark
Copy link

Update: Running RUSTFLAGS="-C link-arg=-Wl,--compress-debug-sections=zstd" cargo test at home does not produce that error but completes the tests successfully.

I already did some light fiddling around to see if anything else is fishy. The zstd codepath is taken and the decoder produces the correct amount of bytes.

Running that same line against the master branch does produce the same error as in the CI though. Can you confirm these findings? Especially that the tests do run fine locally? I need to do something else for a few hours but I'll investigate this further later today

@philipc
Copy link
Contributor

philipc commented Sep 13, 2024

For stable rust, everything works as expected. The test on master fails because it lacks the zstd support added in this PR, but gimli's dwarfdump can read the test executable, and I've verified the ELF sections are zstd compressed.

For nightly rust, tests fail and unpatched gimli dwarfdump fails.

@KillingSpark
Copy link

Hi, so I'm pretty sure this is a bug in how the elf metadata is encoded.

The original and my library agree on what the decoded bytes should look like. The elf header says it should amount to 107961 bytes but both implementations decode only 107747. The test below fails on the last line saying:

assertion left == right failed: Was: 107747 expected: 107747, elf said: 107961

#[test]
fn test_stuff() {
    let mut src = [...]; // Insert bytes here, I have put them into the details below so this stays readable
    let expected = zstd::stream::decode_all(src).unwrap();
    let mut decoder = crate::FrameDecoder::new();
    decoder.init(&mut src).unwrap();
    decoder.decode_blocks(&mut src, crate::BlockDecodingStrategy::All);
    let output = decoder.collect().unwrap();
    assert!(decoder.is_finished());
    assert_eq!(output, expected);
    assert_eq!(107961, output.len(), "Was: {} expected: {}, elf said: {}", output.len(), expected.len(), 107961);
}

Is it possible that there is a regression in this part of rustc?

let mut src: &[u8] = &[ 40, 181, 47, 253, 160, 227, 164, 1, 0, 13, 133, 2, 58, 52, 201, 51, 51, 208, 70, 102, 118, 198, 33, 87, 51, 200, 234, 96, 68, 174, 6, 179, 172, 56, 46, 93, 66, 136, 192, 37, 37, 100, 102, 89, 186, 185, 187, 174, 207, 110, 50, 18, 1, 12, 100, 102, 178, 251, 46, 47, 98, 5, 140, 200, 1, 133, 76, 1, 59, 3, 56, 3, 9, 3, 135, 114, 115, 204, 252, 70, 21, 152, 29, 191, 198, 49, 217, 181, 157, 90, 54, 145, 68, 32, 15, 198, 66, 113, 204, 137, 145, 40, 196, 105, 225, 220, 120, 45, 148, 154, 54, 131, 185, 88, 218, 206, 74, 11, 47, 223, 89, 163, 156, 5, 241, 195, 113, 55, 142, 125, 211, 40, 49, 155, 72, 34, 119, 44, 48, 23, 75, 69, 190, 123, 236, 148, 180, 223, 224, 124, 251, 213, 185, 248, 29, 194, 115, 177, 84, 100, 23, 179, 75, 87, 103, 130, 50, 105, 191, 242, 226, 211, 40, 109, 103, 108, 225, 204, 160, 140, 64, 222, 50, 190, 184, 2, 243, 81, 39, 83, 137, 52, 18, 125, 236, 113, 199, 211, 248, 175, 88, 186, 227, 182, 31, 202, 71, 139, 109, 80, 126, 236, 233, 112, 54, 158, 38, 211, 194, 99, 46, 149, 75, 155, 18, 37, 145, 123, 142, 55, 24, 11, 5, 230, 68, 204, 98, 196, 67, 20, 2, 125, 60, 157, 111, 227, 101, 48, 23, 75, 69, 182, 157, 29, 215, 194, 185, 105, 148, 152, 181, 247, 38, 144, 39, 12, 140, 226, 247, 241, 124, 211, 222, 243, 52, 152, 139, 53, 74, 204, 38, 146, 136, 33, 15, 199, 255, 6, 99, 193, 154, 43, 21, 66, 10, 21, 79, 158, 75, 164, 143, 68, 237, 189, 208, 235, 233, 156, 227, 77, 107, 239, 154, 12, 230, 98, 121, 199, 125, 131, 143, 150, 180, 247, 34, 16, 63, 90, 40, 29, 239, 60, 153, 74, 164, 81, 11, 47, 98, 133, 14, 250, 104, 158, 14, 103, 227, 105, 50, 209, 210, 113, 155, 214, 58, 70, 32, 126, 56, 204, 88, 216, 156, 31, 9, 195, 163, 78, 166, 54, 126, 37, 147, 70, 22, 133, 64, 239, 156, 243, 205, 61, 205, 51, 152, 95, 218, 78, 217, 113, 91, 11, 165, 70, 137, 217, 68, 18, 129, 60, 28, 111, 48, 22, 10, 204, 137, 136, 129, 209, 64, 219, 21, 192, 42, 145, 70, 162, 16, 232, 138, 13, 74, 79, 219, 217, 225, 180, 80, 110, 90, 56, 61, 77, 6, 115, 177, 84, 186, 2, 106, 217, 113, 222, 180, 83, 98, 54, 177, 36, 98, 27, 254, 13, 198, 66, 129, 57, 145, 181, 19, 137, 31, 118, 188, 193, 88, 252, 127, 226, 35, 81, 8, 244, 105, 227, 231, 233, 216, 211, 180, 210, 149, 193, 248, 98, 105, 225, 172, 180, 157, 210, 215, 56, 5, 160, 132, 60, 28, 237, 227, 13, 198, 34, 70, 56, 222, 96, 180, 174, 200, 142, 219, 180, 137, 196, 145, 214, 241, 6, 163, 31, 232, 227, 233, 180, 157, 156, 141, 167, 201, 96, 46, 150, 22, 202, 138, 165, 59, 115, 222, 180, 83, 62, 81, 120, 154, 12, 230, 98, 105, 227, 39, 59, 110, 211, 40, 143, 143, 17, 210, 213, 25, 129, 60, 28, 140, 133, 66, 147, 193, 92, 44, 174, 92, 118, 109, 252, 184, 173, 149, 174, 107, 237, 189, 162, 40, 49, 155, 64, 30, 14, 233, 242, 253, 105, 59, 61, 29, 206, 198, 211, 100, 56, 76, 11, 229, 197, 22, 87, 218, 168, 146, 29, 247, 216, 194, 103, 147, 246, 158, 36, 2, 241, 195, 142, 55, 24, 11, 69, 228, 2, 49, 80, 81, 66, 30, 32, 70, 192, 132, 52, 64, 49, 191, 88, 62, 217, 113, 91, 219, 169, 181, 112, 82, 98, 54, 145, 68, 32, 15, 199, 27, 140, 133, 162, 149, 46, 108, 161, 48, 214, 218, 79, 252, 41, 212, 169, 61, 132, 199, 212, 94, 225, 193, 137, 17, 221, 148, 218, 24, 1, 33, 105, 212, 40, 10, 129, 252, 177, 199, 29, 115, 54, 92, 1, 181, 167, 201, 180, 247, 48, 191, 88, 42, 44, 201, 41, 16, 85, 16, 211, 177, 184, 111, 215, 90, 74, 108, 165, 43, 107, 59, 39, 101, 73, 90, 248, 8, 164, 133, 243, 209, 126, 229, 104, 161, 124, 219, 104, 191, 65, 201, 104, 37, 171, 143, 69, 27, 53, 56, 21, 152, 89, 254, 32, 170, 59, 23, 129, 11, 176, 182, 246, 90, 27, 85, 93, 1, 53, 165, 253, 0, 92, 128, 19, 0, 203, 224, 36, 170, 32, 38, 58, 107, 227, 55, 105, 177, 25, 35, 26, 145, 180, 17, 72, 139, 205, 200, 195, 81, 191, 133, 24, 136, 17, 77, 53, 206, 104, 99, 68, 189, 104, 165, 75, 209, 126, 245, 133, 8, 92, 32, 70, 64, 12, 244, 129, 181, 17, 184, 192, 87, 63, 196, 0, 140, 110, 189, 24, 97, 78, 129, 182, 255, 33, 32, 6, 234, 113, 27, 35, 186, 2, 234, 68, 123, 135, 55, 64, 12, 64, 16, 208, 29, 192, 50, 56, 129, 40, 3, 45, 196, 0, 100, 40, 160, 197, 50, 56, 129, 88, 56, 9, 196, 128, 35, 228, 3, 39, 48, 22, 213, 109, 248, 68, 252, 80, 241, 11, 113, 14, 167, 38, 83, 145, 29, 183, 217, 145, 95, 186, 140, 57, 113, 91, 118, 220, 166, 81, 176, 12, 230, 98, 217, 198, 79, 179, 227, 39, 121, 56, 26, 118, 35, 97, 213, 17, 82, 168, 147, 73, 243, 52, 25, 107, 45, 60, 197, 209, 155, 246, 6, 3, 155, 78, 220, 70, 253, 215, 22, 180, 213, 20, 180, 80, 75, 128, 224, 192, 11, 226, 225, 174, 22, 155, 14, 13, 102, 112, 171, 237, 76, 184, 17, 80, 167, 104, 42, 145, 70, 162, 86, 186, 14, 250, 248, 135, 183, 220, 147, 49, 155, 72, 32, 138, 152, 77, 36, 93, 40, 176, 59, 1, 143, 144, 66, 157, 76, 37, 210, 72, 116, 79, 243, 85, 69, 122, 179, 89, 145, 31, 106, 15, 174, 54, 126, 14, 13, 12, 11, 10, 173, 39, 204, 182, 115, 213, 194, 169, 66, 72, 161, 90, 40, 79, 38, 151, 224, 165, 203, 158, 14, 199, 27, 99, 46, 150, 202, 55, 205, 20, 199, 76, 226, 7, 227, 255, 57, 239, 252, 229, 102, 255, 127, 54, 145, 216, 199, 52, 45, 148, 153, 246, 23, 75, 69, 118, 148, 199, 204, 17, 67, 30, 14, 55, 48, 44, 40, 180, 18, 206, 98, 205, 175, 254, 148, 169, 68, 234, 20, 133, 90, 56, 65, 31, 79, 11, 101, 135, 179, 241, 142, 185, 200, 206, 154, 255, 75, 34, 118, 180, 134, 103, 120, 113, 111, 65, 161, 149, 192, 154, 55, 189, 212, 158, 52, 18, 133, 156, 241, 238, 193, 41, 91, 248, 78, 187, 165, 107, 241, 131, 62, 30, 111, 188, 54, 126, 154, 12, 230, 98, 169, 72, 141, 18, 179, 137, 37, 118, 216, 131, 199, 156, 248, 66, 145, 192, 82, 161, 78, 166, 18, 41, 100, 144, 63, 173, 59, 230, 104, 50, 152, 255, 231, 224, 53, 202, 87, 103, 161, 78, 166, 18, 9, 206, 79, 11, 165, 167, 195, 201, 220, 143, 246, 127, 155, 225, 233, 112, 54, 240, 206, 216, 166, 68, 20, 213, 100, 108, 141, 226, 123, 63, 102, 142, 50, 105, 225, 37, 94, 40, 48, 39, 70, 22, 133, 142, 205, 142, 151, 177, 202, 226, 31, 202, 172, 133, 247, 61, 5, 230, 104, 56, 129, 205, 72, 252, 191, 65, 51, 22, 9, 120, 16, 103, 83, 145, 92, 54, 185, 228, 17, 59, 254, 54, 170, 26, 86, 24, 179, 29, 26, 24, 190, 112, 133, 183, 18, 218, 248, 177, 230, 74, 133, 144, 66, 117, 154, 74, 164, 17, 124, 8, 244, 81, 108, 210, 211, 100, 42, 150, 142, 206, 38, 18, 71, 124, 8, 2, 186, 2, 34, 112, 1, 59, 188, 33, 70, 172, 58, 156, 141, 215, 118, 106, 50, 152, 203, 101, 247, 205, 17, 67, 30, 237, 207, 106, 208, 198, 143, 193, 130, 43, 72, 208, 194, 137, 224, 64, 11, 255, 106, 59, 33, 218, 63, 216, 229, 208, 192, 224, 5, 5, 183, 90, 39, 156, 117, 67, 4, 167, 74, 23, 125, 60, 29, 13, 115, 169, 200, 142, 219, 218, 123, 166, 184, 149, 192, 154, 171, 171, 16, 226, 119, 34, 29, 202, 16, 8, 222, 156, 141, 237, 223, 82, 185, 252, 118, 136, 223, 96, 176, 230, 170, 141, 159, 10, 33, 117, 83, 105, 36, 10, 129, 90, 233, 146, 46, 142, 55, 158, 47, 173, 236, 156, 53, 74, 26, 137, 66, 160, 15, 199, 156, 39, 93, 23, 203, 181, 83, 98, 214, 66, 57, 105, 225, 148, 64, 38, 27, 79, 147, 193, 92, 44, 156, 227, 237, 226, 93, 2, 115, 177, 84, 218, 232, 120, 227, 247, 183, 48, 148, 156, 141, 167, 177, 84, 46, 189, 101, 159, 252, 143, 47, 220, 113, 155, 22, 31, 14, 70, 231, 133, 179, 205, 249, 158, 198, 23, 75, 81, 91, 54, 145, 68, 22, 10, 77, 11, 159, 249, 31, 191, 59, 123, 56, 222, 96, 168, 16, 218, 248, 165, 80, 37, 210, 200, 30, 119, 56, 27, 123, 93, 11, 39, 183, 65, 73, 105, 191, 69, 32, 127, 163, 229, 22, 10, 204, 141, 78, 20, 2, 125, 60, 29, 207, 24, 163, 184, 63, 222, 126, 131, 177, 80, 136, 66, 30, 119, 56, 173, 116, 109, 126, 177, 84, 100, 199, 109, 218, 41, 209, 153, 39, 146, 55, 236, 159, 53, 191, 82, 25, 129, 149, 66, 253, 100, 122, 169, 141, 31, 9, 155, 162, 16, 232, 227, 145, 46, 219, 150, 202, 61, 9, 19, 112, 110, 227, 52, 74, 123, 47, 107, 161, 237, 56, 148, 149, 45, 102, 19, 73, 4, 242, 112, 144, 64, 159, 205, 127, 99, 46, 183, 184, 227, 20, 112, 230, 7, 105, 212, 198, 15, 244, 241, 116, 90, 56, 57, 109, 167, 141, 169, 4, 10, 173, 246, 222, 60, 130, 71, 162, 135, 56, 127, 167, 111, 41, 97, 205, 149, 85, 79, 161, 92, 50, 233, 55, 72, 229, 249, 226, 156, 205, 61, 40, 237, 55, 24, 247, 143, 242, 13, 231, 15, 207, 93, 186, 238, 96, 216, 126, 10, 117, 50, 149, 72, 33, 208, 199, 158, 14, 6, 206, 27, 99, 60, 241, 191, 170, 141, 45, 20, 91, 98, 133, 226, 111, 48, 22, 10, 204, 78, 120, 242, 55, 24, 95, 153, 97, 39, 204, 154, 43, 213, 201, 170, 146, 69, 191, 89, 183, 89, 222, 34, 16, 56, 207, 114, 137, 4, 165, 109, 103, 140, 249, 255, 127, 149, 178, 79, 185, 51, 238, 172, 69, 238, 132, 51, 99, 112, 222, 94, 88, 145, 176, 116, 220, 38, 97, 2, 36, 39, 141, 68, 33, 208, 109, 233, 44, 105, 252, 254, 63, 158, 47, 99, 204, 197, 126, 226, 166, 151, 72, 15, 121, 58, 151, 49, 83, 96, 78, 252, 118, 194, 159, 38, 127, 43, 160, 252, 118, 195, 99, 46, 210, 127, 130, 235, 184, 255, 170, 198, 25, 139, 195, 219, 190, 228, 129, 165, 80, 39, 83, 137, 52, 18, 133, 60, 63, 156, 210, 117, 185, 246, 79, 36, 17, 200, 223, 96, 216, 254, 234, 67, 72, 161, 78, 166, 95, 20, 50, 199, 150, 153, 125, 51, 252, 109, 141, 209, 167, 189, 239, 201, 27, 222, 255, 183, 117, 98, 87, 104, 57, 193, 172, 95, 133, 144, 66, 137, 66, 32, 251, 219, 120, 158, 240, 26, 229, 219, 231, 248, 39, 228, 209, 196, 55, 31, 230, 82, 145, 157, 111, 27, 26, 116, 108, 110, 156, 185, 191, 105, 166, 248, 54, 196, 246, 27, 226, 231, 195, 171, 224, 52, 221, 251, 61, 79, 115, 159, 99, 220, 246, 223, 120, 226, 247, 183, 251, 30, 227, 11, 144, 55, 158, 166, 139, 178, 243, 37, 191, 29, 13, 165, 130, 59, 37, 94, 225, 127, 157, 185, 206, 133, 66, 18, 193, 102, 3, 178, 236, 145, 69, 182, 5, 78, 5, 198, 41, 240, 149, 175, 50, 235, 211, 171, 255, 62, 181, 81, 101, 42, 145, 28, 191, 204, 13, 109, 134, 39, 109, 227, 11, 219, 159, 116, 137, 218, 206, 16, 7, 250, 156, 115, 255, 149, 115, 222, 172, 81, 238, 121, 98, 67, 30, 138, 196, 127, 204, 197, 114, 251, 106, 161, 192, 30, 157, 148, 22, 202, 99, 241, 254, 197, 223, 78, 121, 164, 253, 255, 197, 198, 211, 200, 107, 182, 239, 114, 104, 96, 88, 80, 232, 16, 82, 168, 206, 82, 11, 39, 201, 211, 225, 108, 50, 246, 43, 151, 183, 93, 225, 254, 9, 99, 161, 112, 226, 27, 228, 140, 31, 123, 230, 227, 54, 71, 20, 178, 227, 20, 91, 204, 236, 31, 212, 185, 214, 57, 31, 249, 11, 162, 141, 159, 203, 161, 129, 97, 33, 97, 174, 82, 55, 117, 146, 66, 160, 12, 230, 168, 111, 182, 237, 47, 156, 48, 234, 100, 147, 75, 164, 145, 40, 4, 250, 252, 150, 138, 252, 41, 49, 243, 68, 18, 129, 248, 87, 69, 254, 127, 161, 240, 188, 167, 105, 253, 139, 165, 34, 53, 205, 198, 44, 220, 166, 61, 251, 29, 185, 25, 188, 208, 194, 43, 28, 33, 133, 58, 157, 4, 37, 168, 237, 252, 156, 227, 105, 126, 241, 127, 238, 155, 70, 177, 39, 15, 248, 11, 247, 103, 151, 126, 56, 222, 88, 89, 213, 198, 47, 100, 123, 247, 164, 237, 200, 226, 239, 180, 67, 30, 255, 21, 79, 36, 156, 213, 198, 111, 174, 84, 8, 39, 155, 74, 22, 133, 44, 93, 239, 112, 174, 185, 216, 150, 44, 20, 216, 199, 154, 168, 178, 13, 73, 28, 158, 179, 241, 52, 242, 135, 248, 140, 83, 11, 111, 42, 121, 58, 156, 141, 74, 147, 49, 230, 63, 247, 45, 218, 225, 123, 190, 233, 180, 220, 112, 74, 87, 54, 145, 68, 238, 3, 47, 67, 60, 252, 13, 109, 140, 96, 88, 80, 104, 89, 133, 144, 66, 181, 247, 224, 44, 141, 68, 240, 29, 91, 118, 156, 35, 144, 85, 131, 177, 176, 112, 219, 89, 217, 127, 6, 230, 16, 232, 195, 250, 42, 220, 118, 119, 236, 105, 96, 165, 209, 190, 67, 109, 252, 60, 254, 53, 63, 155, 72, 254, 198, 23, 156, 223, 255, 183, 106, 217, 228, 142, 135, 64, 31, 15, 247, 108, 114, 223, 11, 43, 30, 254, 61, 240, 207, 96, 46, 150, 138, 236, 184, 77, 163, 36, 2, 109, 239, 201, 151, 191, 40, 70, 33, 81, 21, 131, 221, 18, 21, 196, 36, 218, 142, 189, 214, 25, 95, 44, 190, 74, 2, 121, 27, 142, 170, 251, 127, 105, 111, 89, 2, 177, 138, 225, 69, 123, 197, 111, 223, 138, 1, 184, 149, 47, 217, 118, 237, 57, 74, 156, 68, 84, 126, 27, 237, 61, 5, 102, 187, 26, 90, 91, 193, 173, 175, 156, 242, 201, 166, 146, 45, 95, 159, 214, 222, 188, 94, 198, 92, 42, 127, 43, 170, 108, 138, 127, 135, 127, 134, 255, 97, 83, 133, 96, 155, 94, 250, 69, 190, 37, 132, 95, 3, 195, 130, 130, 59, 231, 234, 254, 75, 255, 15, 231, 198, 14, 187, 147, 52, 250, 199, 211, 100, 46, 255, 207, 93, 98, 47, 12, 104, 227, 247, 32, 194, 193, 215, 64, 129, 124, 29, 104, 255, 234, 124, 112, 73, 151, 21, 90, 78, 96, 77, 21, 194, 201, 164, 63, 4, 250, 28, 115, 87, 44, 59, 219, 15, 198, 3, 254, 190, 44, 167, 249, 247, 84, 85, 28, 179, 91, 191, 197, 105, 223, 114, 198, 242, 114, 247, 22, 215, 30, 182, 162, 234, 170, 59, 108, 198, 226, 10, 172, 189, 151, 232, 1, 208, 198, 47, 129, 35, 208, 198, 239, 0, 3, 30, 124, 13, 24, 44, 48, 196, 67, 43, 93, 111, 249, 95, 57, 117, 50, 149, 124, 79, 135, 99, 251, 101, 249, 58, 131, 52, 18, 133, 64, 223, 198, 211, 252, 103, 124, 225, 183, 40, 1, 4, 14, 48, 224, 193, 35, 28, 124, 110, 192, 96, 193, 235, 222, 131, 116, 89, 193, 103, 77, 251, 127, 69, 182, 206, 34, 144, 5, 10, 46, 95, 242, 245, 130, 103, 104, 37, 176, 230, 255, 95, 245, 123, 118, 118, 31, 33, 126, 14, 153, 227, 141, 61, 95, 114, 155, 53, 207, 149, 10, 33, 245, 91, 20, 186, 141, 249, 127, 1, 4, 0, 0, 9, 32, 112, 128, 1, 157, 17, 14, 190, 6, 247, 12, 103, 2, 4, 15, 237, 29, 190, 160, 208, 74, 104, 161, 100, 217, 182, 169, 244, 26, 201, 87, 140, 184, 124, 89, 42, 87, 57, 218, 240, 119, 240, 89, 65, 2, 4, 7, 94, 135, 120, 112, 117, 54, 180, 112, 50, 220, 62, 196, 92, 42, 150, 240, 191, 124, 53, 24, 126, 182, 112, 174, 84, 79, 29, 117, 114, 137, 100, 131, 238, 91, 222, 113, 142, 63, 192, 6, 252, 65, 68, 107, 7, 255, 220, 128, 193, 119, 0, 54, 40, 180, 88, 211, 41, 212, 67, 215, 216, 226, 203, 151, 237, 120, 131, 241, 6, 12, 90, 47, 80, 224, 4, 8, 22, 172, 224, 86, 194, 239, 151, 110, 219, 195, 217, 24, 245, 200, 25, 46, 93, 172, 86, 186, 72, 33, 95, 227, 87, 110, 73, 68, 27, 191, 151, 124, 253, 193, 161, 129, 161, 149, 96, 27, 254, 100, 31, 228, 177, 237, 115, 167, 68, 6, 131, 5, 87, 144, 0, 193, 129, 191, 106, 134, 5, 5, 150, 89, 44, 132, 143, 124, 79, 167, 229, 124, 227, 25, 115, 241, 37, 247, 231, 248, 41, 72, 128, 224, 128, 31, 238, 114, 104, 248, 66, 123, 207, 240, 159, 43, 21, 66, 170, 133, 19, 229, 147, 93, 34, 141, 90, 249, 114, 200, 29, 183, 105, 148, 55, 24, 139, 175, 193, 25, 180, 241, 91, 160, 192, 9, 16, 196, 15, 226, 161, 225, 12, 45, 252, 130, 66, 43, 97, 117, 213, 17, 82, 168, 147, 109, 95, 243, 138, 60, 229, 49, 155, 72, 14, 48, 224, 65, 27, 191, 8, 7, 8, 218, 206, 3, 47, 136, 135, 246, 30, 60, 67, 107, 59, 161, 253, 231, 87, 237, 189, 211, 77, 242, 117, 86, 39, 95, 242, 213, 225, 24, 5, 39, 230, 155, 70, 137, 217, 27, 127, 208, 128, 193, 2, 5, 9, 126, 191, 32, 30, 92, 14, 157, 11, 10, 231, 90, 78, 88, 193, 105, 147, 75, 182, 221, 109, 50, 24, 40, 45, 221, 23, 40, 104, 227, 151, 0, 193, 129, 23, 196, 131, 203, 161, 161, 237, 100, 104, 23, 90, 56, 21, 90, 248, 4, 207, 149, 170, 189, 233, 36, 255, 119, 229, 255, 74, 0, 15, 64, 27, 63, 0, 56, 1, 4, 126, 64, 27, 63, 3, 30, 68, 56, 248, 222, 224, 12, 22, 180, 157, 10, 18, 32, 120, 181, 135, 120, 112, 121, 158, 66, 43, 161, 149, 175, 217, 202, 215, 42, 133, 178, 124, 217, 161, 95, 186, 228, 246, 248, 23, 14, 13, 12, 95, 248, 163, 42, 129, 53, 87, 255, 173, 217, 204, 77, 252, 31, 96, 192, 131, 8, 59, 104, 227, 247, 53, 96, 176, 64, 129, 19, 180, 8, 14, 188, 32, 252, 96, 151, 67, 195, 25, 90, 249, 146, 47, 233, 138, 17, 1, 160, 4, 168, 100, 177, 91, 149, 169, 1, 0, 0, 8, 4, 5, 1, 147, 20, 8, 64, 32, 24, 22, 22, 144, 102, 138, 38, 233, 14, 20, 0, 21, 39, 74, 24, 130, 64, 120, 68, 76, 156, 138, 101, 66, 146, 162, 48, 99, 140, 49, 134, 33, 131, 0, 0, 140, 204, 204, 68, 1, 208, 53, 170, 69, 94, 169, 174, 221, 163, 65, 248, 116, 9, 99, 86, 100, 70, 76, 54, 248, 64, 83, 91, 105, 15, 141, 207, 59, 62, 72, 35, 252, 233, 126, 17, 139, 239, 121, 208, 7, 217, 206, 161, 77, 93, 44, 92, 61, 104, 19, 76, 221, 65, 83, 110, 133, 70, 88, 162, 174, 158, 215, 77, 13, 103, 246, 52, 112, 71, 177, 230, 174, 198, 108, 197, 43, 158, 235, 148, 92, 105, 190, 108, 150, 72, 51, 23, 129, 206, 159, 137, 177, 246, 197, 90, 58, 11, 63, 15, 140, 42, 74, 255, 67, 208, 143, 220, 80, 217, 7, 217, 43, 120, 104, 138, 193, 178, 122, 181, 172, 187, 41, 247, 184, 222, 124, 167, 124, 194, 73, 104, 216, 81, 146, 149, 242, 214, 120, 42, 136, 99, 125, 148, 178, 115, 146, 215, 250, 80, 242, 88, 160, 141, 18, 106, 33, 43, 213, 133, 144, 6, 73, 154, 123, 185, 20, 165, 241, 145, 12, 245, 94, 12, 2, 65, 3, 253, 130, 235, 213, 128, 128, 119, 205, 196, 248, 200, 231, 25, 175, 190, 196, 197, 170, 22, 199, 157, 38, 0, 36, 243, 207, 72, 95, 157, 89, 144, 226, 19, 132, 205, 46, 49, 153, 134, 97, 170, 200, 83, 116, 39, 22, 160, 166, 139, 166, 88, 168, 25, 164, 248, 40, 99, 86, 245, 71, 19, 29, 130, 138, 47, 76, 133, 82, 158, 5, 141, 64, 62, 104, 63, 100, 117, 125, 244, 55, 8, 168, 141, 225, 198, 246, 135, 52, 235, 33, 99, 235, 212, 205, 43, 78, 128, 146, 219, 2, 247, 26, 70, 113, 50, 209, 239, 240, 159, 252, 63, 184, 182, 70, 98, 18, 248, 233, 166, 157, 211, 64, 57, 192, 38, 176, 175, 91, 120, 118, 27, 41, 26, 37, 130, 210, 160, 233, 139, 124, 43, 238, 222, 208, 208, 155, 16, 51, 43, 250, 179, 220, 162, 243, 48, 18, 196, 227, 195, 196, 163, 89, 25, 183, 76, 87, 70, 125, 2, 120, 50, 97, 220, 248, 229, 172, 240, 180, 144, 231, 224, 6, 18, 165, 216, 247, 118, 12, 37, 218, 9, 187, 67, 181, 40, 90, 53, 116, 227, 108, 120, 220, 4, 113, 119, 254, 145, 94, 40, 157, 14, 169, 161, 116, 230, 125, 228, 47, 185, 147, 235, 85, 85, 10, 192, 34, 212, 238, 120, 86, 202, 211, 185, 108, 167, 228, 67, 203, 246, 7, 59, 146, 178, 95, 20, 242, 222, 187, 71, 78, 82, 111, 234, 56, 97, 245, 250, 66, 196, 1, 37, 53, 146, 13, 136, 224, 88, 128, 46, 211, 173, 215, 223, 97, 218, 157, 138, 175, 72, 197, 211, 200, 219, 168, 8, 207, 90, 163, 215, 178, 247, 9, 56, 140, 55, 70, 120, 113, 119, 151, 130, 141, 166, 9, 178, 171, 95, 197, 90, 0, 119, 104, 76, 91, 171, 194, 162, 212, 44, 201, 142, 26, 99, 192, 70, 28, 79, 6, 100, 188, 147, 130, 82, 54, 231, 205, 121, 170, 52, 50, 70, 87, 37, 151, 59, 15, 19, 198, 200, 153, 201, 72, 55, 164, 111, 28, 3, 90, 126, 158, 175, 52, 214, 22, 63, 0, 123, 116, 53, 212, 167, 110, 73, 135, 152, 179, 136, 154, 148, 82, 178, 204, 236, 246, 116, 137, 91, 244, 117, 60, 189, 211, 113, 168, 165, 213, 49, 200, 232, 94, 96, 253, 90, 124, 94, 170, 205, 175, 102, 19, 65, 113, 164, 211, 70, 19, 187, 65, 182, 234, 29, 111, 152, 26, 149, 190, 146, 10, 198, 70, 200, 45, 107, 159, 177, 135, 239, 243, 160, 33, 66, 168, 129, 147, 85, 45, 37, 214, 223, 52, 131, 0, 39, 128, 168, 74, 171, 6, 243, 139, 166, 25, 167, 172, 72, 5, 208, 238, 146, 246, 227, 25, 46, 215, 233, 226, 109, 30, 248, 239, 243, 198, 129, 25, 237, 110, 173, 35, 234, 189, 14, 210, 131, 145, 194, 70, 185, 148, 125, 37, 48, 47, 56, 61, 20, 189, 56, 18, 199, 136, 8, 123, 204, 166, 165, 201, 241, 240, 211, 113, 249, 61, 133, 119, 64, 168, 241, 42, 112, 77, 66, 39, 244, 254, 80, 90, 50, 32, 6, 255, 151, 180, 236, 169, 162, 240, 235, 170, 1, 194, 197, 108, 79, 216, 244, 195, 86, 230, 47, 221, 203, 187, 209, 155, 56, 110, 102, 186, 181, 148, 108, 124, 200, 80, 240, 102, 153, 149, 117, 78, 124, 230, 88, 123, 164, 188, 205, 86, 167, 40, 72, 147, 68, 177, 145, 25, 18, 215, 178, 34, 202, 192, 193, 110, 244, 240, 141, 30, 71, 246, 119, 70, 86, 199, 163, 0, 224, 37, 209, 195, 136, 215, 174, 128, 77, 16, 83, 2, 235, 253, 103, 32, 77, 3, 135, 68, 50, 102, 216, 247, 77, 185, 84, 80, 189, 41, 172, 199, 158, 189, 53, 218, 3, 90, 101, 163, 99, 243, 128, 133, 207, 199, 209, 32, 192, 242, 46, 69, 3, 85, 226, 154, 230, 238, 167, 17, 28, 83, 31, 75, 238, 91, 250, 74, 143, 171, 82, 102, 167, 21, 113, 9, 237, 79, 216, 12, 233, 128, 127, 54, 161, 27, 125, 165, 93, 78, 128, 198, 180, 219, 31, 94, 7, 221, 87, 205, 55, 33, 20, 155, 180, 67, 5, 228, 195, 245, 168, 184, 10, 251, 42, 194, 184, 245, 172, 215, 33, 195, 66, 181, 165, 50, 31, 112, 121, 67, 62, 61, 24, 57, 84, 13, 223, 119, 119, 216, 136, 232, 218, 58, 175, 22, 92, 149, 80, 36, 65, 45, 167, 181, 211, 22, 45, 56, 34, 220, 2, 52, 152, 156, 203, 6, 96, 229, 178, 201, 57, 97, 128, 5, 153, 254, 237, 178, 10, 49, 61, 128, 253, 141, 144, 205, 74, 22, 182, 13, 249, 180, 42, 111, 221, 192, 236, 220, 7, 106, 198, 230, 56, 215, 108, 112, 232, 15, 3, 131, 203, 106, 95, 63, 230, 32, 7, 43, 49, 141, 5, 210, 125, 51, 224, 169, 49, 17, 15, 64, 2, 47, 130, 199, 70, 98, 209, 92, 94, 139, 193, 145, 226, 228, 202, 26, 64, 80, 5, 212, 232, 50, 83, 208, 72, 196, 110, 149, 249, 225, 253, 149, 115, 211, 137, 202, 84, 196, 99, 88, 57, 202, 8, 80, 211, 244, 116, 80, 29, 16, 118, 193, 179, 200, 234, 134, 88, 233, 137, 228, 178, 207, 139, 47, 162, 101, 219, 54, 132, 116, 124, 248, 106, 156, 241, 83, 255, 241, 227, 227, 150, 122, 76, 36, 179, 165, 4, 115, 213, 103, 102, 243, 49, 56, 26, 165, 147, 48, 254, 241, 217, 103, 0, 159, 107, 164, 148, 47, 18, 199, 170, 241, 230, 202, 229, 92, 98, 55, 82, 185, 229, 244, 3, 212, 91, 178, 50, 66, 221, 174, 88, 7, 126, 214, 52, 215, 178, 48, 71, 39, 170, 114, 96, 118, 66, 127, 213, 157, 64, 89, 189, 88, 6, 249, 0, 202, 156, 129, 47, 57, 55, 234, 143, 85, 187, 59, 237, 213, 12, 182, 130, 238, 118, 176, 147, 172, 59, 106, 244, 55, 42, 142, 106, 31, 109, 230, 114, 7, 40, 226, 140, 23, 47, 112, 105, 39, 72, 68, 38, 181, 133, 80, 54, 216, 187, 150, 152, 76, 40, 149, 4, 248, 16, 207, 147, 11, 18, 216, 75, 80, 186, 223, 231, 211, 170, 79, 130, 39, 164, 157, 57, 237, 33, 38, 100, 173, 182, 118, 24, 202, 64, 72, 120, 29, 232, 211, 120, 32, 156, 100, 75, 137, 151, 17, 27, 246, 102, 32, 22, 203, 142, 229, 220, 243, 152, 191, 169, 153, 20, 229, 14, 195, 119, 107, 190, 107, 207, 53, 166, 60, 31, 10, 86, 10, 35, 120, 66, 104, 180, 117, 255, 121, 82, 130, 158, 156, 45, 85, 150, 237, 130, 71, 17, 17, 61, 211, 23, 97, 82, 91, 253, 93, 215, 149, 112, 90, 34, 18, 192, 67, 228, 51, 254, 32, 157, 24, 40, 42, 186, 5, 39, 5, 75, 23, 70, 27, 62, 125, 66, 37, 110, 171, 147, 200, 42, 38, 157, 207, 246, 252, 169, 66, 167, 129, 186, 190, 99, 186, 83, 133, 129, 174, 129, 143, 150, 221, 202, 172, 60, 220, 111, 97, 78, 186, 237, 3, 178, 88, 27, 202, 61, 51, 47, 103, 129, 94, 57, 182, 123, 72, 67, 237, 0, 25, 93, 168, 211, 128, 161, 12, 133, 137, 57, 208, 181, 159, 77, 168, 98, 34, 90, 23, 25, 40, 177, 131, 134, 121, 55, 83, 210, 132, 132, 133, 56, 143, 234, 202, 11, 103, 57, 182, 230, 59, 117, 135, 114, 240, 77, 237, 51, 8, 228, 45, 166, 141, 216, 171, 60, 194, 15, 176, 86, 66, 150, 17, 35, 141, 137, 135, 235, 57, 93, 17, 255, 216, 190, 36, 243, 204, 153, 58, 254, 209, 0, 45, 86, 201, 237, 25, 204, 238, 171, 16, 61, 227, 191, 53, 165, 30, 182, 74, 199, 46, 110, 23, 58, 34, 148, 133, 106, 29, 226, 177, 14, 185, 0, 231, 59, 161, 247, 78, 188, 56, 136, 220, 154, 174, 75, 189, 151, 215, 63, 127, 69, 186, 19, 162, 219, 185, 83, 235, 150, 47, 37, 165, 36, 212, 92, 63, 92, 83, 159, 142, 174, 108, 213, 199, 96, 6, 166, 164, 237, 27, 146, 79, 214, 58, 101, 24, 233, 163, 57, 224, 57, 249, 235, 111, 135, 0, 170, 202, 52, 194, 184, 172, 21, 41, 17, 227, 245, 119, 226, 35, 0, 58, 102, 43, 44, 156, 218, 69, 145, 90, 120, 242, 106, 130, 85, 48, 102, 251, 184, 215, 159, 186, 138, 110, 88, 168, 201, 203, 185, 64, 27, 70, 68, 141, 191, 8, 118, 64, 135, 170, 26, 253, 93, 39, 49, 106, 85, 114, 108, 230, 71, 192, 70, 87, 42, 116, 105, 214, 168, 43, 128, 173, 181, 0, 119, 142, 107, 134, 132, 188, 90, 164, 190, 35, 39, 240, 42, 60, 230, 85, 247, 238, 170, 184, 121, 216, 185, 84, 186, 138, 209, 80, 63, 0, 15, 179, 78, 0, 67, 205, 218, 179, 160, 152, 124, 87, 18, 22, 213, 137, 160, 144, 27, 21, 114, 190, 239, 217, 44, 159, 246, 214, 65, 113, 75, 10, 6, 254, 194, 55, 58, 232, 119, 255, 181, 100, 238, 43, 13, 124, 213, 60, 214, 121, 120, 36, 103, 49, 235, 46, 7, 163, 144, 228, 35, 56, 223, 61, 21, 56, 218, 44, 128, 160, 18, 155, 31, 71, 183, 41, 72, 188, 14, 87, 224, 82, 240, 68, 206, 27, 212, 212, 158, 101, 130, 37, 185, 15, 63, 28, 53, 214, 12, 240, 142, 126, 211, 67, 3, 65, 105, 191, 57, 111, 20, 2, 217, 252, 141, 157, 29, 79, 94, 127, 44, 91, 156, 6, 190, 43, 48, 232, 71, 208, 27, 120, 161, 174, 229, 13, 63, 132, 11, 133, 88, 85, 163, 111, 172, 32, 193, 177, 36, 55, 10, 242, 164, 183, 220, 50, 33, 131, 209, 235, 5, 188, 180, 228, 242, 239, 133, 160, 40, 166, 184, 70, 80, 231, 188, 26, 133, 132, 1, 224, 56, 255, 8, 48, 38, 246, 184, 218, 240, 119, 154, 196, 130, 38, 201, 50, 191, 39, 65, 111, 125, 156, 82, 12, 52, 154, 148, 65, 154, 32, 245, 26, 192, 233, 1, 37, 227, 16, 66, 249, 196, 2, 3, 140, 216, 72, 27, 171, 209, 248, 192, 192, 156, 54, 191, 33, 198, 74, 141, 31, 219, 83, 17, 59, 111, 70, 250, 55, 42, 241, 40, 10, 69, 65, 212, 120, 137, 102, 198, 195, 114, 14, 194, 32, 87, 236, 139, 212, 146, 254, 209, 84, 216, 37, 1, 131, 217, 96, 218, 7, 166, 38, 121, 117, 250, 66, 183, 47, 4, 183, 8, 246, 70, 44, 225, 219, 95, 238, 120, 102, 171, 177, 10, 216, 61, 179, 221, 24, 205, 98, 152, 234, 227, 210, 234, 31, 173, 133, 202, 63, 0, 89, 189, 255, 36, 118, 176, 62, 254, 217, 244, 108, 110, 93, 75, 62, 18, 22, 202, 71, 207, 201, 200, 246, 145, 209, 173, 127, 176, 147, 44, 164, 4, 186, 186, 235, 6, 40, 91, 43, 218, 235, 2, 232, 184, 209, 120, 62, 246, 58, 136, 91, 203, 90, 96, 23, 242, 78, 157, 118, 95, 118, 184, 37, 105, 103, 47, 196, 158, 128, 221, 25, 128, 95, 188, 170, 167, 222, 13, 45, 180, 205, 67, 124, 253, 185, 123, 136, 242, 108, 35, 211, 221, 230, 70, 210, 131, 136, 137, 83, 77, 15, 77, 79, 42, 152, 227, 226, 34, 229, 91, 160, 33, 185, 75, 79, 102, 245, 4, 197, 223, 179, 76, 41, 146, 246, 131, 67, 176, 123, 110, 75, 57, 74, 0, 196, 101, 204, 60, 146, 158, 190, 74, 152, 110, 37, 98, 53, 23, 76, 197, 166, 238, 45, 20, 104, 244, 154, 26, 58, 158, 2, 146, 32, 207, 241, 11, 97, 234, 119, 125, 10, 10, 192, 141, 86, 53, 187, 49, 179, 194, 54, 16, 93, 49, 89, 193, 128, 46, 141, 52, 99, 232, 44, 162, 184, 204, 67, 50, 66, 160, 83, 194, 79, 61, 14, 185, 216, 24, 168, 214, 73, 197, 78, 128, 202, 227, 77, 3, 11, 232, 23, 60, 94, 8, 200, 43, 83, 168, 148, 2, 14, 39, 126, 27, 24, 118, 224, 104, 11, 0, 1, 134, 101, 16, 139, 51, 247, 152, 254, 81, 71, 216, 158, 105, 37, 133, 121, 214, 8, 23, 164, 244, 52, 0, 108, 121, 186, 133, 26, 89, 172, 17, 151, 113, 25, 35, 17, 143, 139, 33, 111, 24, 162, 233, 182, 234, 107, 68, 104, 0, 37, 252, 90, 61, 200, 19, 40, 52, 95, 18, 241, 130, 25, 160, 108, 249, 116, 176, 24, 189, 232, 155, 239, 68, 144, 6, 64, 192, 50, 22, 244, 198, 249, 80, 35, 176, 5, 7, 149, 168, 176, 85, 91, 97, 232, 61, 232, 208, 119, 105, 160, 87, 44, 86, 66, 212, 43, 151, 217, 18, 39, 27, 246, 185, 36, 238, 203, 86, 168, 49, 173, 72, 116, 70, 141, 104, 93, 167, 193, 158, 205, 91, 112, 151, 242, 77, 251, 151, 205, 66, 151, 163, 112, 201, 204, 78, 78, 168, 82, 21, 82, 26, 143, 217, 138, 238, 156, 85, 138, 103, 146, 4, 248, 251, 148, 69, 187, 50, 153, 26, 153, 228, 146, 135, 37, 2, 126, 26, 202, 206, 197, 252, 71, 226, 213, 239, 217, 201, 243, 94, 88, 35, 34, 18, 111, 64, 29, 199, 51, 143, 19, 66, 141, 202, 198, 126, 214, 210, 46, 70, 7, 207, 167, 130, 97, 237, 66, 73, 31, 98, 112, 157, 83, 217, 11, 30, 111, 12, 77, 142, 143, 121, 35, 47, 188, 21, 20, 224, 185, 248, 178, 131, 0, 134, 210, 209, 10, 244, 4, 182, 71, 136, 26, 124, 216, 205, 18, 132, 85, 122, 230, 36, 3, 46, 51, 190, 119, 84, 62, 146, 180, 234, 64, 96, 156, 89, 224, 148, 136, 174, 93, 143, 111, 48, 155, 13, 175, 90, 178, 33, 138, 55, 239, 160, 142, 146, 136, 240, 8, 225, 170, 175, 199, 145, 45, 246, 30, 184, 157, 27, 78, 19, 94, 109, 106, 52, 7, 176, 3, 38, 209, 36, 15, 144, 9, 131, 42, 246, 238, 249, 82, 12, 146, 181, 134, 5, 199, 30, 167, 115, 136, 139, 132, 219, 100, 158, 172, 189, 204, 153, 202, 208, 48, 130, 114, 14, 183, 121, 48, 99, 208, 201, 112, 29, 245, 187, 86, 66, 96, 14, 44, 49, 150, 243, 102, 70, 41, 56, 23, 176, 215, 14, 40, 104, 105, 18, 52, 178, 229, 196, 73, 227, 2, 73, 9, 107, 35, 166, 127, 21, 237, 70, 65, 141, 93, 82, 4, 87, 60, 41, 29, 147, 231, 144, 134, 175, 166, 76, 87, 141, 205, 167, 178, 66, 165, 65, 145, 59, 146, 118, 173, 253, 106, 35, 194, 142, 152, 226, 184, 95, 125, 209, 194, 109, 111, 173, 96, 174, 62, 242, 91, 134, 106, 143, 57, 100, 146, 139, 69, 195, 156, 166, 161, 228, 48, 219, 14, 33, 220, 201, 122, 66, 72, 25, 46, 168, 163, 76, 64, 18, 152, 190, 73, 4, 69, 70, 54, 160, 24, 183, 147, 166, 163, 249, 186, 181, 167, 180, 222, 56, 15, 226, 89, 183, 132, 71, 236, 203, 20, 210, 99, 58, 152, 76, 152, 74, 110, 149, 233, 148, 27, 193, 159, 38, 208, 145, 208, 96, 154, 165, 39, 96, 69, 194, 181, 99, 41, 199, 18, 166, 189, 95, 190, 124, 52, 3, 18, 88, 17, 183, 213, 176, 237, 91, 192, 69, 193, 253, 121, 91, 116, 114, 161, 193, 23, 169, 213, 204, 216, 82, 177, 9, 67, 66, 217, 160, 152, 103, 1, 187, 135, 217, 191, 200, 176, 103, 249, 74, 45, 245, 120, 125, 95, 217, 80, 75, 109, 24, 73, 46, 89, 181, 246, 5, 92, 227, 104, 222, 61, 50, 164, 10, 237, 198, 209, 90, 6, 161, 121, 223, 170, 35, 199, 232, 8, 109, 151, 122, 42, 204, 198, 215, 198, 127, 220, 118, 252, 103, 77, 133, 1, 197, 88, 72, 179, 20, 63, 117, 158, 3, 107, 145, 221, 244, 21, 87, 86, 65, 165, 248, 144, 201, 131, 16, 175, 247, 115, 179, 152, 134, 223, 164, 38, 36, 25, 144, 120, 91, 160, 212, 55, 180, 86, 237, 143, 123, 84, 10, 154, 189, 198, 204, 169, 19, 46, 145, 160, 154, 239, 103, 179, 19, 110, 146, 1, 106, 195, 112, 231, 60, 127, 202, 58, 54, 16, 134, 194, 124, 214, 144, 25, 19, 116, 191, 160, 212, 25, 62, 193, 246, 32, 31, 20, 103, 132, 204, 129, 33, 162, 84, 9, 138, 219, 130, 247, 54, 169, 37, 182, 39, 60, 68, 177, 231, 48, 156, 96, 149, 71, 182, 118, 73, 223, 87, 176, 160, 136, 83, 5, 98, 245, 97, 80, 171, 146, 75, 208, 5, 103, 160, 191, 205, 13, 116, 153, 91, 152, 238, 87, 45, 168, 72, 205, 96, 47, 167, 214, 73, 187, 50, 43, 45, 9, 46, 132, 221, 247, 118, 85, 78, 19, 177, 60, 168, 124, 124, 42, 242, 21, 190, 38, 138, 129, 57, 184, 174, 199, 231, 33, 63, 180, 163, 162, 194, 112, 87, 227, 104, 71, 111, 1, 2, 15, 161, 222, 123, 136, 155, 137, 154, 10, 163, 132, 122, 215, 129, 139, 57, 44, 123, 171, 79, 120, 26, 191, 232, 55, 65, 152, 36, 139, 64, 161, 238, 70, 94, 7, 77, 92, 236, 2, 157, 235, 47, 140, 137, 73, 201, 11, 73, 119, 254, 179, 144, 29, 205, 208, 154, 234, 137, 29, 123, 168, 59, 129, 19, 141, 234, 239, 139, 155, 224, 190, 85, 121, 179, 146, 138, 85, 7, 8, 85, 208, 138, 182, 173, 209, 26, 236, 12, 170, 121, 235, 174, 22, 228, 241, 34, 169, 162, 121, 102, 127, 12, 135, 68, 96, 11, 21, 67, 164, 15, 39, 71, 155, 88, 71, 185, 158, 63, 242, 208, 16, 37, 64, 131, 96, 174, 143, 252, 57, 230, 135, 34, 249, 118, 139, 24, 169, 120, 88, 209, 155, 52, 158, 41, 205, 74, 243, 151, 144, 227, 51, 110, 195, 23, 174, 106, 32, 225, 79, 202, 191, 227, 51, 205, 20, 1, 156, 250, 120, 100, 83, 181, 253, 67, 254, 226, 64, 183, 102, 83, 180, 234, 33, 143, 3, 44, 126, 105, 107, 67, 35, 64, 180, 74, 237, 15, 8, 201, 196, 109, 144, 48, 95, 34, 247, 63, 178, 3, 207, 140, 133, 72, 253, 23, 145, 68, 153, 133, 72, 67, 57, 152, 5, 145, 200, 228, 57, 42, 182, 252, 177, 151, 17, 161, 72, 107, 78, 110, 178, 160, 216, 250, 121, 242, 161, 244, 58, 99, 61, 6, 19, 181, 180, 0, 132, 152, 138, 226, 196, 123, 22, 239, 82, 82, 226, 16, 49, 163, 121, 176, 238, 109, 205, 22, 255, 127, 229, 176, 140, 159, 143, 244, 90, 240, 57, 99, 126, 67, 84, 234, 229, 49, 195, 212, 175, 174, 219, 123, 185, 203, 6, 144, 125, 160, 17, 191, 114, 85, 146, 82, 207, 42, 36, 32, 208, 62, 75, 234, 78, 54, 179, 81, 43, 65, 40, 41, 56, 5, 24, 188, 20, 222, 101, 31, 3, 51, 75, 156, 73, 82, 220, 116, 25, 32, 15, 220, 3, 205, 91, 197, 247, 226, 12, 15, 231, 233, 134, 174, 39, 22, 35, 75, 137, 157, 168, 71, 227, 81, 216, 207, 194, 103, 55, 128, 243, 205, 218, 202, 8, 95, 198, 24, 165, 103, 21, 90, 234, 85, 239, 51, 225, 68, 21, 189, 159, 89, 52, 117, 92, 188, 184, 12, 107, 176, 203, 188, 232, 17, 40, 80, 72, 162, 186, 198, 179, 228, 172, 6, 36, 122, 148, 136, 191, 181, 177, 61, 56, 219, 127, 42, 71, 135, 50, 165, 188, 178, 167, 236, 111, 182, 218, 37, 46, 84, 76, 14, 102, 154, 214, 182, 199, 38, 142, 111, 153, 76, 136, 235, 229, 236, 186, 79, 111, 160, 13, 15, 250, 199, 220, 187, 5, 146, 208, 155, 131, 27, 106, 182, 29, 249, 125, 213, 82, 253, 132, 233, 136, 128, 11, 107, 39, 18, 4, 217, 152, 65, 38, 147, 74, 12, 137, 169, 232, 236, 173, 63, 88, 93, 233, 127, 18, 98, 246, 3, 59, 171, 63, 145, 23, 121, 79, 47, 223, 27, 52, 20, 175, 164, 58, 70, 5, 191, 75, 164, 122, 98, 40, 232, 61, 121, 108, 44, 14, 22, 106, 94, 102, 23, 177, 228, 40, 208, 197, 126, 143, 208, 8, 200, 38, 204, 170, 253, 71, 38, 80, 9, 177, 200, 216, 120, 170, 5, 54, 115, 9, 216, 73, 46, 106, 101, 12, 196, 66, 30, 75, 156, 250, 185, 121, 189, 250, 193, 105, 157, 135, 2, 26, 15, 111, 74, 207, 119, 230, 245, 102, 2, 251, 117, 107, 61, 165, 247, 171, 43, 160, 62, 171, 7, 89, 213, 131, 6, 140, 77, 90, 75, 157, 33, 176, 11, 177, 61, 172, 29, 194, 46, 89, 104, 224, 81, 166, 27, 95, 194, 211, 137, 184, 88, 158, 76, 151, 76, 112, 172, 5, 33, 141, 141, 184, 227, 143, 61, 7, 222, 190, 162, 66, 173, 217, 72, 123, 78, 243, 83, 102, 101, 74, 85, 177, 170, 149, 141, 7, 137, 29, 82, 198, 22, 126, 70, 69, 224, 139, 26, 81, 97, 248, 89, 80, 61, 22, 208, 144, 255, 9, 248, 135, 27, 64, 240, 29, 219, 25, 91, 28, 59, 12, 152, 123, 43, 188, 21, 64, 241, 21, 16, 25, 230, 85, 159, 213, 218, 16, 58, 250, 209, 90, 212, 160, 227, 173, 10, 75, 119, 115, 53, 109, 31, 255, 205, 55, 168, 87, 74, 45, 232, 63, 129, 214, 155, 32, 164, 139, 248, 179, 18, 152, 171, 93, 120, 128, 35, 113, 178, 183, 6, 40, 199, 82, 5, 159, 9, 252, 251, 60, 129, 82, 208, 242, 162, 135, 51, 77, 10, 130, 11, 171, 198, 2, 108, 217, 170, 217, 19, 163, 149, 196, 137, 64, 139, 206, 62, 15, 142, 239, 137, 216, 155, 22, 170, 28, 109, 23, 232, 208, 63, 192, 29, 130, 45, 46, 48, 214, 133, 163, 11, 128, 246, 17, 247, 79, 180, 104, 169, 241, 232, 209, 242, 162, 62, 146, 101, 175, 6, 57, 155, 134, 97, 206, 60, 152, 9, 7, 235, 246, 177, 0, 224, 90, 158, 44, 73, 81, 150, 226, 10, 80, 20, 72, 118, 81, 175, 231, 128, 67, 183, 69, 167, 138, 121, 128, 100, 145, 33, 194, 136, 101, 144, 207, 52, 21, 60, 194, 132, 6, 157, 30, 166, 153, 156, 33, 83, 107, 90, 241, 140, 163, 106, 224, 166, 58, 108, 252, 161, 83, 193, 91, 83, 90, 37, 38, 157, 105, 201, 89, 161, 163, 216, 45, 19, 49, 139, 230, 169, 172, 35, 71, 27, 218, 245, 109, 59, 114, 53, 215, 13, 186, 167, 6, 202, 59, 210, 136, 95, 4, 107, 27, 240, 221, 102, 64, 86, 42, 90, 175, 73, 29, 17, 159, 190, 78, 223, 197, 254, 21, 85, 16, 76, 194, 115, 43, 151, 217, 184, 121, 120, 89, 234, 81, 174, 28, 131, 199, 216, 34, 151, 254, 139, 129, 118, 7, 177, 202, 86, 1, 236, 152, 19, 178, 154, 136, 218, 146, 240, 209, 155, 133, 135, 235, 1, 9, 248, 127, 85, 106, 189, 199, 43, 165, 206, 142, 47, 18, 220, 222, 107, 42, 73, 133, 48, 146, 91, 35, 131, 182, 59, 157, 17, 18, 58, 133, 209, 184, 237, 50, 217, 215, 94, 98, 226, 3, 210, 200, 35, 59, 13, 19, 246, 58, 175, 27, 199, 169, 221, 2, 20, 119, 246, 112, 222, 154, 22, 23, 36, 15, 216, 110, 25, 166, 120, 13, 254, 145, 249, 148, 55, 46, 53, 9, 226, 164, 96, 35, 233, 67, 253, 100, 40, 181, 131, 178, 149, 34, 50, 47, 137, 56, 143, 19, 25, 47, 165, 141, 199, 42, 223, 76, 186, 232, 80, 170, 241, 146, 55, 82, 246, 37, 50, 196, 152, 152, 80, 108, 90, 177, 90, 86, 112, 166, 161, 99, 18, 30, 221, 197, 206, 84, 248, 243, 147, 0, 210, 194, 35, 159, 114, 204, 89, 75, 13, 86, 177, 104, 225, 178, 61, 53, 90, 210, 50, 183, 172, 45, 251, 104, 19, 7, 183, 26, 85, 40, 57, 218, 195, 68, 132, 88, 108, 24, 230, 231, 58, 161, 85, 145, 242, 34, 190, 153, 237, 222, 27, 100, 190, 32, 24, 180, 247, 176, 207, 90, 53, 52, 179, 127, 44, 224, 50, 35, 199, 133, 196, 165, 2, 247, 179, 185, 62, 199, 175, 222, 230, 6, 47, 18, 142, 24, 228, 155, 154, 177, 219, 189, 198, 241, 76, 26, 73, 181, 248, 166, 58, 132, 168, 37, 27, 233, 130, 246, 235, 119, 238, 2, 240, 163, 10, 56, 73, 124, 198, 7, 13, 130, 69, 8, 202, 138, 57, 232, 16, 201, 149, 221, 236, 180, 27, 39, 195, 238, 182, 195, 72, 223, 89, 102, 83, 217, 119, 94, 195, 169, 150, 64, 11, 87, 160, 97, 233, 239, 93, 144, 189, 156, 87, 221, 189, 105, 232, 79, 6, 161, 107, 7, 205, 254, 126, 151, 253, 64, 213, 211, 110, 86, 171, 27, 13, 202, 164, 149, 10, 130, 107, 76, 107, 164, 184, 199, 96, 152, 3, 79, 160, 192, 174, 145, 126, 193, 140, 147, 254, 128, 24, 173, 150, 43, 184, 86, 102, 219, 129, 252, 193, 78, 23, 102, 12, 15, 159, 105, 125, 51, 128, 14, 54, 90, 71, 2, 191, 101, 156, 60, 98, 128, 169, 234, 254, 239, 28, 111, 18, 57, 245, 140, 203, 24, 251, 20, 153, 129, 173, 109, 93, 53, 155, 85, 131, 80, 78, 248, 247, 120, 107, 222, 196, 218, 231, 5, 8, 132, 193, 218, 66, 129, 40, 64, 16, 37, 138, 167, 18, 6, 106, 30, 207, 9, 253, 69, 104, 251, 187, 242, 74, 102, 51, 49, 88, 175, 198, 97, 98, 190, 195, 244, 81, 5, 67, 132, 242, 164, 206, 206, 211, 69, 221, 83, 194, 199, 4, 113, 111, 49, 196, 165, 225, 165, 59, 104, 40, 185, 12, 22, 176, 95, 12, 123, 172, 79, 62, 148, 118, 237, 97, 114, 195, 139, 84, 186, 72, 24, 168, 83, 165, 194, 98, 118, 65, 1, 87, 38, 251, 185, 94, 208, 25, 36, 176, 145, 136, 133, 97, 75, 111, 162, 147, 188, 239, 29, 74, 85, 71, 4, 131, 158, 9, 51, 65, 19, 10, 249, 81, 118, 45, 219, 0, 59, 249, 251, 51, 174, 214, 104, 69, 213, 172, 0, 52, 142, 88, 18, 112, 132, 66, 42, 130, 219, 67, 109, 149, 58, 110, 25, 247, 72, 35, 24, 69, 65, 56, 64, 62, 208, 61, 247, 246, 168, 152, 185, 67, 234, 67, 176, 96, 254, 213, 232, 20, 175, 127, 178, 13, 146, 120, 35, 10, 139, 61, 123, 74, 146, 138, 127, 27, 55, 154, 123, 107, 40, 216, 49, 214, 223, 113, 214, 182, 100, 209, 158, 244, 11, 90, 16, 211, 93, 98, 37, 99, 85, 17, 190, 197, 83, 60, 96, 190, 98, 196, 211, 88, 134, 217, 145, 72, 72, 194, 252, 15, 18, 67, 189, 106, 16, 224, 212, 92, 148, 123, 214, 90, 93, 128, 48, 179, 203, 68, 183, 12, 71, 80, 188, 193, 123, 97, 56, 249, 251, 228, 31, 131, 250, 3, 23, 88, 175, 40, 20, 116, 203, 236, 247, 30, 218, 252, 101, 218, 47, 84, 30, 119, 70, 141, 179, 55, 176, 160, 250, 128, 251, 170, 77, 237, 159, 92, 240, 199, 143, 158, 112, 193, 255, 136, 104, 127, 247, 250, 53, 207, 101, 211, 21, 237, 39, 10, 162, 18, 124, 71, 91, 76, 185, 111, 148, 238, 193, 200, 201, 232, 225, 212, 123, 105, 32, 155, 111, 157, 16, 1, 26, 124, 107, 160, 76, 153, 188, 101, 235, 202, 54, 220, 92, 218, 177, 252, 122, 8, 202, 179, 76, 213, 97, 5, 12, 149, 164, 158, 26, 141, 228, 80, 168, 38, 177, 183, 235, 44, 206, 221, 230, 166, 117, 16, 76, 155, 30, 146, 175, 206, 228, 204, 186, 235, 38, 162, 63, 58, 190, 114, 26, 11, 148, 252, 23, 107, 63, 131, 108, 215, 222, 83, 3, 121, 168, 82, 3, 52, 182, 116, 209, 49, 134, 6, 129, 101, 49, 79, 178, 164, 109, 57, 49, 119, 44, 116, 66, 135, 69, 196, 12, 116, 227, 67, 105, 87, 218, 120, 99, 114, 102, 192, 70, 49, 236, 149, 150, 229, 75, 191, 179, 176, 11, 111, 50, 124, 34, 228, 50, 15, 186, 221, 65, 169, 160, 205, 132, 164, 243, 196, 25, 6, 142, 129, 140, 244, 152, 40, 127, 38, 44, 199, 84, 17, 162, 94, 227, 48, 196, 235, 12, 160, 50, 27, 201, 140, 80, 107, 204, 180, 45, 242, 21, 186, 134, 139, 230, 13, 150, 18, 228, 245, 196, 181, 116, 117, 70, 251, 97, 162, 235, 199, 16, 241, 63, 136, 97, 159, 202, 84, 211, 142, 120, 155, 65, 196, 35, 148, 66, 244, 142, 21, 166, 38, 67, 186, 133, 192, 230, 120, 98, 76, 90, 97, 116, 78, 164, 37, 20, 110, 165, 9, 205, 211, 13, 159, 15, 182, 10, 253, 39, 147, 167, 22, 181, 152, 193, 234, 207, 218, 225, 46, 107, 207, 99, 96, 11, 251, 189, 171, 55, 148, 187, 78, 15, 65, 241, 244, 212, 227, 122, 237, 177, 178, 130, 219, 81, 136, 60, 93, 120, 94, 180, 172, 103, 241, 74, 137, 87, 25, 130, 106, 109, 206, 126, 196, 104, 102, 127, 164, 131, 194, 227, 84, 68, 216, 96, 24, 152, 101, 77, 100, 6, 21, 101, 128, 185, 56, 77, 139, 161, 78, 30, 192, 255, 5, 154, 206, 50, 247, 183, 182, 37, 173, 34, 134, 64, 255, 176, 253, 181, 214, 189, 200, 222, 193, 241, 255, 187, 87, 189, 170, 192, 208, 69, 11, 157, 240, 73, 173, 246, 255, 43, 10, 4, 20, 245, 146, 28, 42, 90, 189, 126, 168, 14, 14, 69, 35, 19, 46, 82, 44, 179, 50, 39, 145, 249, 189, 23, 202, 231, 51, 90, 119, 107, 19, 113, 252, 217, 165, 40, 236, 107, 47, 146, 3, 243, 55, 39, 129, 220, 49, 228, 88, 11, 188, 250, 182, 47, 61, 87, 202, 175, 187, 179, 209, 138, 177, 195, 81, 95, 193, 176, 19, 229, 55, 82, 54, 97, 228, 141, 124, 206, 49, 85, 59, 138, 35, 250, 222, 154, 65, 180, 101, 75, 140, 126, 84, 8, 91, 166, 161, 224, 62, 218, 142, 70, 174, 82, 68, 190, 232, 1, 131, 158, 147, 206, 10, 117, 159, 234, 154, 16, 5, 240, 130, 142, 240, 42, 81, 252, 93, 97, 29, 122, 78, 5, 4, 204, 70, 16, 185, 95, 137, 219, 159, 168, 213, 203, 212, 131, 255, 184, 117, 208, 218, 184, 43, 0, 145, 48, 107, 226, 85, 182, 28, 155, 73, 111, 117, 135, 194, 74, 240, 175, 54, 160, 163, 202, 200, 150, 5, 210, 90, 178, 123, 175, 105, 151, 128, 114, 35, 201, 149, 221, 203, 36, 112, 116, 31, 118, 236, 182, 24, 115, 197, 247, 170, 95, 98, 200, 8, 111, 124, 52, 142, 50, 196, 9, 102, 210, 64, 255, 218, 245, 47, 230, 91, 77, 56, 18, 192, 121, 107, 13, 153, 201, 9, 213, 83, 123, 187, 248, 58, 253, 192, 4, 254, 220, 179, 134, 202, 191, 61, 145, 85, 194, 129, 225, 185, 174, 71, 176, 247, 84, 153, 152, 118, 143, 119, 137, 163, 224, 49, 225, 116, 19, 211, 126, 221, 61, 190, 198, 152, 76, 189, 4, 248, 107, 118, 20, 180, 108, 124, 236, 102, 68, 134, 110, 53, 93, 160, 77, 15, 120, 128, 10, 86, 17, 35, 214, 192, 85, 97, 124, 97, 90, 148, 25, 176, 175, 128, 248, 15, 164, 146, 118, 114, 32, 159, 158, 102, 234, 147, 188, 199, 132, 169, 122, 148, 113, 90, 44, 173, 155, 133, 143, 235, 64, 72, 93, 113, 194, 170, 46, 226, 160, 63, 246, 22, 250, 147, 251, 174, 68, 215, 68, 161, 100, 16, 199, 146, 185, 220, 29, 77, 190, 214, 108, 48, 222, 235, 125, 198, 61, 49, 114, 14, 181, 85, 57, 89, 62, 80, 5, 19, 77, 28, 62, 248, 172, 120, 19, 22, 106, 191, 88, 1, 105, 193, 208, 229, 207, 140, 9, 62, 116, 148, 173, 81, 98, 8, 51, 68, 79, 148, 171, 35, 114, 217, 220, 190, 51, 197, 162, 108, 179, 72, 197, 131, 85, 14, 172, 163, 240, 196, 156, 12, 70, 202, 45, 181, 199, 40, 61, 212, 0, 120, 211, 51, 235, 74, 198, 62, 66, 85, 74, 241, 87, 33, 60, 145, 132, 61, 184, 197, 243, 85, 9, 12, 215, 101, 97, 151, 9, 243, 74, 96, 215, 114, 179, 179, 44, 19, 188, 207, 164, 192, 198, 58, 187, 245, 142, 132, 255, 234, 80, 17, 194, 96, 162, 135, 210, 1, 100, 118, 109, 64, 151, 69, 46, 80, 5, 27, 178, 219, 117, 82, 110, 50, 6, 179, 185, 228, 194, 49, 154, 212, 219, 77, 245, 70, 65, 10, 59, 83, 64, 67, 241, 75, 3, 70, 53, 18, 8, 111, 224, 106, 221, 54, 82, 173, 16, 101, 134, 94, 145, 136, 20, 49, 187, 162, 140, 213, 25, 167, 145, 53, 102, 22, 103, 118, 73, 24, 245, 67, 153, 253, 61, 225, 41, 101, 35, 189, 77, 226, 231, 25, 168, 171, 55, 172, 56, 95, 117, 236, 160, 50, 210, 24, 103, 8, 73, 19, 145, 94, 227, 153, 57, 146, 244, 9, 64, 142, 219, 217, 165, 235, 114, 206, 229, 23, 0, 13, 227, 73, 105, 24, 176, 8, 127, 107, 192, 242, 170, 173, 102, 27, 87, 177, 68, 243, 255, 209, 70, 54, 101, 185, 91, 80, 220, 118, 247, 87, 4, 166, 71, 214, 178, 142, 112, 174, 115, 221, 64, 38, 195, 167, 39, 56, 161, 7, 152, 67, 172, 77, 178, 168, 228, 2, 17, 183, 67, 3, 121, 18, 107, 128, 54, 52, 87, 88, 0, 76, 20, 207, 141, 146, 0, 181, 21, 208, 111, 156, 29, 173, 238, 35, 55, 1, 253, 5, 109, 108, 107, 56, 129, 44, 57, 181, 216, 163, 184, 94, 27, 211, 132, 112, 20, 206, 207, 173, 27, 77, 153, 85, 205, 62, 206, 174, 132, 203, 211, 253, 152, 14, 208, 245, 59, 167, 208, 92, 178, 7, 124, 128, 26, 23, 145, 70, 93, 124, 84, 245, 120, 138, 37, 20, 121, 20, 79, 138, 13, 92, 41, 193, 248, 36, 177, 218, 76, 28, 84, 199, 189, 178, 225, 194, 219, 34, 94, 126, 59, 122, 146, 192, 19, 33, 133, 51, 103, 98, 140, 185, 194, 48, 8, 199, 6, 220, 20, 215, 135, 137, 189, 239, 66, 243, 18, 238, 117, 130, 86, 65, 99, 108, 10, 28, 167, 208, 92, 143, 93, 33, 13, 142, 245, 77, 165, 179, 159, 105, 148, 241, 94, 81, 206, 143, 115, 99, 211, 168, 246, 188, 136, 139, 95, 239, 244, 240, 11, 21, 15, 75, 49, 154, 224, 153, 85, 22, 140, 119, 86, 61, 130, 66, 55, 101, 6, 186, 26, 144, 202, 44, 135, 35, 192, 12, 165, 81, 248, 190, 9, 54, 153, 20, 250, 187, 213, 138, 236, 91, 91, 225, 236, 247, 242, 165, 184, 2, 144, 246, 128, 85, 34, 11, 112, 99, 33, 240, 196, 75, 30, 204, 166, 246, 134, 12, 119, 147, 58, 1, 192, 97, 96, 156, 101, 146, 147, 169, 32, 90, 113, 220, 54, 207, 138, 188, 15, 72, 167, 156, 160, 50, 69, 110, 244, 229, 195, 202, 253, 153, 128, 245, 181, 0, 192, 80, 64, 2, 136, 33, 244, 232, 94, 191, 238, 33, 10, 56, 221, 7, 197, 249, 65, 202, 17, 118, 117, 164, 42, 45, 14, 50, 100, 162, 107, 30, 225, 234, 224, 167, 229, 82, 123, 54, 98, 40, 178, 103, 240, 201, 33, 166, 141, 39, 57, 187, 140, 200, 134, 117, 208, 202, 99, 245, 37, 70, 35, 214, 134, 105, 204, 52, 109, 167, 65, 162, 236, 249, 112, 149, 58, 112, 160, 156, 34, 185, 218, 85, 30, 34, 159, 188, 198, 11, 170, 195, 121, 9, 247, 199, 128, 255, 254, 143, 238, 194, 18, 138, 231, 33, 197, 23, 164, 174, 28, 160, 27, 91, 248, 6, 90, 192, 148, 232, 245, 25, 191, 45, 243, 123, 35, 41, 59, 225, 224, 98, 167, 36, 7, 33, 9, 39, 123, 150, 16, 78, 88, 243, 90, 150, 189, 173, 54, 183, 142, 28, 73, 55, 58, 61, 1, 117, 217, 115, 88, 239, 77, 37, 183, 199, 247, 90, 224, 48, 214, 60, 33, 74, 50, 16, 97, 244, 248, 144, 230, 148, 3, 224, 75, 36, 62, 166, 48, 107, 208, 194, 48, 232, 182, 160, 193, 209, 231, 173, 106, 125, 197, 44, 247, 84, 42, 242, 102, 130, 85, 3, 233, 96, 252, 239, 150, 28, 205, 54, 136, 210, 31, 87, 73, 68, 41, 160, 181, 248, 254, 210, 86, 61, 179, 176, 205, 73, 194, 213, 103, 132, 0, 93, 37, 59, 3, 123, 173, 72, 207, 144, 81, 62, 124, 225, 165, 208, 39, 95, 206, 81, 24, 27, 18, 238, 9, 167, 218, 203, 129, 152, 28, 135, 186, 65, 99, 35, 173, 140, 0, 185, 56, 61, 226, 245, 204, 37, 90, 100, 162, 217, 60, 70, 45, 230, 203, 112, 159, 209, 106, 75, 172, 29, 123, 8, 69, 48, 38, 106, 160, 205, 175, 227, 37, 96, 18, 109, 219, 37, 250, 175, 234, 50, 65, 9, 56, 119, 221, 4, 15, 116, 245, 69, 17, 187, 142, 171, 107, 202, 36, 109, 132, 174, 190, 49, 90, 159, 53, 39, 175, 207, 42, 209, 252, 220, 128, 21, 32, 170, 64, 153, 174, 144, 204, 229, 176, 8, 136, 190, 12, 50, 175, 7, 93, 113, 143, 210, 139, 157, 238, 203, 199, 130, 167, 55, 105, 36, 255, 238, 205, 190, 51, 164, 178, 181, 24, 242, 60, 110, 239, 47, 77, 4, 249, 34, 83, 33, 57, 113, 47, 200, 250, 154, 153, 185, 45, 135, 96, 231, 236, 203, 211, 203, 37, 244, 250, 243, 120, 183, 221, 137, 45, 155, 101, 84, 72, 147, 56, 60, 75, 153, 14, 196, 165, 249, 100, 245, 252, 217, 245, 82, 78, 89, 119, 0, 104, 77, 71, 12, 180, 254, 71, 40, 166, 110, 232, 80, 136, 49, 224, 122, 195, 79, 190, 238, 209, 89, 66, 94, 61, 191, 71, 238, 10, 180, 192, 186, 174, 161, 59, 180, 231, 86, 220, 137, 163, 40, 105, 57, 14, 116, 244, 143, 138, 138, 245, 35, 28, 144, 203, 92, 127, 249, 110, 129, 150, 67, 145, 57, 112, 154, 251, 137, 167, 186, 19, 135, 244, 84, 208, 139, 91, 36, 141, 99, 76, 240, 11, 101, 220, 166, 40, 162, 83, 152, 49, 32, 230, 142, 182, 56, 223, 189, 18, 157, 50, 182, 170, 249, 190, 85, 68, 139, 12, 76, 249, 153, 206, 97, 76, 145, 0, 205, 73, 24, 148, 227, 11, 233, 187, 11, 167, 230, 134, 194, 106, 160, 2, 19, 100, 63, 149, 20, 93, 21, 240, 234, 77, 146, 26, 27, 148, 24, 136, 100, 128, 81, 153, 85, 83, 132, 14, 162, 41, 68, 30, 121, 249, 13, 115, 27, 136, 73, 244, 235, 121, 92, 156, 188, 55, 6, 220, 183, 225, 133, 220, 173, 158, 99, 77, 186, 122, 55, 252, 181, 133, 1, 101, 120, 172, 102, 25, 132, 202, 171, 131, 167, 88, 157, 242, 114, 80, 69, 1, 7, 237, 241, 111, 39, 123, 180, 115, 39, 245, 85, 202, 123, 0, 74, 1, 28, 90, 203, 106, 219, 207, 179, 251, 2, 38, 112, 121, 201, 6, 126, 132, 224, 16, 112, 77, 241, 10, 47, 94, 51, 141, 94, 143, 210, 117, 93, 233, 186, 26, 151, 1, 19, 57, 115, 201, 242, 230, 253, 127, 148, 84, 209, 252, 211, 101, 65, 238, 63, 10, 185, 89, 145, 45, 51, 90, 123, 162, 168, 209, 222, 27, 166, 121, 26, 160, 99, 53, 205, 217, 179, 107, 39, 181, 226, 73, 189, 93, 226, 29, 127, 181, 243, 82, 184, 161, 54, 16, 99, 117, 66, 175, 155, 10, 94, 33, 95, 46, 56, 61, 71, 193, 27, 252, 168, 146, 9, 226, 233, 252, 45, 57, 14, 204, 77, 196, 233, 114, 119, 147, 101, 50, 43, 181, 140, 135, 32, 40, 215, 108, 217, 149, 229, 16, 22, 98, 248, 47, 209, 252, 152, 200, 138, 237, 71, 174, 169, 150, 17, 140, 160, 197, 50, 200, 112, 81, 98, 105, 198, 196, 99, 249, 188, 90, 130, 137, 134, 82, 95, 207, 0, 213, 47, 52, 235, 153, 42, 109, 209, 192, 149, 26, 182, 100, 179, 122, 136, 181, 234, 215, 83, 3, 139, 55, 82, 15, 119, 216, 159, 175, 28, 201, 209, 184, 52, 31, 119, 230, 180, 103, 158, 5, 237, 234, 121, 243, 41, 85, 189, 143, 82, 170, 178, 84, 182, 180, 64, 197, 53, 179, 145, 187, 48, 63, 241, 59, 238, 37, 243, 52, 30, 187, 38, 125, 215, 40, 42, 115, 214, 71, 108, 122, 146, 25, 44, 22, 165, 30, 71, 70, 155, 13, 100, 112, 93, 47, 4, 16, 35, 42, 67, 144, 241, 72, 178, 167, 13, 196, 130, 201, 154, 222, 87, 124, 15, 147, 231, 142, 63, 102, 197, 25, 81, 25, 62, 173, 181, 21, 139, 131, 101, 97, 63, 128, 71, 77, 4, 80, 210, 199, 239, 41, 85, 21, 96, 172, 228, 4, 63, 146, 175, 136, 198, 85, 36, 68, 30, 44, 11, 229, 190, 46, 26, 114, 30, 96, 123, 180, 93, 60, 17, 232, 156, 18, 87, 178, 209, 255, 109, 70, 57, 169, 205, 216, 177, 1, 28, 69, 209, 225, 33, 70, 143, 255, 114, 53, 58, 100, 105, 188, 227, 164, 20, 55, 84, 146, 110, 188, 71, 214, 202, 194, 61, 25, 6, 253, 148, 22, 227, 14, 136, 218, 90, 249, 143, 52, 84, 78, 2, 56, 177, 63, 220, 254, 237, 68, 207, 22, 205, 194, 227, 1, 12, 58, 230, 19, 164, 32, 189, 168, 195, 144, 132, 209, 205, 182, 62, 146, 163, 242, 205, 84, 238, 219, 203, 7, 60, 85, 120, 128, 216, 250, 145, 239, 151, 69, 246, 0, 74, 143, 183, 176, 64, 185, 121, 8, 183, 112, 99, 255, 31, 214, 65, 207, 51, 4, 190, 47, 118, 212, 122, 113, 222, 217, 74, 242, 194, 65, 89, 136, 226, 125, 170, 193, 231, 39, 108, 98, 33, 67, 104, 93, 225, 60, 54, 245, 31, 239, 164, 5, 100, 250, 1, 154, 146, 82, 240, 63, 173, 148, 141, 47, 138, 66, 15, 180, 144, 185, 94, 21, 129, 198, 140, 101, 55, 253, 222, 186, 236, 182, 200, 128, 151, 98, 247, 73, 229, 99, 136, 115, 87, 92, 127, 141, 157, 204, 82, 142, 20, 89, 187, 198, 223, 149, 116, 145, 169, 65, 101, 247, 103, 109, 184, 96, 225, 173, 4, 241, 155, 168, 41, 107, 108, 43, 194, 187, 231, 194, 220, 151, 121, 13, 89, 73, 50, 124, 153, 67, 249, 34, 254, 238, 229, 146, 16, 89, 200, 46, 207, 244, 43, 54, 8, 84, 203, 31, 17, 23, 50, 4, 59, 11, 97, 104, 20, 85, 101, 19, 19, 88, 134, 124, 27, 73, 21, 238, 148, 53, 106, 164, 101, 74, 188, 52, 14, 213, 142, 74, 217, 83, 205, 120, 177, 99, 73, 16, 197, 214, 169, 1, 7, 166, 5, 154, 51, 247, 132, 180, 32, 138, 127, 27, 56, 100, 243, 196, 36, 180, 67, 86, 128, 81, 225, 119, 206, 13, 6, 110, 202, 62, 93, 1, 200, 206, 19, 7, 21, 120, 234, 61, 183, 113, 20, 79, 8, 35, 143, 255, 242, 75, 162, 106, 7, 196, 181, 217, 167, 47, 58, 170, 70, 4, 182, 133, 136, 52, 169, 94, 36, 106, 140, 85, 102, 84, 39, 243, 30, 101, 252, 181, 87, 23, 229, 125, 190, 203, 166, 121, 153, 174, 80, 50, 25, 34, 184, 200, 1, 204, 96, 19, 22, 235, 125, 123, 77, 39, 14, 226, 222, 151, 58, 232, 136, 164, 172, 184, 121, 241, 190, 77, 171, 248, 135, 48, 28, 150, 114, 75, 194, 213, 224, 244, 150, 235, 70, 74, 68, 174, 73, 29, 248, 105, 247, 140, 119, 9, 18, 20, 131, 246, 247, 159, 171, 89, 103, 84, 129, 26, 115, 20, 117, 157, 68, 249, 136, 224, 19, 247, 189, 67, 215, 136, 11, 252, 244, 164, 91, 7, 25, 170, 9, 138, 69, 24, 237, 28, 47, 154, 82, 98, 190, 21, 194, 3, 95, 128, 198, 72, 186, 99, 194, 181, 239, 32, 248, 122, 211, 49, 223, 146, 191, 222, 11, 98, 176, 135, 153, 247, 105, 239, 228, 103, 102, 134, 195, 165, 215, 29, 24, 205, 43, 10, 94, 136, 99, 138, 209, 20, 167, 112, 108, 176, 91, 178, 126, 81, 25, 149, 132, 83, 216, 138, 16, 139, 42, 235, 45, 226, 97, 150, 83, 43, 133, 221, 136, 58, 54, 157, 42, 149, 47, 168, 117, 242, 249, 135, 210, 122, 33, 209, 26, 236, 245, 177, 150, 98, 147, 232, 37, 104, 1, 20, 81, 168, 58, 92, 208, 147, 244, 123, 61, 145, 146, 56, 199, 193, 8, 137, 189, 188, 68, 198, 157, 60, 31, 178, 97, 140, 178, 228, 10, 25, 98, 145, 179, 125, 239, 227, 131, 0, 3, 250, 105, 21, 171, 75, 130, 188, 139, 135, 220, 80, 15, 223, 164, 228, 80, 88, 246, 225, 76, 115, 129, 233, 207, 170, 130, 167, 73, 248, 142, 46, 12, 112, 152, 4, 89, 75, 205, 100, 141, 53, 156, 108, 0, 47, 232, 55, 80, 29, 203, 167, 18, 3, 62, 41, 164, 180, 111, 216, 126, 103, 120, 162, 17, 253, 188, 143, 93, 4, 6, 69, 216, 187, 176, 222, 242, 44, 189, 226, 205, 127, 106, 221, 17, 56, 77, 55, 160, 24, 73, 182, 25, 254, 196, 63, 114, 56, 13, 82, 20, 38, 36, 151, 86, 58, 47, 32, 15, 65, 13, 65, 99, 190, 105, 89, 156, 149, 41, 243, 90, 10, 138, 170, 45, 66, 171, 234, 225, 240, 23, 169, 109, 194, 114, 39, 55, 46, 18, 61, 156, 38, 115, 179, 95, 79, 138, 214, 152, 1, 59, 65, 86, 224, 154, 17, 29, 191, 27, 27, 183, 79, 158, 226, 155, 191, 119, 62, 205, 183, 229, 37, 35, 159, 67, 151, 62, 121, 233, 161, 79, 193, 108, 90, 40, 187, 55, 182, 135, 147, 18, 234, 202, 125, 66, 53, 150, 136, 128, 80, 34, 80, 16, 248, 217, 70, 38, 154, 82, 50, 181, 166, 90, 27, 98, 115, 53, 83, 82, 61, 18, 56, 173, 132, 35, 25, 16, 52, 162, 144, 120, 167, 244, 193, 234, 2, 177, 74, 70, 163, 211, 150, 143, 182, 163, 107, 194, 122, 143, 7, 36, 197, 47, 181, 245, 201, 234, 11, 94, 39, 200, 18, 113, 229, 94, 138, 49, 92, 88, 234, 146, 199, 109, 39, 23, 85, 211, 117, 162, 246, 52, 198, 70, 139, 109, 151, 14, 97, 73, 242, 118, 144, 17, 29, 18, 164, 236, 163, 222, 195, 248, 137, 52, 117, 29, 131, 109, 74, 156, 144, 65, 236, 176, 112, 225, 75, 53, 124, 33, 171, 140, 35, 164, 69, 38, 67, 13, 106, 129, 48, 103, 153, 75, 42, 125, 96, 200, 96, 20, 32, 44, 85, 193, 80, 253, 234, 64, 141, 9, 111, 183, 206, 26, 178, 62, 149, 197, 26, 38, 84, 37, 135, 223, 199, 224, 204, 253, 78, 180, 191, 102, 219, 179, 34, 160, 57, 42, 83, 215, 61, 23, 175, 152, 166, 152, 117, 103, 82, 220, 121, 216, 187, 108, 250, 104, 48, 231, 111, 91, 143, 1, 79, 72, 27, 143, 46, 243, 167, 220, 60, 210, 46, 121, 59, 161, 16, 4, 3, 50, 56, 177, 14, 40, 220, 37, 93, 57, 228, 50, 40, 235, 232, 205, 102, 53, 44, 29, 193, 221, 20, 188, 21, 244, 157, 201, 120, 71, 68, 34, 123, 231, 146, 115, 176, 56, 207, 204, 42, 80, 116, 105, 62, 111, 18, 121, 56, 58, 229, 163, 63, 203, 150, 22, 110, 218, 161, 39, 70, 212, 24, 179, 234, 44, 210, 146, 84, 233, 36, 58, 11, 147, 45, 253, 165, 242, 250, 22, 45, 27, 26, 30, 81, 167, 129, 166, 128, 27, 57, 244, 201, 145, 18, 212, 58, 64, 159, 212, 99, 75, 52, 49, 139, 8, 68, 162, 117, 246, 33, 134, 171, 72, 203, 54, 26, 206, 197, 75, 104, 133, 155, 20, 222, 146, 28, 190, 87, 164, 206, 81, 98, 245, 195, 219, 197, 194, 49, 34, 230, 201, 3, 38, 251, 157, 4, 178, 105, 27, 65, 44, 222, 223, 72, 122, 143, 95, 198, 252, 43, 251, 79, 123, 63, 204, 140, 165, 162, 148, 144, 130, 177, 252, 126, 14, 81, 117, 32, 55, 215, 71, 203, 26, 201, 238, 142, 246, 115, 144, 101, 72, 81, 109, 161, 144, 33, 41, 113, 46, 3, 203, 149, 65, 68, 117, 81, 117, 134, 98, 194, 88, 217, 176, 30, 113, 30, 104, 205, 93, 163, 77, 230, 30, 203, 118, 70, 34, 123, 136, 67, 151, 9, 126, 197, 204, 21, 41, 217, 90, 107, 168, 249, 211, 158, 241, 24, 201, 131, 158, 148, 242, 28, 209, 249, 102, 128, 178, 195, 107, 92, 251, 236, 217, 210, 108, 20, 225, 18, 124, 158, 225, 1, 33, 77, 20, 75, 227, 249, 95, 22, 21, 106, 100, 79, 139, 73, 77, 219, 114, 65, 149, 75, 52, 3, 175, 209, 32, 152, 184, 134, 162, 243, 26, 207, 250, 137, 248, 154, 133, 233, 20, 41, 124, 133, 115, 34, 68, 64, 254, 86, 69, 135, 10, 28, 30, 201, 174, 58, 112, 224, 208, 106, 192, 125, 202, 161, 29, 216, 81, 81, 228, 175, 127, 96, 21, 37, 102, 193, 171, 187, 145, 73, 71, 160, 52, 206, 47, 226, 142, 55, 204, 82, 32, 178, 31, 22, 64, 80, 29, 66, 18, 220, 217, 93, 92, 116, 84, 21, 129, 0, 231, 221, 30, 4, 49, 229, 64, 40, 216, 189, 42, 251, 218, 61, 119, 212, 18, 144, 128, 217, 119, 144, 135, 138, 170, 250, 187, 232, 208, 125, 88, 34, 211, 66, 99, 63, 231, 149, 97, 253, 6, 24, 197, 255, 199, 10, 47, 155, 215, 11, 216, 160, 97, 194, 50, 8, 162, 103, 111, 222, 66, 205, 247, 142, 186, 107, 194, 113, 217, 54, 124, 74, 45, 163, 206, 66, 7, 188, 77, 14, 52, 223, 141, 150, 167, 106, 68, 69, 101, 20, 34, 209, 107, 43, 160, 242, 153, 221, 4, 99, 55, 175, 0, 64, 48, 44, 233, 229, 168, 61, 52, 6, 115, 151, 134, 91, 23, 109, 158, 16, 232, 130, 21, 195, 115, 8, 128, 149, 157, 65, 89, 110, 215, 28, 185, 21, 185, 196, 27, 34, 251, 184, 212, 221, 66, 115, 132, 8, 66, 46, 246, 195, 237, 125, 101, 173, 208, 45, 146, 182, 85, 32, 190, 122, 62, 13, 1, 159, 209, 182, 33, 36, 77, 2, 166, 232, 7, 14, 115, 14, 133, 158, 50, 33, 65, 108, 131, 201, 52, 2, 38, 168, 79, 191, 113, 180, 169, 131, 119, 26, 191, 250, 29, 38, 128, 20, 85, 177, 88, 149, 116, 192, 184, 150, 3, 216, 210, 225, 214, 17, 156, 64, 120, 169, 57, 157, 101, 175, 76, 32, 123, 5, 72, 101, 142, 104, 217, 144, 68, 167, 165, 99, 238, 35, 141, 81, 231, 195, 1, 205, 96, 84, 49, 105, 5, 91, 137, 90, 124, 114, 91, 51, 240, 60, 236, 149, 94, 252, 138, 45, 252, 144, 184, 32, 200, 86, 166, 68, 144, 31, 127, 11, 195, 218, 135, 38, 105, 76, 130, 45, 245, 123, 103, 122, 178, 30, 187, 229, 33, 202, 0, 168, 79, 125, 32, 33, 64, 174, 44, 157, 90, 219, 24, 76, 252, 28, 75, 117, 15, 195, 219, 233, 6, 149, 229, 145, 4, 136, 183, 40, 41, 174, 86, 222, 196, 152, 113, 185, 109, 57, 184, 93, 194, 149, 148, 57, 192, 205, 11, 217, 49, 49, 18, 161, 204, 255, 82, 148, 88, 2, 76, 244, 13, 161, 88, 223, 79, 111, 79, 176, 64, 142, 77, 38, 10, 116, 35, 95, 85, 160, 99, 196, 7, 246, 44, 157, 186, 46, 132, 227, 248, 214, 24, 20, 135, 46, 109, 203, 60, 145, 114, 103, 18, 13, 215, 44, 140, 47, 21, 169, 205, 165, 10, 13, 148, 115, 185, 35, 48, 63, 85, 48, 81, 32, 83, 132, 45, 139, 145, 51, 110, 126, 14, 111, 37, 194, 47, 162, 195, 233, 243, 96, 60, 57, 246, 40, 45, 9, 114, 32, 247, 10, 78, 147, 173, 84, 56, 175, 20, 37, 123, 50, 135, 157, 90, 4, 110, 251, 250, 154, 65, 249, 100, 208, 85, 178, 243, 126, 202, 241, 27, 190, 205, 86, 219, 133, 233, 168, 80, 221, 121, 35, 188, 226, 5, 189, 97, 61, 23, 128, 15, 189, 59, 36, 80, 116, 111, 82, 38, 125, 152, 222, 246, 16, 246, 121, 179, 199, 126, 151, 209, 52, 90, 20, 200, 24, 161, 233, 40, 127, 202, 197, 104, 157, 28, 205, 3, 37, 179, 80, 103, 24, 170, 65, 176, 83, 133, 186, 1, 226, 202, 134, 37, 150, 35, 25, 132, 133, 119, 165, 145, 232, 59, 38, 108, 69, 238, 113, 227, 170, 76, 122, 94, 59, 39, 96, 40, 250, 15, 107, 90, 247, 38, 74, 93, 152, 150, 240, 151, 154, 216, 219, 146, 124, 145, 247, 84, 231, 72, 218, 207, 45, 211, 163, 185, 181, 68, 42, 159, 56, 147, 97, 114, 220, 4, 134, 164, 230, 242, 118, 80, 197, 113, 252, 192, 184, 76, 184, 230, 134, 148, 65, 230, 28, 212, 149, 117, 112, 180, 29, 115, 76, 108, 137, 162, 126, 33, 96, 197, 62, 183, 171, 40, 199, 171, 168, 46, 103, 113, 94, 22, 166, 89, 104, 244, 10, 52, 185, 3, 76, 34, 86, 54, 10, 39, 138, 151, 167, 200, 131, 210, 4, 45, 136, 38, 1, 113, 152, 79, 105, 96, 238, 255, 153, 103, 57, 139, 100, 128, 231, 171, 60, 220, 80, 117, 191, 137, 48, 139, 176, 86, 45, 234, 232, 92, 96, 68, 95, 16, 215, 39, 220, 51, 31, 97, 125, 155, 253, 14, 240, 248, 117, 65, 41, 39, 51, 52, 186, 38, 226, 36, 94, 127, 134, 122, 183, 84, 187, 131, 219, 214, 196, 248, 113, 235, 105, 13, 72, 238, 223, 125, 147, 118, 225, 214, 48, 169, 111, 170, 6, 148, 223, 89, 162, 103, 4, 226, 101, 140, 123, 119, 204, 249, 215, 211, 50, 38, 179, 183, 149, 142, 87, 52, 125, 31, 198, 8, 179, 24, 195, 231, 148, 47, 30, 118, 29, 243, 40, 130, 12, 206, 94, 145, 150, 121, 225, 201, 147, 35, 224, 240, 206, 93, 211, 44, 150, 199, 223, 218, 90, 185, 17, 108, 99, 140, 110, 67, 224, 206, 144, 190, 226, 82, 82, 225, 43, 128, 40, 15, 241, 225, 120, 56, 177, 98, 50, 28, 159, 232, 246, 33, 161, 196, 163, 213, 155, 164, 68, 90, 180, 97, 215, 73, 89, 78, 233, 26, 5, 95, 147, 142, 49, 149, 181, 79, 54, 202, 76, 33, 224, 244, 21, 138, 66, 161, 186, 231, 80, 155, 123, 237, 116, 203, 246, 144, 60, 225, 19, 139, 212, 221, 6, 141, 37, 130, 172, 110, 152, 43, 53, 68, 136, 199, 16, 152, 151, 58, 48, 229, 211, 96, 83, 9, 154, 101, 229, 225, 255, 141, 97, 84, 229, 101, 131, 104, 151, 244, 27, 87, 4, 242, 153, 220, 76, 84, 141, 25, 41, 93, 223, 195, 48, 21, 146, 223, 82, 30, 211, 17, 230, 197, 237, 69, 82, 169, 15, 230, 11, 5, 162, 18, 14, 9, 83, 228, 153, 220, 64, 17, 27, 124, 70, 30, 101, 228, 179, 172, 45, 244, 195, 111, 40, 19, 99, 154, 222, 251, 225, 149, 202, 32, 131, 180, 246, 146, 42, 91, 9, 20, 158, 233, 131, 152, 160, 96, 0, 11, 122, 91, 157, 163, 182, 219, 62, 132, 95, 90, 231, 104, 166, 188, 145, 125, 92, 127, 56, 39, 85, 45, 141, 159, 25, 254, 25, 210, 89, 168, 183, 50, 48, 121, 252, 234, 100, 4, 93, 108, 157, 103, 242, 226, 63, 173, 38, 234, 141, 46, 63, 83, 253, 99, 38, 46, 165, 26, 37, 140, 251, 61, 209, 201, 46, 145, 105, 26, 230, 18, 193, 140, 91, 58, 195, 83, 205, 77, 90, 37, 153, 230, 88, 67, 18, 72, 9, 186, 14, 226, 37, 243, 178, 137, 126, 231, 44, 56, 120, 55, 37, 116, 16, 24, 30, 181, 159, 96, 217, 56, 249, 86, 93, 217, 185, 32, 228, 73, 194, 24, 70, 28, 186, 0, 196, 50, 35, 92, 108, 59, 208, 60, 49, 223, 207, 39, 90, 18, 136, 189, 26, 103, 160, 12, 160, 91, 216, 186, 120, 171, 123, 169, 16, 96, 8, 91, 222, 75, 133, 45, 126, 162, 63, 44, 148, 175, 49, 160, 114, 193, 149, 38, 229, 24, 163, 9, 62, 100, 116, 140, 233, 66, 59, 221, 234, 236, 8, 186, 130, 32, 95, 232, 74, 10, 153, 67, 87, 101, 246, 156, 244, 25, 211, 251, 213, 77, 57, 98, 26, 62, 202, 122, 95, 24, 234, 84, 163, 241, 69, 112, 42, 23, 98, 145, 177, 180, 214, 100, 218, 10, 187, 59, 211, 78, 189, 153, 125, 2, 190, 99, 155, 120, 59, 139, 108, 1, 35, 208, 151, 81, 15, 95, 120, 233, 211, 40, 28, 251, 244, 94, 66, 252, 151, 93, 206, 124, 133, 167, 197, 72, 165, 73, 32, 39, 237, 95, 138, 141, 47, 56, 38, 131, 68, 151, 41, 77, 190, 61, 137, 67, 65, 66, 32, 103, 204, 178, 169, 113, 246, 109, 146, 13, 179, 184, 229, 229, 99, 148, 238, 60, 85, 154, 6, 57, 13, 176, 14, 132, 115, 183, 147, 219, 180, 110, 179, 16, 65, 14, 150, 121, 31, 73, 30, 70, 1, 132, 61, 140, 214, 53, 105, 121, 227, 138, 190, 156, 19, 167, 163, 67, 81, 150, 107, 66, 201, 200, 4, 11, 123, 169, 59, 125, 121, 24, 226, 35, 65, 112, 2, 7, 37, 98, 34, 68, 17, 171, 64, 16, 173, 27, 110, 249, 215, 180, 65, 107, 201, 48, 54, 141, 64, 33, 139, 152, 41, 15, 100, 166, 40, 15, 192, 99, 209, 179, 199, 63, 105, 123, 193, 145, 157, 200, 210, 135, 200, 32, 53, 51, 243, 13, 224, 137, 24, 140, 20, 115, 194, 69, 53, 12, 172, 97, 221, 214, 170, 65, 207, 159, 126, 144, 66, 56, 44, 152, 142, 216, 160, 90, 91, 186, 204, 101, 192, 64, 61, 218, 35, 235, 158, 38, 55, 105, 27, 143, 210, 198, 9, 52, 174, 217, 220, 6, 138, 209, 120, 84, 223, 164, 162, 176, 183, 2, 153, 171, 7, 146, 245, 85, 46, 8, 115, 86, 125, 133, 82, 148, 92, 2, 228, 170, 68, 202, 82, 69, 184, 218, 4, 199, 224, 252, 0, 1, 210, 80, 65, 50, 70, 232, 181, 12, 34, 232, 25, 137, 13, 210, 116, 40, 188, 43, 70, 63, 149, 97, 155, 115, 195, 17, 201, 167, 55, 135, 107, 5, 222, 133, 199, 188, 148, 156, 98, 39, 241, 123, 125, 126, 222, 66, 103, 99, 251, 73, 55, 198, 5, 200, 248, 201, 248, 187, 106, 211, 211, 113, 92, 103, 65, 40, 96, 147, 39, 142, 78, 221, 9, 36, 55, 45, 185, 172, 120, 106, 171, 47, 115, 70, 222, 239, 179, 69, 71, 63, 142, 130, 253, 169, 152, 238, 54, 6, 134, 178, 23, 36, 138, 179, 102, 253, 220, 155, 179, 212, 106, 251, 195, 93, 230, 158, 80, 17, 133, 208, 150, 164, 232, 134, 183, 133, 193, 129, 187, 218, 129, 145, 144, 37, 61, 201, 36, 30, 116, 244, 53, 206, 84, 69, 67, 242, 220, 179, 81, 72, 206, 55, 127, 39, 183, 210, 43, 210, 219, 196, 225, 109, 183, 241, 37, 227, 73, 248, 145, 128, 177, 246, 51, 229, 149, 205, 234, 95, 37, 156, 169, 170, 204, 29, 77, 43, 50, 107, 12, 30, 125, 89, 112, 79, 188, 173, 148, 67, 233, 172, 0, 202, 94, 251, 158, 219, 29, 246, 97, 77, 188, 47, 47, 34, 28, 209, 11, 229, 221, 141, 184, 253, 46, 253, 87, 117, 224, 229, 207, 142, 229, 221, 249, 241, 175, 94, 208, 2, 176, 14, 224, 101, 157, 28, 24, 233, 147, 41, 74, 56, 174, 77, 210, 174, 109, 223, 16, 34, 34, 202, 243, 247, 220, 69, 77, 239, 57, 191, 181, 160, 15, 227, 241, 74, 191, 203, 143, 175, 77, 4, 190, 197, 15, 50, 9, 7, 17, 236, 130, 1, 83, 79, 238, 49, 96, 175, 144, 23, 92, 117, 251, 248, 194, 90, 95, 99, 75, 208, 18, 49, 223, 116, 162, 53, 87, 175, 253, 87, 135, 99, 121, 185, 40, 240, 42, 11, 42, 164, 145, 88, 209, 11, 12, 70, 58, 145, 215, 146, 247, 239, 20, 173, 111, 101, 80, 184, 12, 60, 13, 146, 129, 78, 38, 214, 130, 182, 33, 122, 129, 199, 124, 193, 131, 21, 175, 33, 47, 245, 238, 206, 155, 35, 246, 121, 231, 62, 204, 57, 99, 165, 221, 234, 32, 3, 22, 157, 154, 7, 134, 180, 139, 70, 126, 60, 94, 40, 79, 72, 217, 99, 252, 206, 181, 66, 186, 14, 1, 121, 116, 241, 226, 244, 105, 116, 165, 118, 224, 167, 87, 223, 204, 156, 103, 218, 148, 137, 180, 157, 57, 104, 120, 232, 102, 127, 10, 162, 179, 14, 181, 189, 12, 223, 52, 170, 0, 237, 4, 140, 194, 221, 247, 182, 26, 234, 102, 220, 161, 247, 150, 79, 147, 205, 25, 76, 142, 91, 112, 134, 120, 77, 84, 160, 191, 197, 213, 130, 177, 177, 7, 100, 144, 47, 243, 74, 216, 135, 132, 0, 252, 52, 192, 165, 120, 76, 20, 222, 77, 160, 122, 92, 149, 1, 97, 107, 179, 85, 21, 243, 41, 100, 182, 83, 94, 144, 220, 17, 60, 112, 189, 107, 241, 134, 246, 175, 181, 80, 179, 154, 82, 173, 96, 67, 103, 110, 60, 226, 66, 1, 55, 79, 105, 78, 186, 208, 7, 240, 26, 255, 80, 49, 66, 19, 180, 220, 74, 74, 75, 147, 131, 173, 135, 69, 236, 175, 175, 36, 74, 168, 23, 20, 236, 2, 3, 218, 32, 147, 78, 222, 89, 147, 20, 70, 147, 110, 4, 61, 12, 202, 206, 248, 147, 86, 24, 88, 26, 70, 220, 106, 170, 59, 105, 146, 58, 141, 58, 218, 204, 66, 140, 169, 139, 191, 5, 21, 203, 214, 18, 103, 55, 100, 16, 76, 152, 45, 59, 131, 8, 235, 3, 61, 198, 127, 162, 88, 126, 134, 22, 173, 106, 3, 153, 189, 40, 11, 59, 129, 248, 246, 95, 198, 106, 220, 82, 95, 226, 76, 186, 64, 67, 143, 33, 234, 104, 184, 149, 24, 10, 213, 118, 112, 250, 83, 121, 128, 20, 165, 36, 108, 82, 34, 96, 214, 1, 106, 0, 174, 236, 177, 211, 23, 137, 123, 247, 236, 241, 152, 51, 170, 232, 156, 100, 251, 32, 64, 13, 255, 220, 103, 68, 115, 247, 111, 163, 57, 11, 7, 236, 247, 53, 39, 35, 24, 159, 111, 39, 74, 91, 70, 125, 188, 58, 148, 245, 51, 78, 66, 23, 27, 35, 152, 92, 204, 40, 210, 253, 222, 112, 160, 103, 202, 82, 194, 78, 209, 83, 68, 85, 69, 92, 216, 122, 127, 15, 158, 164, 27, 143, 161, 19, 107, 7, 190, 0, 79, 116, 231, 167, 44, 86, 91, 58, 244, 21, 220, 134, 63, 221, 132, 59, 15, 92, 146, 124, 69, 135, 20, 201, 242, 82, 23, 91, 216, 246, 159, 1, 109, 107, 98, 161, 78, 215, 248, 130, 16, 113, 158, 232, 118, 200, 242, 194, 196, 160, 71, 44, 166, 138, 197, 38, 127, 100, 117, 4, 33, 60, 86, 97, 221, 240, 245, 52, 197, 24, 243, 225, 201, 123, 39, 11, 218, 117, 248, 238, 63, 17, 207, 213, 245, 255, 94, 164, 90, 73, 162, 75, 192, 197, 7, 113, 153, 192, 76, 176, 196, 87, 178, 40, 39, 32, 87, 148, 58, 71, 222, 82, 207, 151, 125, 40, 187, 212, 32, 146, 230, 190, 103, 26, 244, 1, 61, 61, 251, 68, 89, 115, 246, 3, 225, 241, 20, 128, 237, 1, 184, 203, 36, 4, 148, 235, 232, 83, 219, 115, 60, 188, 50, 0, 58, 148, 25, 232, 157, 75, 50, 103, 228, 240, 84, 207, 64, 183, 211, 50, 124, 215, 225, 223, 129, 59, 13, 69, 23, 73, 160, 118, 109, 247, 242, 114, 56, 251, 92, 249, 22, 165, 99, 221, 136, 0, 0, 36, 242, 164, 163, 22, 3, 225, 59, 109, 214, 36, 3, 39, 237, 3, 85, 24, 111, 197, 183, 0, 152, 94, 130, 120, 108, 206, 179, 20, 63, 45, 180, 76, 91, 150, 111, 206, 156, 108, 195, 159, 235, 203, 160, 116, 217, 220, 195, 241, 104, 62, 111, 58, 236, 223, 169, 120, 19, 14, 158, 102, 87, 115, 216, 23, 133, 102, 165, 9, 220, 54, 116, 132, 188, 111, 96, 2, 49, 14, 144, 160, 86, 60, 108, 224, 252, 202, 224, 239, 191, 145, 142, 35, 41, 127, 252, 130, 93, 175, 213, 17, 59, 248, 190, 24, 8, 42, 69, 239, 41, 43, 180, 243, 195, 127, 114, 19, 126, 5, 75, 223, 244, 170, 180, 37, 5, 207, 144, 170, 230, 68, 143, 0, 180, 147, 125, 239, 243, 178, 97, 103, 117, 202, 24, 194, 15, 215, 111, 194, 208, 145, 234, 10, 121, 120, 49, 150, 29, 246, 79, 174, 9, 117, 98, 87, 182, 84, 189, 73, 196, 246, 134, 29, 138, 161, 238, 27, 90, 153, 118, 110, 194, 184, 147, 77, 173, 109, 204, 49, 209, 137, 101, 59, 68, 244, 172, 6, 87, 71, 203, 174, 13, 126, 175, 59, 202, 47, 190, 254, 173, 233, 193, 255, 55, 212, 35, 246, 182, 60, 51, 71, 25, 154, 183, 236, 10, 44, 57, 52, 158, 126, 235, 97, 147, 146, 144, 149, 73, 72, 103, 91, 107, 202, 53, 150, 245, 176, 181, 177, 221, 218, 67, 122, 197, 155, 166, 92, 212, 171, 21, 184, 160, 219, 154, 36, 143, 77, 139, 203, 9, 184, 45, 114, 125, 201, 82, 33, 136, 49, 5, 172, 61, 233, 8, 219, 159, 249, 205, 47, 51, 109, 194, 71, 231, 132, 155, 111, 243, 178, 51, 198, 250, 185, 220, 119, 89, 172, 109, 132, 139, 136, 174, 11, 155, 63, 191, 14, 174, 33, 76, 10, 250, 115, 19, 232, 103, 63, 238, 45, 173, 252, 48, 144, 79, 53, 131, 67, 222, 128, 76, 92, 161, 102, 241, 66, 177, 7, 142, 74, 54, 240, 200, 189, 198, 70, 54, 153, 250, 144, 193, 237, 142, 123, 144, 65, 207, 56, 116, 175, 236, 250, 16, 98, 80, 148, 187, 84, 188, 117, 23, 232, 216, 184, 98, 79, 250, 131, 135, 53, 200, 4, 43, 214, 121, 63, 201, 93, 222, 212, 201, 202, 228, 141, 228, 205, 120, 83, 221, 122, 81, 32, 71, 100, 32, 126, 206, 68, 66, 29, 138, 124, 117, 252, 118, 234, 176, 206, 69, 51, 138, 222, 155, 64, 103, 171, 248, 234, 93, 69, 195, 154, 24, 83, 0, 177, 30, 225, 82, 64, 130, 184, 124, 14, 136, 163, 22, 72, 8, 140, 61, 124, 255, 159, 120, 58, 33, 40, 204, 144, 198, 198, 58, 241, 14, 183, 89, 60, 193, 0, 134, 224, 28, 222, 204, 244, 16, 249, 250, 19, 143, 149, 227, 38, 26, 163, 79, 87, 82, 65, 24, 190, 148, 162, 226, 39, 124, 109, 170, 66, 15, 162, 23, 27, 210, 0, 241, 176, 123, 1, 150, 126, 203, 223, 249, 111, 147, 136, 127, 193, 127, 59, 100, 71, 26, 182, 31, 161, 253, 177, 210, 82, 20, 58, 101, 254, 197, 49, 87, 42, 240, 183, 177, 49, 191, 53, 27, 47, 242, 118, 167, 96, 223, 11, 111, 183, 218, 41, 0, 133, 181, 63, 178, 243, 171, 121, 247, 167, 141, 38, 3, 234, 121, 187, 254, 205, 67, 59, 129, 82, 120, 140, 51, 124, 228, 229, 67, 247, 26, 98, 102, 114, 184, 96, 6, 192, 166, 164, 121, 74, 148, 93, 57, 123, 120, 137, 161, 165, 170, 183, 125, 230, 0, 239, 44, 164, 49, 21, 139, 197, 169, 99, 29, 232, 124, 17, 200, 87, 216, 255, 250, 93, 5, 167, 194, 100, 74, 18, 250, 139, 172, 204, 12, 45, 108, 155, 222, 147, 61, 89, 47, 232, 240, 130, 255, 190, 13, 164, 208, 103, 2, 103, 13, 253, 253, 131, 53, 62, 28, 140, 204, 46, 187, 217, 24, 140, 151, 172, 71, 103, 222, 0, 199, 170, 234, 120, 89, 39, 26, 43, 54, 148, 41, 179, 36, 202, 22, 159, 185, 182, 225, 147, 120, 88, 130, 175, 18, 48, 203, 120, 156, 178, 17, 81, 13, 12, 141, 137, 172, 108, 115, 97, 213, 166, 244, 44, 195, 196, 236, 148, 198, 205, 145, 4, 137, 238, 140, 188, 77, 171, 104, 217, 44, 205, 73, 213, 12, 161, 146, 172, 236, 195, 139, 77, 106, 161, 33, 44, 144, 170, 18, 79, 175, 244, 0, 134, 97, 48, 17, 242, 145, 97, 143, 135, 194, 53, 89, 240, 65, 104, 144, 125, 99, 214, 236, 35, 145, 217, 181, 83, 186, 71, 102, 221, 46, 205, 195, 173, 11, 251, 126, 94, 70, 135, 245, 39, 14, 74, 201, 252, 88, 184, 254, 75, 9, 161, 197, 233, 228, 129, 37, 88, 150, 208, 56, 132, 4, 192, 10, 138, 0, 1, 250, 244, 137, 161, 23, 25, 196, 134, 63, 62, 207, 230, 82, 231, 254, 60, 131, 141, 81, 218, 112, 16, 191, 197, 237, 153, 27, 177, 37, 142, 178, 86, 192, 24, 3, 178, 9, 73, 149, 204, 113, 70, 52, 148, 16, 3, 85, 24, 225, 237, 154, 131, 29, 69, 195, 47, 3, 110, 32, 86, 163, 220, 76, 220, 128, 94, 142, 43, 35, 29, 62, 110, 231, 174, 214, 144, 18, 33, 230, 247, 99, 95, 227, 30, 46, 40, 147, 139, 6, 152, 177, 83, 202, 225, 43, 7, 124, 93, 38, 249, 123, 214, 50, 136, 167, 78, 147, 2, 106, 97, 82, 102, 198, 46, 151, 248, 211, 188, 114, 153, 90, 137, 97, 199, 232, 16, 52, 150, 177, 66, 110, 45, 178, 185, 238, 99, 24, 209, 0, 51, 142, 244, 153, 143, 65, 50, 221, 92, 184, 165, 218, 128, 141, 130, 63, 35, 119, 147, 227, 231, 239, 7, 65, 110, 108, 223, 87, 71, 43, 139, 4, 19, 153, 54, 232, 52, 131, 217, 146, 102, 225, 44, 2, 113, 26, 140, 75, 69, 51, 235, 133, 39, 107, 168, 133, 26, 30, 117, 17, 131, 92, 35, 65, 137, 52, 38, 33, 38, 78, 103, 79, 49, 33, 185, 145, 11, 169, 89, 214, 223, 29, 174, 106, 97, 96, 107, 84, 121, 63, 12, 16, 79, 118, 71, 145, 251, 193, 135, 233, 62, 103, 140, 247, 77, 236, 238, 95, 49, 14, 115, 99, 75, 37, 131, 175, 109, 148, 251, 90, 155, 120, 109, 76, 244, 176, 18, 137, 6, 67, 130, 111, 204, 49, 83, 85, 100, 209, 8, 254, 120, 206, 35, 217, 139, 181, 91, 81, 107, 20, 49, 25, 92, 115, 221, 198, 185, 238, 194, 35, 186, 86, 162, 241, 69, 133, 35, 4, 76, 90, 39, 114, 46, 199, 108, 39, 82, 172, 236, 204, 144, 209, 74, 207, 65, 197, 35, 239, 100, 11, 145, 111, 220, 137, 135, 244, 30, 28, 232, 235, 225, 38, 156, 38, 233, 178, 227, 169, 220, 76, 3, 182, 119, 62, 248, 194, 226, 200, 83, 190, 179, 112, 219, 49, 42, 119, 244, 232, 254, 228, 0, 79, 208, 17, 35, 53, 5, 128, 213, 182, 220, 212, 204, 171, 73, 47, 12, 76, 42, 183, 143, 226, 30, 131, 33, 11, 128, 132, 48, 40, 37, 68, 36, 239, 11, 235, 6, 25, 235, 12, 100, 60, 84, 40, 160, 192, 210, 132, 106, 71, 121, 82, 225, 166, 66, 109, 229, 131, 109, 56, 220, 196, 45, 210, 51, 30, 6, 45, 175, 247, 9, 52, 112, 183, 153, 206, 93, 19, 17, 127, 171, 89, 125, 156, 23, 135, 18, 66, 132, 160, 52, 51, 156, 133, 143, 153, 54, 5, 35, 111, 3, 77, 13, 249, 252, 113, 19, 96, 92, 15, 162, 177, 199, 125, 253, 187, 103, 5, 181, 18, 128, 213, 91, 243, 243, 224, 74, 96, 245, 73, 96, 85, 129, 150, 240, 75, 217, 241, 113, 171, 3, 174, 82, 83, 102, 72, 135, 233, 85, 220, 31, 31, 40, 168, 13, 152, 79, 195, 67, 109, 222, 242, 62, 182, 86, 216, 21, 44, 200, 34, 91, 38, 170, 138, 129, 31, 168, 181, 103, 242, 226, 16, 171, 251, 28, 93, 156, 45, 167, 67, 168, 151, 58, 22, 83, 43, 33, 31, 69, 217, 211, 88, 152, 77, 39, 230, 235, 132, 108, 53, 188, 33, 26, 158, 198, 113, 58, 3, 139, 71, 213, 41, 213, 128, 66, 102, 101, 52, 129, 48, 125, 53, 223, 226, 193, 33, 108, 160, 203, 150, 55, 70, 16, 225, 199, 237, 157, 15, 3, 33, 46, 242, 87, 112, 231, 85, 132, 25, 49, 116, 121, 20, 221, 205, 201, 121, 163, 153, 34, 199, 115, 99, 132, 115, 85, 120, 211, 124, 184, 197, 92, 233, 250, 94, 103, 39, 109, 148, 159, 215, 90, 107, 28, 218, 152, 46, 181, 32, 3, 115, 152, 120, 42, 33, 52, 104, 60, 151, 104, 107, 245, 238, 54, 19, 163, 118, 142, 171, 200, 239, 167, 127, 206, 54, 70, 212, 82, 97, 75, 217, 193, 105, 127, 33, 144, 172, 114, 9, 234, 89, 95, 13, 26, 129, 94, 225, 5, 106, 166, 15, 74, 205, 171, 228, 196, 1, 228, 127, 191, 64, 29, 241, 164, 83, 216, 254, 8, 25, 131, 32, 51, 186, 179, 29, 38, 241, 25, 74, 91, 246, 251, 132, 65, 85, 142, 94, 81, 191, 108, 122, 5, 180, 102, 132, 53, 6, 215, 242, 75, 249, 37, 190, 76, 62, 23, 112, 47, 208, 51, 139, 219, 14, 170, 96, 103, 21, 192, 83, 71, 44, 31, 21, 159, 173, 167, 30, 10, 125, 18, 224, 18, 90, 76, 24, 247, 56, 210, 93, 37, 202, 194, 78, 162, 159, 143, 251, 201, 240, 45, 140, 41, 43, 145, 98, 12, 246, 189, 125, 94, 102, 223, 229, 90, 69, 212, 252, 63, 90, 181, 43, 189, 55, 97, 88, 228, 124, 186, 67, 62, 179, 229, 204, 175, 113, 41, 255, 45, 193, 58, 1, 126, 82, 76, 250, 139, 242, 107, 215, 79, 110, 87, 100, 240, 206, 161, 250, 14, 223, 2, 156, 65, 206, 13, 13, 229, 196, 250, 89, 207, 104, 165, 55, 161, 38, 65, 73, 241, 95, 219, 119, 192, 185, 220, 219, 77, 36, 169, 0, 44, 115, 228, 226, 86, 124, 140, 81, 134, 242, 1, 27, 101, 161, 10, 155, 142, 237, 228, 182, 137, 102, 99, 167, 236, 37, 57, 242, 30, 45, 108, 227, 124, 173, 41, 14, 141, 16, 169, 9, 253, 245, 64, 7, 38, 97, 34, 218, 149, 174, 58, 205, 53, 13, 161, 73, 207, 82, 83, 95, 211, 189, 42, 52, 96, 239, 174, 126, 141, 2, 117, 98, 247, 99, 134, 178, 72, 95, 152, 139, 166, 242, 69, 95, 98, 251, 80, 122, 79, 88, 150, 165, 173, 31, 117, 155, 212, 111, 165, 26, 138, 58, 214, 107, 14, 107, 63, 33, 230, 90, 116, 22, 116, 115, 5, 211, 118, 194, 208, 218, 231, 163, 109, 31, 217, 85, 144, 127, 38, 177, 122, 220, 245, 89, 39, 205, 1, 53, 135, 106, 96, 193, 36, 0, 27, 151, 6, 228, 72, 212, 36, 2, 131, 80, 221, 168, 204, 68, 94, 238, 40, 68, 51, 150, 96, 77, 241, 217, 20, 152, 247, 248, 140, 83, 248, 55, 33, 231, 74, 83, 34, 2, 141, 162, 186, 6, 134, 88, 0, 31, 240, 56, 178, 140, 166, 172, 7, 100, 135, 22, 247, 212, 224, 4, 71, 189, 156, 98, 44, 67, 110, 10, 101, 132, 107, 180, 47, 44, 39, 145, 97, 108, 46, 107, 113, 171, 130, 119, 37, 211, 21, 204, 79, 249, 158, 33, 235, 130, 124, 43, 126, 185, 118, 234, 93, 38, 92, 227, 215, 17, 248, 246, 205, 24, 2, 128, 123, 166, 173, 200, 48, 218, 152, 141, 229, 89, 199, 229, 191, 27, 226, 166, 74, 217, 115, 215, 77, 198, 13, 248, 6, 129, 149, 192, 170, 156, 125, 44, 178, 172, 205, 253, 147, 41, 117, 8, 72, 130, 144, 57, 63, 200, 234, 253, 209, 113, 173, 212, 126, 216, 147, 255, 69, 92, 33, 193, 222, 2, 208, 148, 161, 138, 75, 82, 49, 158, 85, 70, 180, 30, 149, 174, 32, 172, 131, 225, 241, 35, 111, 143, 164, 25, 250, 16, 4, 116, 69, 77, 103, 43, 121, 62, 145, 200, 49, 138, 208, 21, 11, 178, 59, 163, 143, 64, 131, 253, 241, 185, 137, 181, 119, 255, 13, 19, 228, 51, 111, 168, 181, 56, 211, 19, 33, 3, 5, 48, 103, 8, 144, 3, 57, 33, 98, 84, 140, 248, 195, 14, 42, 192, 156, 24, 188, 99, 69, 214, 35, 29, 234, 124, 64, 27, 158, 153, 138, 158, 147, 235, 178, 39, 139, 238, 112, 65, 33, 62, 97, 58, 201, 162, 12, 97, 94, 99, 234, 14, 145, 226, 55, 156, 34, 252, 37, 149, 64, 46, 202, 223, 105, 83, 22, 198, 62, 164, 200, 5, 167, 49, 190, 47, 103, 220, 61, 23, 231, 243, 160, 209, 95, 229, 238, 190, 102, 114, 166, 96, 107, 139, 232, 178, 214, 166, 0, 23, 110, 87, 67, 116, 254, 251, 62, 89, 221, 15, 67, 115, 53, 2, 250, 91, 203, 27, 38, 108, 106, 138, 53, 150, 101, 225, 214, 39, 171, 65, 77, 66, 187, 63, 71, 217, 26, 238, 106, 43, 132, 106, 85, 45, 182, 214, 110, 238, 8, 182, 184, 122, 7, 11, 108, 166, 120, 76, 236, 64, 175, 111, 70, 129, 70, 75, 119, 97, 5, 171, 198, 54, 213, 219, 138, 214, 144, 140, 4, 1, 67, 64, 188, 66, 224, 158, 134, 138, 3, 41, 112, 90, 22, 76, 137, 217, 62, 160, 17, 132, 94, 113, 241, 65, 90, 114, 234, 45, 132, 26, 73, 238, 39, 165, 123, 232, 51, 229, 106, 172, 12, 157, 98, 215, 142, 195, 172, 113, 93, 132, 61, 84, 176, 69, 28, 94, 217, 168, 1, 190, 108, 26, 156, 10, 215, 205, 208, 241, 118, 18, 227, 33, 12, 80, 179, 152, 168, 29, 169, 123, 20, 181, 1, 137, 136, 3, 83, 248, 43, 126, 17, 36, 130, 84, 204, 63, 164, 43, 209, 134, 247, 171, 254, 195, 32, 50, 83, 32, 17, 173, 25, 15, 180, 60, 73, 123, 46, 161, 173, 94, 5, 149, 81, 234, 57, 194, 233, 148, 207, 127, 25, 34, 97, 196, 177, 93, 198, 172, 236, 60, 185, 94, 54, 139, 81, 114, 166, 17, 82, 80, 56, 175, 223, 10, 116, 196, 64, 122, 241, 38, 203, 123, 182, 113, 23, 48, 44, 127, 35, 167, 186, 216, 113, 218, 97, 200, 196, 121, 150, 32, 222, 190, 209, 171, 169, 49, 239, 164, 94, 4, 79, 232, 205, 81, 158, 239, 165, 183, 37, 31, 241, 12, 58, 14, 153, 104, 39, 186, 81, 132, 46, 247, 178, 79, 128, 1, 183, 152, 56, 112, 137, 248, 97, 106, 226, 237, 83, 3, 126, 35, 15, 221, 209, 76, 16, 84, 28, 229, 119, 60, 61, 209, 253, 199, 162, 200, 111, 89, 46, 117, 76, 225, 254, 178, 76, 217, 158, 134, 217, 124, 241, 101, 170, 88, 182, 28, 215, 82, 138, 75, 143, 148, 151, 232, 176, 10, 211, 144, 161, 7, 35, 243, 198, 79, 118, 42, 194, 50, 97, 130, 166, 127, 186, 43, 125, 233, 228, 245, 177, 187, 192, 187, 31, 145, 229, 143, 240, 15, 8, 110, 153, 231, 164, 159, 200, 22, 202, 30, 232, 50, 100, 27, 157, 233, 112, 24, 196, 15, 16, 17, 87, 19, 5, 4, 19, 129, 242, 14, 202, 246, 204, 95, 191, 74, 203, 194, 255, 154, 47, 231, 25, 96, 56, 37, 229, 202, 4, 178, 69, 162, 68, 182, 196, 23, 52, 3, 90, 144, 2, 23, 212, 97, 141, 17, 187, 85, 244, 82, 64, 134, 114, 38, 157, 12, 217, 132, 64, 119, 211, 89, 99, 106, 180, 166, 229, 163, 23, 131, 94, 200, 233, 1, 116, 252, 104, 194, 24, 107, 81, 34, 22, 236, 1, 214, 127, 93, 251, 131, 31, 237, 141, 255, 51, 37, 56, 103, 118, 126, 50, 143, 77, 76, 242, 80, 180, 94, 148, 218, 163, 251, 90, 18, 146, 60, 80, 170, 70, 84, 207, 224, 160, 14, 82, 42, 161, 176, 73, 0, 131, 255, 173, 64, 120, 25, 4, 198, 40, 11, 42, 181, 180, 207, 218, 220, 15, 225, 209, 87, 195, 255, 24, 178, 233, 199, 215, 166, 58, 231, 18, 219, 136, 157, 204, 55, 229, 5, 99, 20, 161, 44, 209, 17, 29, 192, 114, 138, 105, 93, 232, 137, 20, 148, 192, 52, 177, 116, 235, 194, 186, 57, 111, 186, 152, 146, 78, 190, 36, 55, 2, 8, 26, 38, 145, 19, 160, 34, 247, 99, 139, 228, 41, 32, 63, 163, 179, 17, 108, 212, 199, 148, 116, 119, 233, 89, 72, 190, 180, 146, 59, 243, 196, 233, 77, 226, 214, 228, 69, 65, 2, 230, 166, 244, 2, 88, 117, 136, 142, 111, 66, 123, 73, 4, 173, 215, 71, 96, 41, 115, 162, 238, 55, 104, 53, 195, 74, 45, 63, 91, 159, 117, 209, 88, 11, 102, 135, 97, 103, 230, 12, 168, 241, 76, 13, 229, 175, 124, 245, 127, 91, 217, 155, 113, 164, 217, 153, 153, 137, 63, 228, 230, 141, 188, 185, 147, 22, 3, 21, 196, 93, 227, 200, 247, 11, 45, 83, 2, 5, 172, 36, 72, 105, 91, 37, 12, 197, 145, 113, 74, 124, 168, 210, 24, 9, 16, 191, 126, 118, 147, 150, 171, 127, 171, 193, 210, 20, 44, 41, 57, 151, 157, 201, 131, 150, 176, 252, 113, 36, 186, 135, 0, 148, 20, 182, 196, 245, 165, 37, 193, 66, 65, 117, 82, 35, 212, 75, 91, 254, 98, 152, 171, 111, 244, 229, 133, 70, 110, 164, 87, 71, 18, 87, 232, 66, 204, 155, 152, 32, 60, 152, 213, 79, 77, 175, 1, 245, 75, 11, 239, 2, 134, 73, 187, 133, 124, 47, 186, 217, 248, 157, 202, 15, 40, 177, 112, 182, 45, 147, 238, 138, 224, 133, 177, 11, 213, 144, 53, 80, 226, 97, 181, 232, 17, 203, 80, 189, 74, 210, 62, 241, 130, 198, 142, 184, 10, 96, 164, 100, 109, 191, 220, 181, 243, 235, 90, 90, 105, 203, 39, 119, 163, 235, 60, 233, 71, 215, 74, 127, 95, 178, 94, 167, 53, 35, 223, 56, 153, 130, 117, 223, 75, 186, 165, 171, 208, 212, 1, 227, 171, 22, 201, 135, 104, 86, 12, 164, 171, 191, 73, 204, 82, 196, 216, 189, 190, 126, 134, 249, 81, 152, 25, 42, 204, 222, 14, 8, 105, 209, 142, 171, 176, 56, 157, 44, 193, 113, 81, 156, 186, 26, 74, 26, 169, 8, 240, 13, 9, 100, 69, 91, 21, 233, 17, 204, 129, 39, 208, 11, 54, 160, 192, 2, 56, 162, 154, 243, 174, 170, 106, 16, 128, 83, 117, 175, 204, 191, 170, 32, 25, 108, 10, 226, 102, 188, 1, 157, 11, 13, 250, 160, 76, 161, 28, 246, 202, 86, 207, 176, 96, 44, 168, 68, 243, 106, 161, 149, 187, 175, 182, 19, 228, 180, 26, 110, 227, 93, 71, 66, 71, 117, 139, 42, 74, 164, 222, 163, 37, 240, 102, 82, 105, 7, 123, 69, 57, 19, 46, 228, 80, 185, 202, 16, 117, 241, 101, 230, 153, 39, 211, 76, 236, 34, 156, 187, 250, 91, 103, 71, 77, 156, 162, 158, 97, 248, 137, 183, 38, 51, 87, 82, 30, 175, 208, 82, 69, 72, 114, 155, 144, 96, 33, 144, 157, 145, 182, 92, 12, 94, 56, 243, 196, 154, 158, 0, 182, 210, 81, 125, 35, 144, 188, 146, 92, 22, 148, 139, 48, 127, 42, 63, 50, 255, 225, 117, 248, 33, 99, 146, 196, 130, 11, 238, 5, 26, 114, 1, 250, 250, 221, 156, 195, 19, 56, 183, 48, 136, 48, 12, 120, 204, 21, 131, 7, 65, 228, 135, 205, 177, 128, 37, 31, 8, 144, 130, 192, 132, 179, 92, 184, 155, 186, 215, 6, 110, 144, 139, 191, 151, 122, 4, 191, 58, 137, 139, 61, 90, 242, 176, 82, 138, 207, 250, 77, 228, 235, 208, 174, 206, 113, 157, 134, 127, 24, 219, 164, 210, 115, 184, 148, 67, 219, 12, 205, 127, 169, 26, 165, 124, 180, 41, 83, 194, 224, 200, 24, 88, 72, 217, 153, 202, 54, 106, 51, 243, 135, 230, 218, 220, 19, 99, 86, 134, 106, 86, 156, 50, 142, 41, 146, 88, 103, 250, 232, 84, 56, 215, 233, 16, 57, 194, 202, 239, 231, 178, 241, 177, 104, 2, 155, 54, 29, 218, 159, 26, 213, 151, 84, 150, 60, 101, 37, 144, 62, 178, 14, 32, 96, 137, 132, 95, 25, 178, 15, 252, 90, 42, 177, 165, 29, 107, 172, 145, 98, 69, 156, 45, 32, 224, 26, 130, 196, 15, 17, 94, 154, 86, 37, 50, 76, 231, 213, 120, 7, 177, 249, 134, 9, 22, 58, 219, 152, 235, 14, 31, 30, 11, 151, 11, 99, 60, 243, 124, 148, 204, 46, 108, 141, 6, 10, 208, 181, 206, 53, 75, 90, 58, 150, 199, 92, 149, 22, 57, 8, 152, 82, 41, 171, 150, 121, 182, 168, 248, 185, 237, 143, 232, 216, 220, 208, 219, 233, 61, 74, 1, 24, 228, 0, 41, 165, 129, 120, 29, 164, 67, 66, 95, 82, 172, 113, 20, 244, 226, 140, 122, 212, 227, 149, 86, 44, 159, 244, 212, 145, 202, 176, 26, 133, 121, 9, 44, 197, 51, 227, 47, 166, 78, 116, 163, 28, 36, 120, 10, 28, 217, 77, 97, 81, 23, 83, 194, 214, 22, 143, 37, 3, 143, 201, 88, 19, 200, 104, 79, 0, 12, 215, 136, 236, 97, 1, 91, 213, 175, 67, 237, 121, 145, 73, 51, 57, 144, 198, 22, 2, 100, 37, 210, 118, 225, 165, 220, 20, 74, 68, 28, 177, 54, 110, 120, 110, 160, 186, 58, 181, 165, 169, 32, 207, 85, 195, 72, 178, 187, 235, 176, 140, 4, 231, 100, 179, 49, 70, 124, 205, 165, 61, 193, 225, 30, 66, 58, 177, 170, 52, 237, 62, 172, 190, 127, 251, 6, 34, 191, 72, 120, 74, 152, 9, 20, 118, 35, 114, 22, 50, 193, 222, 163, 195, 119, 39, 64, 214, 186, 176, 123, 122, 76, 55, 77, 148, 127, 69, 205, 113, 122, 0, 127, 189, 189, 61, 48, 206, 35, 237, 25, 134, 80, 72, 163, 217, 204, 193, 196, 220, 14, 243, 55, 100, 246, 97, 184, 77, 141, 162, 112, 228, 129, 21, 145, 155, 137, 173, 201, 231, 196, 182, 166, 134, 31, 191, 65, 157, 65, 207, 144, 194, 247, 240, 94, 26, 232, 218, 87, 115, 190, 95, 165, 146, 204, 61, 197, 169, 212, 203, 60, 172, 181, 189, 169, 187, 171, 162, 198, 0, 227, 247, 224, 53, 20, 2, 81, 30, 202, 242, 236, 72, 243, 109, 76, 255, 8, 168, 20, 78, 1, 128, 9, 40, 17, 31, 209, 120, 190, 36, 108, 148, 216, 196, 198, 168, 141, 32, 77, 99, 237, 163, 74, 105, 99, 36, 160, 143, 250, 182, 204, 20, 135, 6, 165, 216, 36, 153, 68, 39, 203, 185, 64, 208, 14, 65, 3, 7, 128, 60, 83, 197, 179, 111, 167, 126, 113, 192, 156, 18, 101, 159, 233, 228, 112, 217, 79, 56, 110, 89, 162, 158, 149, 201, 228, 70, 216, 234, 183, 82, 78, 229, 30, 84, 55, 144, 73, 243, 215, 109, 69, 228, 49, 251, 82, 196, 128, 13, 56, 96, 172, 212, 220, 195, 140, 252, 108, 138, 149, 140, 114, 223, 49, 211, 13, 195, 234, 161, 180, 120, 228, 202, 92, 132, 124, 152, 47, 30, 228, 85, 18, 163, 10, 209, 196, 151, 10, 147, 213, 143, 78, 28, 254, 20, 21, 31, 175, 129, 25, 53, 104, 237, 217, 222, 172, 3, 179, 148, 32, 34, 115, 204, 153, 187, 91, 63, 52, 143, 53, 150, 80, 43, 249, 64, 159, 127, 87, 176, 59, 87, 150, 118, 108, 254, 49, 33, 79, 41, 1, 18, 129, 142, 204, 29, 125, 94, 185, 9, 22, 109, 156, 184, 25, 128, 182, 96, 167, 198, 126, 39, 180, 123, 216, 150, 184, 61, 115, 152, 222, 75, 42, 65, 230, 165, 61, 44, 144, 55, 17, 234, 174, 0, 164, 191, 228, 20, 246, 108, 37, 128, 209, 114, 227, 42, 49, 128, 148, 151, 197, 69, 197, 140, 39, 112, 65, 84, 233, 192, 8, 187, 0, 11, 83, 44, 153, 70, 102, 255, 101, 187, 98, 89, 112, 252, 107, 116, 60, 222, 85, 8, 131, 100, 225, 57, 209, 94, 81, 147, 101, 132, 247, 188, 75, 89, 132, 112, 201, 140, 238, 62, 160, 191, 236, 49, 173, 57, 24, 178, 195, 150, 112, 216, 165, 86, 251, 1, 206, 119, 74, 175, 219, 191, 56, 251, 37, 71, 51, 54, 152, 230, 98, 4, 63, 64, 18, 193, 24, 15, 47, 52, 192, 18, 146, 206, 75, 133, 235, 109, 56, 180, 203, 226, 142, 162, 219, 64, 58, 244, 20, 199, 169, 177, 221, 95, 61, 6, 225, 62, 39, 83, 209, 68, 59, 99, 242, 137, 170, 128, 225, 20, 157, 114, 167, 237, 5, 236, 211, 180, 190, 204, 125, 125, 9, 184, 96, 156, 217, 205, 207, 66, 236, 159, 46, 176, 208, 147, 169, 211, 219, 188, 184, 195, 21, 202, 64, 201, 180, 174, 224, 80, 58, 220, 32, 115, 239, 123, 216, 130, 205, 246, 99, 93, 112, 32, 157, 185, 138, 232, 186, 38, 101, 85, 93, 133, 154, 50, 100, 122, 149, 31, 76, 200, 149, 140, 31, 2, 215, 249, 108, 56, 170, 197, 95, 202, 47, 79, 201, 37, 83, 112, 164, 19, 114, 106, 2, 88, 132, 238, 86, 24, 75, 108, 145, 189, 193, 186, 128, 238, 37, 137, 79, 145, 39, 188, 119, 23, 215, 159, 212, 111, 32, 15, 199, 200, 35, 167, 120, 28, 122, 32, 82, 16, 171, 12, 32, 56, 84, 179, 17, 1, 45, 31, 63, 135, 94, 191, 6, 115, 104, 20, 138, 148, 213, 39, 68, 30, 161, 162, 230, 242, 114, 200, 28, 48, 141, 177, 248, 142, 27, 14, 239, 87, 4, 6, 61, 92, 38, 161, 151, 60, 199, 44, 148, 9, 246, 139, 165, 5, 167, 86, 77, 134, 130, 66, 213, 35, 163, 16, 45, 31, 159, 150, 188, 218, 227, 82, 50, 30, 22, 155, 94, 57, 240, 177, 18, 22, 37, 163, 23, 105, 244, 147, 105, 45, 252, 243, 181, 9, 240, 221, 64, 188, 190, 205, 211, 186, 137, 139, 100, 10, 160, 184, 250, 126, 59, 226, 45, 181, 239, 172, 75, 0, 69, 209, 230, 195, 249, 246, 228, 36, 10, 2, 31, 152, 124, 67, 231, 73, 88, 49, 157, 71, 7, 128, 46, 218, 207, 68, 159, 162, 9, 231, 202, 54, 78, 76, 234, 236, 236, 16, 9, 7, 79, 104, 66, 150, 230, 74, 129, 88, 100, 232, 186, 44, 220, 214, 39, 10, 188, 34, 181, 2, 228, 133, 136, 203, 232, 78, 146, 0, 244, 164, 244, 11, 135, 101, 147, 63, 223, 163, 220, 46, 46, 90, 143, 125, 143, 148, 73, 152, 165, 72, 43, 103, 65, 199, 224, 4, 158, 137, 97, 21, 95, 165, 111, 144, 240, 12, 13, 28, 108, 84, 55, 164, 145, 211, 26, 123, 35, 57, 55, 71, 106, 86, 86, 48, 104, 37, 86, 33, 59, 99, 172, 190, 32, 220, 245, 104, 154, 191, 215, 235, 95, 131, 164, 154, 161, 204, 171, 35, 62, 125, 104, 219, 67, 95, 51, 90, 98, 144, 202, 13, 16, 157, 106, 15, 135, 254, 191, 19, 85, 102, 232, 149, 76, 183, 227, 19, 60, 96, 143, 249, 108, 123, 246, 132, 198, 245, 6, 253, 80, 146, 198, 157, 202, 87, 176, 184, 185, 89, 206, 62, 173, 10, 181, 73, 29, 129, 243, 50, 245, 111, 115, 101, 106, 166, 238, 171, 157, 71, 17, 152, 172, 58, 226, 102, 72, 33, 137, 54, 62, 69, 170, 135, 235, 89, 150, 23, 73, 30, 253, 90, 244, 8, 19, 17, 230, 235, 237, 71, 44, 91, 112, 110, 146, 225, 103, 242, 40, 108, 96, 255, 238, 120, 6, 175, 71, 108, 78, 174, 208, 184, 39, 137, 159, 78, 11, 3, 242, 21, 197, 52, 149, 218, 150, 111, 134, 232, 57, 100, 215, 92, 40, 53, 196, 246, 26, 245, 246, 244, 152, 214, 21, 27, 1, 164, 114, 3, 242, 66, 255, 213, 144, 33, 37, 41, 0, 80, 69, 114, 124, 178, 65, 228, 28, 34, 3, 119, 61, 238, 161, 204, 159, 101, 164, 86, 83, 33, 24, 86, 244, 108, 159, 227, 29, 118, 47, 153, 118, 88, 45, 101, 202, 64, 69, 16, 232, 26, 76, 14, 230, 167, 250, 109, 112, 6, 211, 82, 154, 139, 182, 255, 249, 199, 139, 47, 72, 38, 2, 87, 106, 227, 25, 14, 33, 51, 130, 115, 23, 11, 98, 181, 179, 97, 140, 178, 5, 185, 242, 97, 235, 35, 235, 139, 158, 251, 80, 192, 117, 206, 240, 40, 204, 16, 203, 237, 30, 19, 246, 101, 189, 229, 245, 19, 47, 134, 192, 223, 238, 184, 2, 80, 91, 81, 35, 141, 129, 87, 193, 51, 236, 61, 227, 16, 126, 95, 107, 98, 180, 70, 239, 69, 236, 157, 42, 22, 214, 237, 198, 4, 214, 135, 60, 10, 19, 1, 117, 137, 154, 62, 225, 90, 211, 82, 87, 49, 166, 76, 223, 233, 153, 131, 184, 25, 152, 97, 54, 117, 43, 59, 200, 57, 224, 5, 173, 39, 111, 66, 99, 158, 152, 92, 98, 34, 189, 15, 191, 130, 82, 155, 248, 159, 211, 8, 254, 161, 244, 185, 237, 35, 83, 246, 135, 182, 76, 5, 238, 195, 175, 62, 17, 178, 73, 135, 173, 70, 124, 157, 166, 224, 184, 203, 86, 35, 44, 76, 42, 103, 220, 165, 148, 38, 163, 131, 129, 95, 76, 162, 82, 13, 16, 109, 16, 214, 33, 115, 135, 48, 56, 184, 33, 147, 226, 92, 110, 130, 246, 3, 134, 89, 96, 99, 66, 96, 127, 89, 93, 25, 154, 227, 15, 19, 158, 115, 108, 210, 220, 203, 97, 147, 223, 146, 246, 64, 248, 25, 183, 174, 167, 133, 142, 252, 180, 216, 98, 192, 149, 14, 156, 136, 218, 34, 142, 212, 62, 61, 235, 239, 18, 10, 211, 104, 159, 153, 90, 26, 34, 144, 194, 232, 249, 10, 205, 220, 99, 106, 129, 56, 124, 223, 195, 243, 48, 23, 73, 253, 229, 0, 199, 62, 171, 187, 210, 154, 26, 36, 239, 39, 210, 150, 169, 119, 114, 230, 89, 156, 17, 253, 5, 51, 141, 227, 152, 52, 34, 250, 66, 214, 24, 72, 88, 209, 154, 73, 131, 181, 35, 191, 176, 100, 90, 236, 168, 181, 249, 190, 112, 154, 119, 156, 118, 80, 223, 25, 88, 107, 96, 107, 28, 234, 160, 51, 71, 165, 127, 80, 198, 7, 25, 78, 112, 230, 211, 121, 142, 0, 13, 68, 90, 105, 42, 164, 44, 102, 28, 133, 159, 211, 182, 132, 104, 112, 36, 28, 239, 29, 143, 36, 174, 98, 114, 178, 43, 29, 246, 125, 157, 103, 89, 161, 225, 21, 71, 181, 207, 193, 252, 176, 28, 28, 82, 142, 214, 77, 49, 29, 119, 135, 80, 35, 104, 216, 60, 160, 91, 135, 192, 82, 23, 231, 205, 223, 81, 241, 79, 89, 115, 163, 161, 49, 143, 152, 111, 110, 37, 70, 15, 240, 38, 197, 170, 218, 91, 17, 98, 66, 19, 171, 57, 123, 194, 205, 73, 129, 229, 188, 8, 236, 40, 156, 146, 21, 108, 233, 20, 238, 128, 66, 155, 40, 115, 65, 72, 10, 90, 63, 110, 196, 79, 42, 251, 90, 241, 48, 95, 158, 111, 57, 50, 235, 125, 2, 212, 130, 205, 12, 2, 104, 26, 13, 164, 60, 176, 91, 129, 94, 61, 14, 102, 214, 239, 235, 19, 71, 86, 161, 34, 141, 206, 30, 123, 140, 106, 137, 151, 122, 189, 167, 89, 208, 59, 230, 44, 65, 105, 147, 47, 119, 180, 73, 221, 248, 145, 132, 43, 115, 22, 47, 247, 67, 48, 121, 123, 183, 150, 182, 220, 220, 1, 166, 122, 7, 26, 157, 193, 1, 143, 154, 84, 97, 189, 109, 255, 27, 91, 211, 95, 191, 110, 70, 234, 26, 135, 191, 195, 219, 19, 209, 24, 191, 199, 116, 10, 67, 135, 245, 243, 241, 235, 136, 61, 197, 189, 215, 157, 42, 225, 38, 210, 139, 85, 194, 236, 77, 52, 211, 119, 11, 160, 185, 164, 69, 39, 146, 128, 19, 73, 115, 184, 127, 37, 129, 175, 103, 11, 164, 39, 51, 218, 180, 213, 189, 181, 94, 242, 145, 53, 78, 96, 47, 170, 36, 117, 177, 119, 96, 8, 12, 225, 27, 173, 227, 37, 171, 76, 38, 88, 238, 184, 213, 233, 230, 132, 45, 63, 180, 4, 0, 67, 47, 251, 236, 146, 219, 35, 211, 234, 23, 237, 12, 178, 199, 39, 207, 66, 41, 125, 232, 69, 202, 67, 223, 94, 108, 156, 21, 111, 120, 22, 249, 247, 19, 131, 25, 201, 185, 25, 210, 239, 227, 132, 194, 52, 223, 114, 133, 179, 254, 7, 140, 202, 233, 88, 164, 252, 217, 78, 202, 50, 228, 65, 82, 48, 129, 34, 75, 183, 255, 203, 186, 37, 82, 77, 190, 8, 101, 150, 53, 78, 251, 120, 30, 60, 148, 65, 195, 254, 118, 229, 177, 250, 25, 19, 224, 221, 166, 123, 76, 95, 54, 14, 210, 137, 128, 40, 230, 236, 76, 101, 248, 171, 5, 208, 141, 205, 248, 67, 163, 23, 253, 49, 89, 69, 154, 164, 83, 156, 251, 0, 240, 70, 145, 221, 122, 167, 203, 45, 60, 181, 211, 135, 49, 82, 63, 162, 213, 243, 15, 12, 103, 137, 98, 176, 31, 160, 45, 103, 43, 47, 107, 214, 116, 102, 21, 138, 29, 213, 133, 197, 94, 113, 132, 80, 218, 144, 5, 11, 20, 232, 74, 205, 55, 47, 8, 64, 65, 76, 235, 146, 112, 67, 57, 133, 178, 118, 161, 226, 211, 44, 156, 181, 183, 218, 161, 222, 34, 68, 221, 163, 144, 134, 219, 253, 208, 116, 91, 80, 252, 238, 63, 37, 231, 105, 74, 195, 122, 180, 149, 232, 31, 198, 144, 203, 30, 193, 179, 33, 94, 49, 46, 75, 139, 52, 160, 2, 37, 125, 209, 222, 241, 201, 212, 101, 21, 20, 21, 116, 127, 36, 5, 240, 135, 120, 211, 163, 70, 26, 33, 135, 154, 230, 64, 49, 8, 158, 133, 190, 59, 205, 161, 105, 52, 115, 60, 34, 83, 110, 254, 156, 190, 87, 127, 166, 38, 174, 43, 108, 77, 183, 183, 175, 217, 211, 114, 210, 150, 68, 184, 104, 16, 73, 50, 146, 79, 250, 229, 16, 71, 155, 126, 190, 225, 5, 171, 255, 119, 248, 16, 239, 245, 32, 253, 112, 63, 214, 85, 249, 208, 9, 139, 219, 33, 67, 12, 195, 64, 63, 251, 21, 28, 33, 124, 243, 213, 129, 250, 200, 112, 65, 155, 153, 193, 78, 93, 115, 165, 40, 16, 252, 19, 9, 78, 216, 82, 101, 146, 112, 7, 2, 65, 226, 122, 104, 229, 77, 226, 93, 175, 105, 184, 255, 210, 254, 248, 27, 182, 127, 49, 171, 250, 151, 20, 24, 165, 104, 86, 38, 29, 150, 237, 233, 99, 69, 64, 3, 6, 147, 57, 212, 167, 210, 149, 214, 74, 106, 160, 204, 0, 249, 101, 55, 255, 198, 169, 105, 56, 159, 246, 132, 151, 44, 146, 214, 144, 120, 122, 217, 62, 104, 119, 210, 159, 31, 36, 241, 226, 153, 168, 89, 145, 75, 92, 42, 181, 168, 242, 190, 192, 12, 143, 249, 1, ];

@khuey
Copy link
Contributor Author

khuey commented Sep 13, 2024

Is it possible that there is a regression in this part of rustc?

Nightly uses lld, while stable/beta use the system linker which is usually ld.bfd.

@KillingSpark
Copy link

Yeah no I f'ed up getting the right sample sorry about that. I have a sample now that shows a diff between my libary and what zstd decodes. I'll report back when I know more...

@khuey
Copy link
Contributor Author

khuey commented Sep 13, 2024

I think there's something wrong with the streaming part of the decoder.

khuey@zhadum:~/dev/backtrace-rs$ ~/dev/ruzstd/target/debug/zstd -d bad.debug-info -c > bad.ruzstd-out    File: bad.debug-info
100 % done
Decoded frames: 4  bytes: 4073553
No checksums to test
khuey@zhadum:~/dev/backtrace-rs$ ~/dev/ruzstd/target/debug/zstd_stream -d bad.debug-info -c > bad.ruzstd-out-stream
File: bad.debug-info
khuey@zhadum:~/dev/backtrace-rs$ ls -al bad.ruzstd-out*
-rw-rw-r-- 1 khuey khuey 4073553 Sep 13 07:22 bad.ruzstd-out
-rw-rw-r-- 1 khuey khuey 1048576 Sep 13 07:22 bad.ruzstd-out-stream

@KillingSpark
Copy link

Yeah the issue is just that the meta info is broken up into multiple frames for some reason...

@KillingSpark
Copy link

KillingSpark commented Sep 13, 2024

This seems to fix it:

fn decompress_zstd(input: &[u8], output: &mut [u8]) -> Option<()> {
    use ruzstd::io::Read;

    let mut input = input;
    let mut output = output;

    while !input.is_empty() {
        let mut decoder = ruzstd::StreamingDecoder::new(&mut input).ok()?;
        loop {
            match decoder.read(output) {
                Err(_) => return None,
                Ok(0) => break,
                Ok(read) => output = &mut output[read..],
            }
        }
    }

    assert!(output.is_empty());

    Some(())
}

This multi-frame thing has been an issue a few times. But I am not a big fan of silently decoding multiple frames with just one call. Maybe I need to rethink my position on this it seems more widespread than I thought.

Edit: To be fair, this is documented on the StreamingDecoder ;)

@khuey
Copy link
Contributor Author

khuey commented Sep 13, 2024

lld chunks the data into 1MB frames for parallel compression so almost
everything will have multiple frames.
@KillingSpark
Copy link

While you're at it you might want to handle skippable frames too (as mentioned in the doc). This will return an ReadFrameHeaderError::SkipFrame telling you the magic number and how many bytes to skip. I guess if multiple frames are allowed in one elf section then a skippable frame is probably allowed too.

@khuey
Copy link
Contributor Author

khuey commented Sep 13, 2024

@workingjubilee The binary size thing seems misconfigured or messed up or something. It's trying to build LLVM and it says "Detected LLVM as non-available: running in CI and modified LLVM in this change"

@khuey
Copy link
Contributor Author

khuey commented Sep 13, 2024

While you're at it you might want to handle skippable frames too (as mentioned in the doc). This will return an ReadFrameHeaderError::SkipFrame telling you the magic number and how many bytes to skip. I guess if multiple frames are allowed in one elf section then a skippable frame is probably allowed too.

May as well handle them while we're here I suppose. Done.

@khuey
Copy link
Contributor Author

khuey commented Sep 13, 2024

Edit: To be fair, this is documented on the StreamingDecoder ;)

Indeed it is. I suppose the idea is that StreamingDecoder is the equivalent of ZSTD_decompressStream. It is a bit surprising that there's no out-of-the-box equivalent to ZSTD_decompress(). Nevertheless what we have now works, so I'm satisfied. Thanks again for all your help on this stuff.

@KillingSpark
Copy link

No problem! I'm exited to get more usage out of the crate.

I do see the problem with not meeting the expectations the original implementation builds. But I also disagree deeply with endlessly decoding from a source. I'll have to think about this as it has become an issue more than once

@workingjubilee
Copy link
Member

@workingjubilee The binary size thing seems misconfigured or messed up or something. It's trying to build LLVM and it says "Detected LLVM as non-available: running in CI and modified LLVM in this change"

Yeah don't worry about the binary size workflow. I might try to hit it with a wrench a few times to see if I can get it working before merging this, but I won't block this on it. Just gotta review the revised implementation and then it's in assuming nothing jumps out.

Copy link
Member

@workingjubilee workingjubilee left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, not going to block this on that workflow, as I said.

while !input.is_empty() {
let mut decoder = match ruzstd::StreamingDecoder::new(&mut input) {
Ok(decoder) => decoder,
Err(FrameDecoderError::ReadFrameHeaderError(ReadFrameHeaderError::SkipFrame {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mmmmmmm... that sure is a pattern that is being matched...

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Indeed.

@workingjubilee workingjubilee merged commit 4f3acf7 into rust-lang:master Sep 15, 2024
84 of 88 checks passed
@khuey
Copy link
Contributor Author

khuey commented Sep 15, 2024

Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants