Forum Rule: Always post complete source code & details to reproduce any issue!
Results 1 to 15 of 15

Thread: Arduino Music Player on Teensy Audio Shield

  1. #1

    Arduino Music Player on Teensy Audio Shield

    Ported my Arduino Music Player to the Teensy Audio Shield.



    You can download the project at: https://github.com/JarkkoPFC/arduino-music-player

    Cheers, Jarkko

  2. #2
    Junior Member
    Join Date
    Jan 2017
    Posts
    18
    This is so awesome, great work!

  3. #3
    Thanks!

    Added also stereo support


  4. #4
    Senior Member
    Join Date
    Dec 2013
    Posts
    238
    Hi Jarkko
    I just want to let you know I've been playing with your pmf player for two days and I am extremely impressed.
    Only issue I'm having right now is that I cannot get ILI9341 TFT display and the player work together on Teensy 4.

  5. #5
    Hey thanks Chris! Incidentally I worked on ILI9341 based visualizer for the project, currently running on Teensy 3.6, but I'm about to port it to Teensy 4 I think it should be quite straightforward, just make sure you don't have conflicting pins with the audio board and the TFT display. But I let you know on this thread what I find.


  6. #6
    Senior Member+ MichaelMeissner's Avatar
    Join Date
    Nov 2012
    Location
    Ayer Massachussetts
    Posts
    3,368
    Quote Originally Posted by JarkkoL View Post
    Hey thanks Chris! Incidentally I worked on ILI9341 based visualizer for the project, currently running on Teensy 3.6, but I'm about to port it to Teensy 4 I think it should be quite straightforward, just make sure you don't have conflicting pins with the audio board and the TFT display. But I let you know on this thread what I find.
    Note, the pinout for the audio shield is completely different for the Teensy 4 than it is for the Teensy 3.x processors. Without doing a lot of rewiring between the audio board mounted separately and the Teensy 4.0, etc. you will need to use the revision D audio board for the Teensy 4.0 and revisions A-C of the audio board for Teensy 3.x.

    I replied to two threads giving the available pins after mounting the audio boards:


    During the Teensy 4.0 beta, Paul built this breakout board to convert revision A-C audio boards for use with the Teensy 4.0. However, I suspect now that the revision D audio board is available, it is a lot easier to use that than to build this converter board (note PJRC.COM is NOT selling this board, they are just making the plans/gerber files available if you want to make one):


    Also if you use the _t3 libraries, the Teensy 4.0 doesn't have the special CS and DC pins that sped things up for the 3.x processors (well pin 10 is special for the SPI CS pin, but that is used by the audio shield, and in practice I haven't seen a slowdown when I switched from using pin 10 to pin 22).

  7. #7
    Ported the TFT visualizer to Teensy 4, which seems to work fine even when using hardware CS pin for the TFT. The audio shield uses the hardware CS pin for SD card so it doesn't conflict with the player audio playback.


  8. #8
    Senior Member
    Join Date
    Dec 2013
    Posts
    238
    @ MichaelMeissner and JarkkoL.
    Thanks both of you I could not reply sooner because of power outages after snow storm ‘Ezekiel’ in the Poconos USA.

    @ MichaelMeissner
    Yeah I'm not sure what my issues are yet Perhaps it's pin configuration conflict, will look into it may be today. Thanks

    @ JarkkoL.
    This looks impressive on Teensy 4.0, I am actually not running Teensy audio board just using the AudioOutputI2S and Adafruit I2S 3W Class D Amplifier Breakout - MAX98357A.
    One more thing I'm also running Teensy 4.0 SDIO microSD card with SdFat-beta ver.2 library.

  9. #9
    Senior Member
    Join Date
    Dec 2013
    Posts
    238
    Hi Jarkko.
    If it's not too much to ask can you explain the first few bytes of the data structure created with PMF converter.
    I'm not sure about the data marked in the red:

    0x70 0x6d 0x66 0x78 - ASCII (p f m x<--? )
    0x00 0x14 yellow = (PMF v1.4) <--?

    EDIT: oops correct placement for data size
    0x98 0x23 0x00 0x00 green = 32bit data size, HEX 00002398‬ -- DEC 9112 bytes.


    Code:
    // Song name: aryx (aryx.s3m)
    //    Length: 42
    //  Channels: 12
    //      Size: 9112 bytes
    //  Exporter: PMF Converter v0.6 (PMF v1.4)
    
    0x70, 0x6d, 0x66, 0x78, 0x00, 0x14, 0x00, 0x00, 0x98, 0x23, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0xe8, 0x00, 0x00, 0x00, 0xe8, 0x00, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00, 0x02, 0x5f, 0x1c, 0x00, 0x00, 0x6b, 0x2a, 0x00, 0x0c, 0x0c, 0x00, 0x08, 0x03, 0x02, 0x04, 0x04, 0x05, 0x05, 0x06, 0x06, 0x08, 0x09, 0x0a, 0x0b, 0x00, 0x01, 0x00, 0x01, 0x07, 0x05, 0x07, 0x05, 0x06, 0x06, 0x0a, 0x0b, 0x0a, 0x0b, 0x08, 0x09, 0x08, 0x09, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x07, 0x06, 0x06, 0x06, 0xc4, 0x4c, 0xc4, 0x4c, 0xc4, 0x4c, 0xc4, 0x4c, 0xc4, 0x4c, 0xc4, 0x4c, 0x00, 0x00, 0x85, 0x0f, 0x00, 0x00, 0xae, 0x00, 0x00, 0x00, 0xa7, 0x00, 0x00, 0x80, 0x76, 0x0e, 0x00, 0xff, 0x34, 0x10, 0x00, 0x00, 0xad, 0x00, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x80, 0x84, 0x0e, 0x00, 0xff, 0xe2, 0x10, 0x00, 0x00, 0x69, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xdc, 0xfd, 0x00, 0xff, 0x4c, 0x14, 0x00, 0x00, 0xb6, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xfa, 0x00, 0x00, 0xb4, 0x03, 0x18, 0x00, 0x00, 0xb2, 0x03, 0x00, 0x00, 0xab, 0x03, 0x00, 0x80, 0xb2, 0x04, 0x00, 0xc8, 0xb6, 0x1b, 0x00, 0x00, 0xae, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xbe, 0xfa, 0x00, 0xc8, 0x65, 0x1f, 0x00, 0x00, 0x84, 0x03, 0x00, 0x00, 0x7a, 0x03, 0x00, 0x80, 0x65, 0x08, 0x00, 0xff, 0xea, 0x22, 0x00, 0x00, 0xad, 0x00, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x80, 0x66, 0x0e, 0x00, 0xa0, 0x3f, 0x00, 0x20, 0x02, 0x5c, 0x02, 0x98, 0x02, 0xd5, 0x02, 0x12, 0x03, 0x61, 0x03, 0xb3, 0x03, 0xff, 0x03, 0x2b, 0x04, 0x7f, 0x04, 0xd3, 0x04, 
    0xdf, 0x04, 0x3f, 0x00, 0xeb, 0x04, 0x2a, 0x05, 0x69, 0x05, 0xa9, 0x05, 0xe9, 0x05, 0x61, 0x03, 0xb3, 0x03, 0xff, 0x03, 0x38, 0x06, 0x8c, 0x06, 0xe0, 0x06, 0xec, 0x06, 0x3f, 0x00, 0xf8, 0x06, 0x0f, 0x07, 0x26, 0x07, 0x32, 0x07, 0x3f, 0x07, 0x68, 0x07, 0x90, 0x07, 0xb4, 0x07, 0xcd, 0x07, 0xe6, 0x07, 0x23, 0x08, 0x5f, 0x08, 0x3f, 0x00, 0x9b, 0x08, 0xd7, 0x08, 0x13, 0x09, 0x2c, 0x09, 0x47, 0x09, 0x6b, 0x09, 0x8f, 0x09, 0xa3, 0x09, 0xb6, 0x09, 0xb6, 0x09, 0xb6, 0x09, 0xb6, 0x09, 0x3f, 0x00, 0xc0, 0x09, 0xd7, 0x09, 0x26, 0x07, 0x32, 0x07, 0xee, 0x09, 0x61, 0x03, 0xb6, 0x09, 0xff, 0x03, 0xb6, 0x09, 0xb6, 0x09, 0x01, 0x0a, 0x18, 0x0a, 0x3f, 0x00, 0x2f, 0x0a, 0xc0, 0x09, 0x71, 0x0a, 0x88, 0x0a, 0xa1, 0x0a, 0x61, 0x03, 0xd8, 0x0a, 0xff, 0x03, 0x24, 0x0b, 0x76, 0x0b, 0x01, 0x0a, 0x18, 0x0a, 0x3f, 0x00, 0x2f, 0x0a, 0xb6, 0x09, 0xc8, 0x0b, 0xc8, 0x0b, 0xa1, 0x0a, 0x61, 0x03, 0xb3, 0x03, 0xff, 0x03, 0x24, 0x0b, 0x76, 0x0b, 0x01, 0x0a, 0x18, 0x0a, 0x3f, 0x00, 0x2f, 0x0a, 0xdc, 0x0b, 0x00, 0x0c, 0x0b, 0x0c, 0xee, 0x09, 0x61, 0x03, 0xb3, 0x03, 0xff, 0x03, 0x24, 0x0b, 0x76, 0x0b, 0x01, 0x0a, 0x18, 0x0a, 0x3f, 0x00, 0x18, 0x0c, 0x54, 0x0c, 0x90, 0x0c, 0xcc, 0x0c, 0x08, 0x0d, 0x43, 0x0d, 0x57, 0x0d, 0x72, 0x0d, 0x8c, 0x0d, 0xa6, 0x0d, 0xd0, 0x0d, 0xeb, 0x0d, 0x3f, 0x00, 0x06, 0x0e, 0x45, 0x0e, 0x84, 0x0e, 0xc4, 0x0e, 0x04, 0x0f, 0xb6, 0x09, 0xb6, 0x09, 0xb6, 0x09, 0xb6, 0x09, 0xb6, 0x09, 0xb6, 0x09, 0xb6, 0x09, 0x3f, 0x00, 0x18, 0x0c, 0x54, 0x0c, 0x98, 0x02, 0xd5, 0x02, 0x44, 0x0f, 0x61, 0x03, 0xee, 0x09, 0xff, 0x03, 0xb6, 0x09, 
    0xb6, 0x09, 0xb6, 0x09, 0xb6, 0x09, 0x3f, 0x00, 0x06, 0x0e, 0x45, 0x0e, 0x84, 0x0e, 0xc4, 0x0e, 0x04, 0x0f, 0x61, 0x03, 0xee, 0x09, 0xff, 0x03, 0xb6, 0x09, 0xb6, 0x09, 0xb6, 0x09, 0xb6, 0x09, 0xd6, 0x00, 0x0f, 0xa0, 0x10, 0x52, 0x04, 0xe0, 0x30, 0x8a, 0x09, 0xa8, 0x90, 0x21, 0x92, 0x36, 0x88, 0x43, 0x24, 0x2d, 0x0c, 0x79, 0x14, 0xc3, 0x3e, 0x26, 0x05, 0x54, 0xc8, 0x0f, 0x61, 0x17, 0xc3, 0xa7, 0x80, 0x0a, 0x99, 0x51, 0x4c, 0x40, 0x85, 0x18, 0xf1, 0x84, 0x44, 0x34, 0xe2, 0x69, 0x67, 0xf8, 0xa3, 0x18, 0x0e, 0xf2, 0x29, 0xa0, 0x42, 0x86, 0x38, 0x03, 0xd6, 0x00, 0x2f, 0xa0, 0x10, 0x52, 0x04, 0xe0, 0x30, 0x8a, 0x09, 0xa8, 0x90, 0x21, 0x92, 0x36, 0x88, 0x43, 0x24, 0x2d, 0x0c, 0x79, 0x14, 0xc3, 0x3e, 0x26, 0x05, 0x54, 0xc8, 0x0f, 0x61, 0x17, 0xc3, 0xa7, 0x80, 0x0a, 0x99, 0x51, 0x4c, 0x40, 0x85, 0x18, 0xf1, 0x84, 0x44, 0x34, 0xe2, 0x69, 0x67, 0xf8, 0xa3, 0x18, 0x0e, 0xf2, 0x29, 0xa0, 0x42, 0x86, 0x38, 0x03, 0x16, 0x81, 0xd2, 0xc1, 0x30, 0xb0, 0x28, 0xcc, 0x15, 0xd1, 0x3c, 0x26, 0x39, 0x8c, 0xe2, 0x2e, 0x6c, 0x88, 0xa4, 0x88, 0x0e, 0xf2, 0x90, 0x49, 0x0e, 0x63, 0x1e, 0xc5, 0x51, 0x98, 0x0f, 0x49, 0x11, 0xfd, 0x63, 0x98, 0xc5, 0x51, 0xd8, 0x29, 0xa2, 0x67, 0x14, 0x77, 0x61, 0x46, 0x3c, 0x21, 0x11, 0x8d, 0x78, 0x8a, 0xe8, 0x19, 0xff, 0x28, 0x8e, 0xc2, 0x82, 0x78, 0x02, 0x16, 0x81, 0xd2, 0xc1, 0x10, 0xb0, 0x28, 0xcc, 0x15, 0xd1, 0x3c, 0x26, 0x39, 0x8c, 0xe2, 0x2e, 0x6c, 0x88, 0xa4, 0x88, 0x0e, 0xf2, 0x90, 0x49, 0x0e, 0x63, 0x1e, 0xc5, 0x51, 0x98, 0x0f, 0x49, 0x11, 0xfd, 0x63, 0x98, 0xc5, 0x51, 0xd8, 0x29, 0xa2, 0x67, 0x14, 
    0x77, 0x61, 0x46, 0x3c, 0x21, 0x11, 0x8d, 0x78, 0x8a, 0xe8, 0x19, 0xff, 0x28, 0x8e, 0xc2, 0x82, 0x78, 0x02, 0xd6, 0xc0, 0x50, 0xe8, 0xc0, 0x05, 0x80, 0x11, 0x3c, 0xd5, 0x11, 0x5d, 0x40, 0x1d, 0xf1, 0x82, 0x06, 0x86, 0x42, 0x67, 0xa4, 0x80, 0x86, 0xd1, 0xdd, 0x9d, 0x0d, 0x83, 0x99, 0x14, 0x50, 0x67, 0x41, 0x1c, 0x22, 0xa9, 0x98, 0x61, 0xcc, 0xa3, 0x3b, 0x3a, 0xf3, 0x15, 0x32, 0x9c, 0x14, 0x50, 0x67, 0x3f, 0x84, 0xdd, 0x5d, 0x21, 0xc3, 0xce, 0x4e, 0x01, 0x3d, 0xa3, 0xbb, 0x3b, 0x33, 0x16, 0x32, 0xfc, 0xc4, 0x44, 0x36, 0xf2, 0xc9, 0xe1, 0x33, 0xfe, 0xd1, 0x1d, 0x9d, 0x05, 0x01, 0xd6, 0x80, 0x50, 0xa0, 0x83, 0x21, 0x21, 0x44, 0x40, 0x04, 0xb2, 0x37, 0xb5, 0xd2, 0x0c, 0xd1, 0x08, 0x11, 0x10, 0x81, 0xec, 0x4d, 0xad, 0x34, 0x43, 0x34, 0x42, 0x04, 0x44, 0x20, 0x7b, 0x53, 0x2b, 0xcd, 0x10, 0x8d, 0x10, 0x01, 0x11, 0xc8, 0xde, 0xd4, 0x4a, 0x33, 0x44, 0x23, 0x44, 0x40, 0x04, 0xb2, 0x37, 0xb5, 0xd2, 0x0c, 0xd1, 0x08, 0x11, 0x10, 0x81, 0xec, 0x4d, 0xad, 0x34, 0x43, 0x34, 0x42, 0x04, 0x44, 0x20, 0x7b, 0x53, 0x2b, 0xcd, 0x10, 0x8d, 0x10, 0x01, 0x11, 0xc8, 0xde, 0xd4, 0x0a, 0xd6, 0xc3, 0xb1, 0x58, 0x5a, 0x80, 0x38, 0x90, 0x06, 0x20, 0x4a, 0x03, 0x07, 0x82, 0x21, 0x0e, 0xae, 0x03, 0x88, 0xf3, 0x42, 0x87, 0x97, 0x16, 0x60, 0xa4, 0x01, 0x88, 0xd2, 0xc0, 0x81, 0x60, 0x88, 0x83, 0xeb, 0x00, 0xe2, 0xbc, 0xd0, 0xe1, 0xa5, 0x05, 0x18, 0x69, 0x00, 0xa2, 0x34, 0x70, 0x20, 0x18, 0xe2, 0xe0, 0x3a, 0x80, 0x38, 0x2f, 0x74, 0x78, 0x69, 0x01, 0x46, 0x1a, 0x80, 0x28, 0x0d, 0x1c, 0x08, 0x86, 0x38, 0xb8, 0x0e, 0x20, 0xca, 0x0b, 0x1d, 0x00, 0xd6, 
    0x80, 0x72, 0x20, 0x0a, 0x8a, 0x60, 0x58, 0x61, 0x8f, 0x51, 0x56, 0x98, 0x42, 0x82, 0x22, 0x0a, 0x0f, 0x15, 0xcc, 0x08, 0x86, 0x3d, 0x46, 0x91, 0x29, 0x64, 0x85, 0x3d, 0x46, 0x59, 0x61, 0x0a, 0x09, 0x8a, 0x28, 0x3c, 0x54, 0x30, 0x23, 0x18, 0xf6, 0x18, 0x05, 0xd6, 0x00, 0x0c, 0x88, 0x40, 0x09, 0x24, 0xa0, 0x23, 0xa0, 0x62, 0xf0, 0xc6, 0x63, 0x25, 0x90, 0x08, 0x28, 0x51, 0x95, 0x50, 0x46, 0x21, 0xa0, 0x18, 0xbd, 0x88, 0x02, 0xd9, 0x8d, 0x80, 0x8a, 0x79, 0x25, 0x90, 0x88, 0x22, 0x40, 0x0f, 0x34, 0xa2, 0x18, 0xbd, 0x08, 0x94, 0x42, 0x66, 0x01, 0x05, 0xb2, 0x11, 0x50, 0x31, 0x7a, 0x2b, 0x81, 0x44, 0x40, 0x89, 0xaa, 0x04, 0x1a, 0x50, 0x8c, 0x5e, 0x44, 0x81, 0xec, 0x46, 0x40, 0xc5, 0xbc, 0x12, 0x48, 0x44, 0x11, 0xa0, 0x07, 0x1a, 0x51, 0x8c, 0x5e, 0x04, 0x0a, 0xd6, 0x00, 0x2c, 0x88, 0x40, 0x09, 0x24, 0xa0, 0x23, 0xa0, 0x62, 0xf0, 0xc6, 0x63, 0x25, 0x90, 0x08, 0x28, 0x51, 0x95, 0x50, 0x46, 0x21, 0xa0, 0x18, 0xbd, 0x88, 0x02, 0xd9, 0x8d, 0x80, 0x8a, 0x79, 0x25, 0x90, 0x88, 0x22, 0x40, 0x0f, 0x34, 0xa2, 0x18, 0xbd, 0x08, 0x94, 0x42, 0x66, 0x01, 0x05, 0xb2, 0x11, 0x50, 0x31, 0x7a, 0x2b, 0x81, 0x44, 0x40, 0x89, 0xaa, 0x04, 0x1a, 0x50, 0x8c, 0x5e, 0x44, 0x81, 0xec, 0x46, 0x40, 0xc5, 0xbc, 0x12, 0x48, 0x44, 0x11, 0xa0, 0x07, 0x1a, 0x51, 0x8c, 0x5e, 0x04, 0x0a, 0x71, 0x48, 0x00, 0x00, 0x00, 0x00, 0x60, 0x9c, 0x00, 0x00, 0x00, 0x00, 0x71, 0x48, 0x01, 0x00, 0x00, 0x00, 0x60, 0x9c, 0x00, 0x00, 0x00, 0x00, 0xd6, 0xc0, 0x10, 0xa0, 0x90, 0x55, 0x04, 0xe0, 0x37, 0x8a, 0x09, 0xa8, 0x10, 0x25, 0xae, 0x16, 0x89, 0x4a, 0x5c, 0xed, 0x0d, 
    0x87, 0x14, 0xc3, 0x45, 0x5e, 0x05, 0x54, 0x88, 0x11, 0x6f, 0x14, 0xc3, 0xae, 0x80, 0x0a, 0xd1, 0x51, 0x4c, 0x40, 0x85, 0x04, 0xd1, 0x85, 0x3a, 0xf4, 0xa1, 0xeb, 0x60, 0x02, 0x2a, 0x86, 0x60, 0x02, 0x2a, 0x24, 0x48, 0x31, 0x01, 0x15, 0x32, 0x44, 0xd7, 0xd6, 0xc0, 0x30, 0xa0, 0x90, 0x55, 0x04, 0xe0, 0x37, 0x8a, 0x09, 0xa8, 0x10, 0x25, 0xae, 0x16, 0x89, 0x4a, 0x5c, 0xed, 0x0d, 0x87, 0x14, 0xc3, 0x45, 0x5e, 0x05, 0x54, 0x88, 0x11, 0x6f, 0x14, 0xc3, 0xae, 0x80, 0x0a, 0xd1, 0x51, 0x4c, 0x40, 0x85, 0x04, 0xd1, 0x85, 0x3a, 0xf4, 0xa1, 0xeb, 0x60, 0x02, 0x2a, 0x86, 0x60, 0x02, 0x2a, 0x24, 0x48, 0x31, 0x01, 0x15, 0x32, 0x44, 0xd7, 0x16, 0x81, 0xd2, 0xc1, 0x30, 0xb0, 0x28, 0x6c, 0x46, 0x71, 0xbc, 0x8a, 0xa8, 0xb0, 0x1b, 0xc5, 0x45, 0x54, 0x98, 0x12, 0x57, 0x8b, 0x44, 0x25, 0xae, 0xf6, 0x86, 0x43, 0x8a, 0xe3, 0x22, 0xaf, 0x22, 0x2a, 0xcc, 0x88, 0x37, 0x8a, 0x63, 0x57, 0x44, 0x85, 0xe9, 0x28, 0x2e, 0xa2, 0xc2, 0x82, 0xe8, 0x42, 0x1d, 0xfa, 0xd0, 0x75, 0x70, 0x11, 0x15, 0x47, 0x70, 0x11, 0x15, 0x16, 0xa4, 0x38, 0x16, 0x81, 0xd2, 0xc1, 0x10, 0xb0, 0x28, 0x6c, 0x46, 0x71, 0xbc, 0x8a, 0xa8, 0xb0, 0x1b, 0xc5, 0x45, 0x54, 0x98, 0x12, 0x57, 0x8b, 0x44, 0x25, 0xae, 0xf6, 0x86, 0x43, 0x8a, 0xe3, 0x22, 0xaf, 0x22, 0x2a, 0xcc, 0x88, 0x37, 0x8a, 0x63, 0x57, 0x44, 0x85, 0xe9, 0x28, 0x2e, 0xa2, 0xc2, 0x82, 0xe8, 0x42, 0x1d, 0xfa, 0xd0, 0x75, 0x70, 0x11, 0x15, 0x47, 0x70, 0x11, 0x15, 0x16, 0xa4, 0x38, 0xd6, 0xc0, 0x50, 0xe8, 0xe0, 0x14, 0x80, 0x11, 0x3c, 0xd5, 0x51, 0xd9, 0x0c, 0x87, 0xc9, 0xbc, 0x0a, 0xa8, 0xb2, 0x1b, 0xd5, 0x05, 0x54, 
    0x99, 0xb2, 0x91, 0xe1, 0xab, 0x80, 0x2a, 0x43, 0xa2, 0x12, 0x57, 0x8d, 0x0c, 0xbf, 0x51, 0x1d, 0xd1, 0x51, 0x59, 0xb1, 0x91, 0xe1, 0xab, 0x80, 0x2a, 0x33, 0xe2, 0x8d, 0xea, 0x1a, 0x19, 0x56, 0xe6, 0x0a, 0x68, 0x1d, 0xd5, 0x5d, 0x59, 0xb0, 0x91, 0xe1, 0x2e, 0xd6, 0xb1, 0x8f, 0x5d, 0x0e, 0xab, 0x0b, 0xa8, 0x32, 0x1f, 0xba, 0x36, 0x08, 0xd6, 0xc0, 0x0d, 0x88, 0x40, 0x09, 0x24, 0xa0, 0x23, 0xa0, 0x62, 0xf0, 0xc6, 0x63, 0x25, 0x90, 0x08, 0x28, 0x51, 0x95, 0x50, 0x46, 0x21, 0xa0, 0x18, 0xbd, 0x88, 0x02, 0xd9, 0x8d, 0x80, 0x8a, 0x79, 0x25, 0x90, 0x88, 0x22, 0x40, 0x0f, 0x34, 0xa2, 0x18, 0xbd, 0x08, 0x94, 0x42, 0x74, 0x01, 0x05, 0xb2, 0x11, 0x50, 0x31, 0x7a, 0x2b, 0x81, 0x44, 0x40, 0x89, 0xaa, 0x04, 0x1a, 0x50, 0x8c, 0x5e, 0x44, 0x81, 0xec, 0x46, 0x40, 0xc5, 0xbc, 0x12, 0x48, 0x44, 0x11, 0xa0, 0x07, 0x1a, 0x51, 0x8c, 0x5e, 0x04, 0x0a, 0xd6, 0xc0, 0x2d, 0x88, 0x40, 0x09, 0x24, 0xa0, 0x23, 0xa0, 0x62, 0xf0, 0xc6, 0x63, 0x25, 0x90, 0x08, 0x28, 0x51, 0x95, 0x50, 0x46, 0x21, 0xa0, 0x18, 0xbd, 0x88, 0x02, 0xd9, 0x8d, 0x80, 0x8a, 0x79, 0x25, 0x90, 0x88, 0x22, 0x40, 0x0f, 0x34, 0xa2, 0x18, 0xbd, 0x08, 0x94, 0x42, 0x74, 0x01, 0x05, 0xb2, 0x11, 0x50, 0x31, 0x7a, 0x2b, 0x81, 0x44, 0x40, 0x89, 0xaa, 0x04, 0x1a, 0x50, 0x8c, 0x5e, 0x44, 0x81, 0xec, 0x46, 0x40, 0xc5, 0xbc, 0x12, 0x48, 0x44, 0x11, 0xa0, 0x07, 0x1a, 0x51, 0x8c, 0x5e, 0x04, 0x0a, 0x71, 0x56, 0x00, 0x00, 0x00, 0x00, 0x60, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x71, 0x56, 0x01, 0x00, 0x00, 0x00, 0x60, 0xb8, 0x00, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x0c, 0x88, 0x00, 0x09, 0x24, 0xa0, 
    0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0x5d, 0xd6, 0x00, 0x2c, 0x88, 0x00, 0x09, 0x24, 0xa0, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0x5d, 0xf1, 0x48, 0xc7, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf1, 0x49, 0xc7, 0x5f, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0x01, 0xf5, 0x80, 0x4a, 0xe0, 0x59, 0x40, 0x08, 0x06, 0x10, 0xa0, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x6a, 0x0c, 0x8e, 0x09, 0x10, 0x32, 0x12, 0x63, 0x83, 0x0c, 0x2e, 0xa8, 0x60, 0x82, 0x08, 0x1e, 0x68, 0x60, 0x81, 0x04, 0x0a, 0x18, 0x30, 0x56, 0x00, 0x1e, 0xa0, 0x03, 0xea, 0xb1, 0x94, 0xc0, 0xb3, 0x80, 0x10, 0x0c, 0x20, 0x40, 0x55, 0x55, 0x55, 0x55, 0x55, 0xd5, 0x90, 0x4c, 0x80, 0x90, 0x89, 0x51, 0x61, 0x46, 0x04, 0x0f, 0x34, 0x18, 0x0b, 0x46, 0x82, 0x71, 0x40, 0x01, 0x03, 0x06, 0x1d, 0x50, 0x0f, 0xa5, 0x04, 0x9e, 0x05, 0x84, 0x60, 0x00, 0x01, 0xaa, 0x56, 0x83, 0x84, 0x19, 0xa0, 0xaa, 0xd5, 0x10, 0x61, 0x06, 0xa8, 0x6a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0x00, 0xc9, 0x00, 0x42, 0x98, 0x01, 0xc0, 0x01, 0x00, 0x02, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0xd6, 0x40, 0xc9, 0x00, 0x42, 0x98, 0x01, 0xc0, 0x01, 0x00, 0x02, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0xd6, 0x03, 0x8f, 0xc0, 0x3a, 0x20, 0x84, 0x41, 0x20, 0x82, 0x02, 0x20, 0x1a, 0x26, 0x84, 0x31, 0x20, 0x02, 0x01, 0x20, 0x1a, 0x24, 0x84, 0x21, 0x20, 0x82, 
    0x00, 0x20, 0x1a, 0x23, 0x84, 0x19, 0x20, 0x22, 0x80, 0x0e, 0xa0, 0x85, 0x10, 0x44, 0x18, 0x33, 0xf1, 0x3b, 0x00, 0xbf, 0x43, 0xf1, 0x87, 0x19, 0x84, 0x86, 0x31, 0x19, 0xbf, 0x03, 0xf0, 0x07, 0x19, 0x84, 0x2e, 0xd6, 0x03, 0x09, 0xa0, 0x3a, 0x20, 0x02, 0xc1, 0x2a, 0xa2, 0xad, 0x85, 0x31, 0xcf, 0x16, 0xd6, 0x9c, 0x9b, 0xb8, 0xf3, 0x6f, 0x62, 0xd0, 0xc3, 0x89, 0x47, 0x27, 0x27, 0x36, 0x2f, 0x3e, 0x1d, 0xbd, 0x58, 0xf5, 0xf5, 0xe2, 0xd6, 0xdd, 0x8d, 0x5f, 0x8f, 0x37, 0x96, 0x9d, 0xde, 0xb8, 0x76, 0xfb, 0x63, 0xdc, 0xf3, 0x8f, 0x77, 0xe7, 0x3f, 0xf6, 0xfd, 0x1f, 0x01, 0xd6, 0x03, 0x29, 0xa0, 0x3a, 0x20, 0x02, 0xc1, 0x2a, 0xa2, 0xad, 0x85, 0x31, 0xcf, 0x16, 0xd6, 0x9c, 0x9b, 0xb8, 0xf3, 0x6f, 0x62, 0xd0, 0xc3, 0x89, 0x47, 0x27, 0x27, 0x36, 0x2f, 0x3e, 0x1d, 0xbd, 0x58, 0xf5, 0xf5, 0xe2, 0xd6, 0xdd, 0x8d, 0x5f, 0x8f, 0x37, 0x96, 0x9d, 0xde, 0xb8, 0x76, 0xfb, 0x63, 0xdc, 0xf3, 0x8f, 0x77, 0xe7, 0x3f, 0xf6, 0xfd, 0x1f, 0x01, 0xd6, 0x03, 0x0c, 0xa0, 0x40, 0x20, 0x02, 0xc1, 0x2a, 0xa2, 0xad, 0x85, 0x31, 0xcf, 0x16, 0xd6, 0x9c, 0x9b, 0xb8, 0xf3, 0x6f, 0x62, 0xd0, 0xc3, 0x89, 0x47, 0x27, 0x27, 0x36, 0x2f, 0x3e, 0x1d, 0xbd, 0x58, 0xf5, 0xf5, 0xe2, 0xd6, 0xdd, 0x8d, 0x5f, 0x8f, 0x37, 0x96, 0x9d, 0xde, 0xb8, 0x76, 0xfb, 0x63, 0xdc, 0xf3, 0x8f, 0x77, 0xe7, 0x3f, 0xf6, 0xfd, 0x1f, 0x01, 0xd6, 0x03, 0x2c, 0xa0, 0xe0, 0x2b, 0x02, 0xc1, 0x2a, 0xa2, 0xad, 0x85, 0x31, 0xcf, 0x16, 0xd6, 0x9c, 0x9b, 0xb8, 0xf3, 0x6f, 0x62, 0xd0, 0xc3, 0x89, 0x47, 0x27, 0x27, 0x36, 0x2f, 0x3e, 0x1d, 0xbd, 0x58, 0xf5, 0xf5, 0xe2, 0xd6, 0xdd, 0x8d, 0x5f, 
    0x8f, 0x37, 0x96, 0x9d, 0xde, 0xb8, 0x76, 0xfb, 0x63, 0xdc, 0xf3, 0x8f, 0x77, 0xe7, 0x3f, 0xf6, 0xfd, 0x1f, 0x01, 0xd6, 0x01, 0xe9, 0x50, 0x80, 0x10, 0x26, 0x02, 0x70, 0x00, 0x80, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xd6, 0x03, 0xe9, 0x50, 0xca, 0x00, 0x08, 0x61, 0x22, 0x00, 0x07, 0x00, 0x08, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x75, 0x80, 0x57, 0x20, 0x05, 0x05, 0x48, 0x81, 0x20, 0x85, 0x01, 0x48, 0x21, 0x20, 0x04, 0x4a, 0x11, 0x88, 0x30, 0x11, 0x88, 0x30, 0x00, 0x88, 0x30, 0x12, 0x88, 0x88, 0x08, 0x33, 0x81, 0x08, 0x03, 0x80, 0x80, 0x00, 0x31, 0xf0, 0xe0, 0xf1, 0x0a, 0x08, 0x8b, 0xa7, 0x00, 0x16, 0x8f, 0xc0, 0xe2, 0x09, 0x00, 0xde, 0x8e, 0x10, 0x10, 0x27, 0x02, 0x71, 0x00, 0x10, 0x47, 0x02, 0x71, 0x00, 0x10, 0x67, 0x02, 0x71, 0x00, 0x10, 0x07, 0x00, 0x75, 0x00, 0x56, 0x20, 0x05, 0x05, 0x48, 0x81, 0x20, 0x85, 0x01, 0x48, 0x11, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x0f, 0x1e, 0xc0, 0x0a, 0x08, 0x29, 0x14, 0x40, 0x0a, 0x02, 0x29, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x0c, 0x88, 0x40, 0x09, 0x24, 0xa0, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0x5d, 0xd6, 0x00, 0x2c, 0x88, 0x40, 0x09, 0x24, 0xa0, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0x5d, 0x75, 0x60, 0x28, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 
    0x00, 0xd6, 0x00, 0x09, 0x88, 0x40, 0x09, 0x24, 0xa0, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0x5d, 0xd6, 0x00, 0x29, 0x88, 0x40, 0x09, 0x24, 0xa0, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0x5d, 0xd6, 0x00, 0xec, 0x88, 0xa0, 0x28, 0x84, 0x17, 0xd0, 0x48, 0x8b, 0xd9, 0x0b, 0xd1, 0x05, 0x34, 0xcc, 0x79, 0x16, 0x73, 0x21, 0xba, 0x80, 0x8a, 0xb9, 0x10, 0x58, 0x40, 0x23, 0x9d, 0x67, 0x30, 0x17, 0x72, 0x0b, 0x68, 0x98, 0xf3, 0x1c, 0x69, 0x31, 0x7b, 0x21, 0xba, 0x80, 0x86, 0x39, 0xcf, 0x62, 0x2e, 0x44, 0x17, 0x50, 0x31, 0x17, 0x02, 0x0b, 0x68, 0xa4, 0xf3, 0x0c, 0xe6, 0x42, 0x6e, 0x01, 0x01, 0xf5, 0x80, 0x74, 0xfc, 0x88, 0x30, 0x03, 0x80, 0x08, 0x03, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0xf5, 0x81, 0x74, 0xfc, 0x65, 0x80, 0x08, 0x33, 0x00, 0x88, 0x30, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0xd6, 0xc0, 0x50, 0xa0, 0x03, 0xa4, 0x41, 0x45, 0x50, 0x44, 0x14, 0xd0, 0x36, 0x43, 0x74, 0x01, 0x45, 0xb4, 0x37, 0x43, 0x74, 0x01, 0x45, 0xb4, 0x37, 0x43, 0x74, 0x01, 0x45, 0xb4, 0x37, 0x43, 0x74, 0x01, 0x45, 0xb4, 0x37, 0x43, 0x74, 0x01, 0x45, 0xb4, 0x37, 0x43, 0x74, 0x01, 0x45, 0xb4, 0x37, 0x43, 0x74, 0x01, 0x45, 0xb4, 0x03, 0x56, 0xc3, 0x51, 0x69, 0x01, 0xe2, 0x40, 0x1a, 0x80, 0x28, 0x0d, 0x14, 0x48, 0xa2, 0x20, 0x0e, 0xae, 0x03, 0x88, 0x13, 0x43, 0x87, 0x95, 0x16, 0x60, 0xa4, 0x01, 0x88, 0xd2, 0x40, 0x81, 0x60, 0x88, 0x83, 0xeb, 0x00, 0xe2, 0xc4, 0xd0, 0x61, 
    0xa5, 0x05, 0x18, 0x69, 0x00, 0xa2, 0x34, 0x50, 0x20, 0x18, 0xe2, 0xe0, 0x3a, 0x80, 0x38, 0x31, 0x74, 0x58, 0x69, 0x01, 0x46, 0x1a, 0x80, 0x28, 0x0d, 0x14, 0x08, 0x86, 0x38, 0xb8, 0x0e, 0x20, 0x4e, 0x0c, 0x1d, 0x00, 0xd6, 0x00, 0x0c, 0x88, 0x40, 0x09, 0x24, 0xa0, 0x23, 0xa0, 0x62, 0xf0, 0xc6, 0x63, 0x25, 0x90, 0x08, 0x28, 0x51, 0x95, 0x50, 0x46, 0x21, 0xa0, 0x18, 0xbd, 0x88, 0x02, 0xd9, 0x8d, 0x80, 0x8a, 0x79, 0x25, 0x90, 0x88, 0x22, 0x40, 0x0f, 0x34, 0xa2, 0x18, 0xbd, 0x08, 0x94, 0x40, 0x02, 0xda, 0x23, 0xa0, 0x62, 0xf4, 0x56, 0x02, 0x89, 0x80, 0x12, 0x55, 0x09, 0x34, 0xa0, 0x18, 0xbd, 0x88, 0x02, 0xd9, 0x8d, 0x80, 0x8a, 0x79, 0x25, 0x90, 0x88, 0x22, 0x40, 0x0f, 0x34, 0xa2, 0x18, 0xbd, 0x08, 0x14, 0xd6, 0x00, 0x2c, 0x88, 0x40, 0x09, 0x24, 0xa0, 0x23, 0xa0, 0x62, 0xf0, 0xc6, 0x63, 0x25, 0x90, 0x08, 0x28, 0x51, 0x95, 0x50, 0x46, 0x21, 0xa0, 0x18, 0xbd, 0x88, 0x02, 0xd9, 0x8d, 0x80, 0x8a, 0x79, 0x25, 0x90, 0x88, 0x22, 0x40, 0x0f, 0x34, 0xa2, 0x18, 0xbd, 0x08, 0x94, 0x40, 0x02, 0xda, 0x23, 0xa0, 0x62, 0xf4, 0x56, 0x02, 0x89, 0x80, 0x12, 0x55, 0x09, 0x34, 0xa0, 0x18, 0xbd, 0x88, 0x02, 0xd9, 0x8d, 0x80, 0x8a, 0x79, 0x25, 0x90, 0x88, 0x22, 0x40, 0x0f, 0x34, 0xa2, 0x18, 0xbd, 0x08, 0x14, 0x05, 0x11, 0x66, 0x00, 0x10, 0x61, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xd6, 0x03, 0x92, 0x00, 0x09, 0x84, 0x10, 0x08, 0x80, 0x00, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x91, 0x90, 0x48, 0x87, 0x10, 0x89, 0xb1, 0x63, 0xd4, 0x18, 0x2d, 0xc6, 0x89, 0xf1, 0x61, 0x64, 0x18, 0x11, 0x24, 0x00, 
    0x71, 0x48, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x49, 0x47, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x0f, 0xa0, 0x10, 0x52, 0x04, 0xe0, 0x30, 0x82, 0x09, 0xa8, 0x90, 0x21, 0x92, 0x36, 0x88, 0x43, 0x24, 0x2d, 0x0c, 0x79, 0x14, 0xc3, 0x3e, 0x26, 0x05, 0x54, 0xc8, 0x0f, 0x61, 0x17, 0xc3, 0xa7, 0x80, 0x0a, 0x99, 0x11, 0x4c, 0x40, 0x85, 0x18, 0xf1, 0x84, 0x44, 0x34, 0xe2, 0x69, 0x67, 0xf8, 0xa3, 0x18, 0x0e, 0xf2, 0x29, 0xa0, 0x42, 0x86, 0x38, 0x03, 0xd6, 0x00, 0x2f, 0xa0, 0x10, 0x52, 0x04, 0xe0, 0x30, 0x82, 0x09, 0xa8, 0x90, 0x21, 0x92, 0x36, 0x88, 0x43, 0x24, 0x2d, 0x0c, 0x79, 0x14, 0xc3, 0x3e, 0x26, 0x05, 0x54, 0xc8, 0x0f, 0x61, 0x17, 0xc3, 0xa7, 0x80, 0x0a, 0x99, 0x11, 0x4c, 0x40, 0x85, 0x18, 0xf1, 0x84, 0x44, 0x34, 0xe2, 0x69, 0x67, 0xf8, 0xa3, 0x18, 0x0e, 0xf2, 0x29, 0xa0, 0x42, 0x86, 0x38, 0x03, 0x56, 0x00, 0x1e, 0xa0, 0x03, 0x5e, 0x60, 0x51, 0x18, 0x29, 0x02, 0xa5, 0x32, 0x18, 0xd1, 0x05, 0x54, 0xd9, 0x10, 0x49, 0x1b, 0xc4, 0x21, 0x92, 0x16, 0x86, 0x3c, 0xaa, 0x63, 0x1f, 0x93, 0x02, 0xaa, 0xec, 0x87, 0xb0, 0xab, 0xe3, 0x53, 0x40, 0x95, 0xcd, 0x88, 0x2e, 0xa0, 0xca, 0x8c, 0x78, 0x42, 0x22, 0x1a, 0xf1, 0xb4, 0x33, 0xfc, 0x51, 0x1d, 0x07, 0xf9, 0x04, 0x56, 0x00, 0x1e, 0xa0, 0x03, 0x1e, 0x60, 0x51, 0x18, 0x29, 0x02, 0xa5, 0x32, 0x18, 0xd1, 0x05, 0x54, 0xd9, 0x10, 0x49, 0x1b, 0xc4, 0x21, 0x92, 0x16, 0x86, 0x3c, 0xaa, 0x63, 0x1f, 0x93, 0x02, 0xaa, 0xec, 0x87, 0xb0, 0xab, 0xe3, 0x53, 0x40, 0x95, 0xcd, 0x88, 0x2e, 0xa0, 0xca, 0x8c, 0x78, 0x42, 0x22, 0x1a, 0xf1, 
    0xb4, 0x33, 0xfc, 0x51, 0x1d, 0x07, 0xf9, 0x04, 0x56, 0x00, 0x1e, 0x00, 0x3a, 0xe0, 0x05, 0x20, 0x85, 0x91, 0x22, 0x78, 0x2a, 0x83, 0x11, 0x5d, 0x40, 0x95, 0x0d, 0x91, 0xb4, 0x41, 0x1c, 0x22, 0x69, 0x61, 0xc8, 0xa3, 0x3a, 0xf6, 0x31, 0x29, 0xa0, 0xca, 0x7e, 0x08, 0xbb, 0x3a, 0x3e, 0x05, 0x54, 0xd9, 0x8c, 0xe8, 0x02, 0xaa, 0xcc, 0x88, 0x27, 0x24, 0xa2, 0x11, 0x4f, 0x3b, 0xc3, 0x1f, 0xd5, 0x71, 0x10, 0x75, 0x60, 0x56, 0x20, 0x05, 0x05, 0x48, 0x81, 0x20, 0x85, 0x01, 0x48, 0x11, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x56, 0x20, 0x05, 0x25, 0x05, 0x84, 0x14, 0x8a, 0x14, 0x08, 0x52, 0x18, 0x52, 0x10, 0x48, 0x21, 0x48, 0x11, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x29, 0x20, 0x84, 0x31, 0x00, 0x1c, 0x00, 0x20, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x0a, 0x38, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xd6, 0x00, 0x09, 0x20, 0x84, 0x31, 0x00, 0x1c, 0x00, 0x20, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x0a, 0x38, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x71, 0x78, 0x44, 0x1c, 0x04, 0x49, 0xa1, 0x11, 0x59, 0x1c, 0x03, 0xa9, 0xa0, 0x11, 0x52, 0x1c, 0x02, 0x69, 0xa0, 0x11, 0x4d, 0x9c, 0x01, 0x49, 0xa0, 0x11, 0x49, 0x1c, 0x01, 0x29, 0xa0, 0x11, 0x46, 0x9c, 0x00, 0x29, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x49, 0xc6, 0x2c, 0x88, 0x03, 0x20, 0x4e, 0x82, 0x38, 0x00, 0xe2, 0x00, 0x88, 0x63, 0x20, 0x4e, 0x81, 0x38, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x4b, 0xc6, 0x2c, 0x88, 0x03, 0x20, 0x4e, 0x82, 0x38, 0x00, 0xe2, 0x00, 0x88, 0x63, 0x20, 0x4e, 0x81, 0x38, 0x04, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0xc0, 0x10, 0xa0, 0x90, 0x55, 0x04, 0xe0, 0x37, 0x82, 0x09, 0xa8, 0x10, 0x25, 0xae, 0x16, 0x89, 0x4a, 0x5c, 0xed, 0x0d, 0x87, 0x14, 0xc3, 0x45, 0x5e, 0x05, 0x54, 0x88, 0x11, 0x6f, 0x14, 0xc3, 0xae, 0x80, 0x0a, 0xd1, 0x11, 0x4c, 0x40, 0x85, 0x04, 0xd1, 0x85, 0x3a, 0xf4, 0xa1, 0xeb, 0x60, 0x02, 0x2a, 0x86, 0x60, 0x02, 0x2a, 0x24, 0x48, 0x31, 0x01, 0x15, 0x32, 0x44, 0xd7, 0xd6, 0xc0, 0x30, 0xa0, 0x90, 0x55, 0x04, 0xe0, 0x37, 0x82, 0x09, 0xa8, 0x10, 0x25, 0xae, 0x16, 0x89, 0x4a, 0x5c, 0xed, 0x0d, 0x87, 0x14, 0xc3, 0x45, 0x5e, 0x05, 0x54, 0x88, 0x11, 0x6f, 0x14, 0xc3, 0xae, 0x80, 0x0a, 0xd1, 0x11, 0x4c, 0x40, 0x85, 0x04, 0xd1, 0x85, 0x3a, 0xf4, 0xa1, 0xeb, 0x60, 0x02, 0x2a, 0x86, 0x60, 0x02, 0x2a, 0x24, 0x48, 0x31, 0x01, 0x15, 0x32, 0x44, 0xd7, 0x16, 0x81, 0xd2, 0xc1, 0x30, 0xb0, 0x28, 0x6c, 0x46, 0x71, 0xbc, 0x8a, 0xa8, 0xb0, 0x1b, 0xc1, 0x45, 0x54, 0x98, 0x12, 0x57, 0x88, 0x44, 0x25, 0xae, 0xf6, 0x86, 0x43, 0x8a, 0xe3, 0x22, 0xaf, 0x22, 0x2a, 0xcc, 0x88, 0x37, 0x8a, 0x63, 0x57, 0x44, 0x85, 0xe9, 0x08, 0x2e, 0xa2, 0xc2, 0x82, 0xe8, 0x42, 0x1d, 0xfa, 0xd0, 0x75, 0x70, 0x11, 0x15, 0x47, 0x70, 0x11, 0x15, 0x16, 0xa4, 0x38, 0x16, 0x81, 0xd2, 0xc1, 0x10, 0xb0, 0x28, 0x6c, 0x46, 0x71, 0xbc, 0x8a, 0xa8, 0xb0, 0x1b, 0xc1, 0x45, 0x54, 0x98, 0x12, 0x57, 0x88, 0x44, 0x25, 0xae, 0xf6, 0x86, 0x43, 0x8a, 0xe3, 0x22, 0xaf, 0x22, 0x2a, 0xcc, 0x88, 0x37, 0x8a, 0x63, 0x57, 0x44, 0x85, 0xe9, 0x08, 0x2e, 0xa2, 0xc2, 0x82, 0xe8, 0x42, 0x1d, 0xfa, 0xd0, 0x75, 0x70, 0x11, 0x15, 0x47, 0x70, 0x11, 
    0x15, 0x16, 0xa4, 0x38, 0x46, 0x07, 0x27, 0x00, 0x8c, 0xe0, 0xa9, 0x6c, 0x88, 0x33, 0xaa, 0xe3, 0x55, 0x40, 0x95, 0xdd, 0x88, 0x2e, 0xa0, 0xca, 0x94, 0xb8, 0x42, 0x24, 0x2a, 0x71, 0xb5, 0x37, 0x1c, 0x52, 0x1d, 0x17, 0x79, 0x15, 0x50, 0x65, 0x46, 0xbc, 0x51, 0x1d, 0xbb, 0x02, 0xaa, 0x4c, 0x47, 0x74, 0x01, 0x55, 0x16, 0x44, 0x17, 0xea, 0xd0, 0x87, 0xae, 0xa3, 0x0b, 0xa8, 0x3a, 0xa2, 0x0b, 0xa8, 0xb2, 0x20, 0x46, 0x07, 0x2e, 0x00, 0x8c, 0xe0, 0xa9, 0x6c, 0x48, 0x75, 0x01, 0x75, 0xc4, 0x0b, 0xa8, 0x8c, 0x14, 0xd0, 0x30, 0xa2, 0xbb, 0xb2, 0x21, 0x92, 0x02, 0x3a, 0xc8, 0x43, 0x26, 0x39, 0x8c, 0x79, 0x54, 0x47, 0x65, 0x3e, 0x24, 0x05, 0xf4, 0x8f, 0x61, 0x56, 0x47, 0x65, 0xa7, 0x80, 0x9e, 0x11, 0xdd, 0x95, 0x19, 0xf1, 0x84, 0x44, 0x34, 0xe2, 0x29, 0xa0, 0x67, 0xfc, 0xa3, 0x3a, 0x2a, 0x0b, 0x02, 0xeb, 0xf5, 0xeb, 0xe9, 0xb9, 0xb5, 0x12, 0x08, 0xfc, 0x04, 0x0d, 0x04, 0x0a, 0x0c, 0x0b, 0x0d, 0x0f, 0x10, 0x10, 0x12, 0x13, 0x14, 0x16, 0x17, 0x18, 0x1a, 0x1c, 0x1c, 0x1d, 0x1f, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x25, 0x27, 0x28, 0x28, 0x29, 0x2a, 0x2a, 0x2a, 0x2b, 0x2c, 0x2c, 0x2d, 0x2d, 0x2d, 0x2e, 0x2e, 0x2e, 0x2e, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2e, 0x2e, 0x2e, 0x2e, 0x2d, 0x2d, 0x2d, 0x2c, 0x2b, 0x2b, 0x2a, 0x29, 0x29, 0x28, 0x27, 0x27, 0x26, 0x25, 0x24, 0x24, 0x23, 0x22, 0x21, 0x20, 0x1e, 0x1d, 0x1c, 0x1b, 0x1a, 0x19, 0x18, 0x17, 0x16, 0x15, 0x14, 0x13, 0x11, 0x10, 0x0f, 0x0e, 0x0c, 0x0b, 0x0a, 0x08, 0x07, 0x06, 0x04, 0x03, 0x01, 0x00, 0xff, 0xfd, 0xfc, 0xfa, 0xf9, 0xf7, 0xf6, 
    0xf4, 0xf3, 0xf1, 0xf0, 0xee, 0xed, 0xeb, 0xea, 0xe8, 0xe7, 0xe5, 0xe3, 0xe1, 0xe0, 0xde, 0xdd, 0xdb, 0xda, 0xd8, 0xd6, 0xd5, 0xd3, 0xd1, 0xd0, 0xce, 0xcc, 0xcb, 0xc9, 0xc7, 0xc5, 0xc4, 0xc2, 0xc0, 0xbf, 0xbd, 0xbb, 0xba, 0xb8, 0xb6, 0xb5, 0xb4, 0xb1, 0xb0, 0xaf, 0xad, 0xab, 0xab, 0xa8, 0xa5, 0xad, 0xdc, 0xdc, 0xeb, 0xf5, 0xeb, 0xe9, 0xb9, 0xb5, 0x0d, 0x02, 0xfd, 0xfd, 0x00, 0xfb, 0xf9, 0xfa, 0xf8, 0xf7, 0xf6, 0xf5, 0xf4, 0xf2, 0xf1, 0xf0, 0xee, 0xed, 0xeb, 0xeb, 0xea, 0xe9, 0xe8, 0xe6, 0xe5, 0xe4, 0xe3, 0xe2, 0xe1, 0xe0, 0xdf, 0xde, 0xdd, 0xdc, 0xdb, 0xdb, 0xda, 0xd9, 0xd8, 0xd8, 0xd7, 0xd6, 0xd6, 0xd5, 0xd5, 0xd4, 0xd4, 0xd3, 0xd3, 0xd3, 0xd2, 0xd2, 0xd2, 0xd2, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd3, 0xd3, 0xd3, 0xd4, 0xd4, 0xd5, 0xd5, 0xd6, 0xd6, 0xd7, 0xd7, 0xd8, 0xd9, 0xd9, 0xda, 0xdb, 0xdc, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xef, 0xf0, 0xf1, 0xf3, 0xf4, 0xf5, 0xf7, 0xf8, 0xfa, 0xfb, 0xfd, 0xfe, 0x00, 0x01, 0x03, 0x04, 0x06, 0x08, 0x09, 0x0b, 0x0d, 0x0e, 0x10, 0x12, 0x14, 0x16, 0x17, 0x19, 0x1b, 0x1d, 0x1f, 0x21, 0x23, 0x25, 0x27, 0x28, 0x2a, 0x2c, 0x2e, 0x31, 0x32, 0x34, 0x36, 0x39, 0x3b, 0x3d, 0x3f, 0x41, 0x43, 0x45, 0x48, 0x4a, 0x4c, 0x4e, 0x50, 0x52, 0x55, 0x57, 0x58, 0x5b, 0x61, 0x5a, 0x62, 0x6b, 0x5d, 0x0f, 0x0f, 0xeb, 0xf5, 0xeb, 0xe9, 0xb9, 0xb5, 0x37, 0x18, 0xe1, 0xb9, 0xbe, 0xea, 0x20, 0x47, 0x4a, 0x2c, 0xfc, 0xd4, 0xc6, 0xd7, 0xfd, 0x26, 0x44, 0x4a, 0x38, 0x14, 0xe8, 0xc0, 0xa9, 0xa8, 
    0xb8, 0xd3, 0xee, 0x02, 0x04, 0xf8, 0xdf, 0xc1, 0xa4, 0x92, 0x8e, 0x9a, 0xb6, 0xdc, 0x06, 0x31, 0x57, 0x74, 0x7e, 0x7e, 0x7e, 0x76, 0x69, 0x60, 0x5c, 0x5c, 0x60, 0x66, 0x6c, 0x6e, 0x6a, 0x60, 0x4e, 0x34, 0x14, 0xf1, 0xcd, 0xac, 0x92, 0x80, 0x80, 0x80, 0x8a, 0x9d, 0xb7, 0xd2, 0xee, 0x08, 0x1e, 0x32, 0x42, 0x4c, 0x54, 0x58, 0x58, 0x55, 0x4e, 0x49, 0x44, 0x42, 0x40, 0x40, 0x40, 0x40, 0x3e, 0x3a, 0x32, 0x29, 0x1b, 0x0a, 0xf7, 0xe2, 0xcc, 0xb7, 0xa3, 0x92, 0x86, 0x80, 0x80, 0x80, 0x80, 0x83, 0x8d, 0x9a, 0xab, 0xbe, 0xd2, 0xe6, 0xfa, 0x0e, 0x23, 0x36, 0x45, 0x52, 0x5c, 0x64, 0x66, 0x66, 0x62, 0x5c, 0x52, 0x48, 0x3c, 0x30, 0x23, 0x16, 0x0a, 0xff, 0xf5, 0xea, 0xe1, 0xd7, 0xcc, 0xc4, 0xba, 0xb0, 0xa7, 0x9f, 0x98, 0x92, 0x8e, 0x8c, 0x8b, 0x8c, 0x8c, 0x8e, 0x93, 0x98, 0x9f, 0xa6, 0xae, 0xb7, 0xc1, 0xcc, 0xda, 0xe8, 0xf9, 0x09, 0x1a, 0x29, 0x39, 0x48, 0x56, 0x63, 0x6e, 0x76, 0x7c, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x78, 0x70, 0x67, 0x5c, 0x4e, 0x40, 0x32, 0x22, 0x12, 0x02, 0xf4, 0xe3, 0xd2, 0xc3, 0xb4, 0xa6, 0x9a, 0x8e, 0x86, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x86, 0x8d, 0x96, 0xa0, 0xaa, 0xb6, 0xc4, 0xd2, 0xe1, 0xee, 0xfd, 0x0a, 0x18, 0x26, 0x34, 0x40, 0x4b, 0x56, 0x62, 0x6c, 0x75, 0x7d, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x78, 0x70, 0x69, 0x5e, 0x54, 0x49, 0x3e, 0x35, 0x2b, 0x21, 0x16, 0x0b, 0x01, 0xf7, 0xec, 0xe3, 0xd9, 0xce, 0xc4, 0xba, 0xb3, 0xac, 0xa5, 0xa0, 0x9a, 0x96, 0x94, 0x95, 0x97, 0x9b, 0x9e, 0xa2, 0xa7, 0xac, 0xb2, 0xb8, 0xc1, 0xca, 0xd4, 0xdc, 0xe6, 0xf0, 0xfa, 0x06, 0x11, 0x1a, 0x24, 0x2c, 
    0x34, 0x3d, 0x46, 0x4e, 0x57, 0x5f, 0x66, 0x6c, 0x72, 0x78, 0x7c, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7a, 0x76, 0x72, 0x6d, 0x67, 0x60, 0x58, 0x50, 0x48, 0x40, 0x38, 0x2e, 0x26, 0x1c, 0x11, 0x07, 0xfe, 0xf6, 0xee, 0xe6, 0xdd, 0xd4, 0xcc, 0xc4, 0xbc, 0xb6, 0xae, 0xa7, 0xa0, 0x99, 0x94, 0x90, 0x8e, 0x8c, 0x8a, 0x8a, 0x8a, 0x8a, 0x8c, 0x8d, 0x90, 0x94, 0x98, 0x9e, 0xa5, 0xac, 0xb4, 0xbc, 0xc4, 0xcc, 0xd5, 0xde, 0xe8, 0xf1, 0xf9, 0x01, 0x09, 0x11, 0x1a, 0x23, 0x2c, 0x34, 0x3c, 0x42, 0x49, 0x50, 0x58, 0x5e, 0x64, 0x69, 0x6d, 0x72, 0x75, 0x78, 0x7b, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7c, 0x79, 0x76, 0x71, 0x6d, 0x68, 0x62, 0x5a, 0x52, 0x4b, 0x44, 0x3d, 0x36, 0x2e, 0x26, 0x1d, 0x14, 0x0b, 0x02, 0xf9, 0xf1, 0xe8, 0xe1, 0xda, 0xd4, 0xce, 0xc7, 0xc0, 0xb7, 0xae, 0xa7, 0xa1, 0x9c, 0x97, 0x93, 0x8e, 0x8a, 0x87, 0x84, 0x82, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x82, 0x84, 0x86, 0x88, 0x8c, 0x91, 0x97, 0x9e, 0xa6, 0xac, 0xb4, 0xba, 0xc0, 0xc7, 0xce, 0xd7, 0xe0, 0xe8, 0xf1, 0xf9, 0x02, 0x0a, 0x12, 0x1a, 0x21, 0x28, 0x2e, 0x36, 0x3d, 0x44, 0x4a, 0x50, 0x57, 0x5c, 0x62, 0x68, 0x6e, 0x71, 0x74, 0x77, 0x79, 0x7b, 0x7c, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7a, 0x76, 0x72, 0x6e, 0x6a, 0x66, 0x62, 0x5e, 0x58, 0x50, 0x48, 0x41, 0x3a, 0x32, 0x2b, 0x23, 0x1a, 0x12, 0x0a, 0x03, 0xfc, 0xf6, 0xee, 0xe7, 0xe0, 0xd8, 0xd0, 0xc9, 0xc2, 0xbc, 0xb6, 0xb1, 0xac, 0xa6, 0xa2, 0x9d, 0x99, 0x94, 0x90, 0x8c, 0x88, 0x84, 0x82, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
    0x80, 0x80, 0x80, 0x80, 0x82, 0x84, 0x86, 0x8a, 0x8e, 0x94, 0x9a, 0xa0, 0xa6, 0xaa, 0xae, 0xb4, 0xba, 0xc1, 0xc8, 0xce, 0xd7, 0xde, 0xe6, 0xee, 0xf4, 0xfc, 0x02, 0x0a, 0x11, 0x18, 0x1f, 0x26, 0x2c, 0x34, 0x3b, 0x42, 0x48, 0x4e, 0x52, 0x58, 0x5c, 0x62, 0x66, 0x69, 0x6c, 0x6e, 0x73, 0x77, 0x7b, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7a, 0x78, 0x75, 0x72, 0x6e, 0x6a, 0x65, 0x60, 0x5b, 0x56, 0x50, 0x4b, 0x45, 0x3f, 0x39, 0x32, 0x2c, 0x26, 0x1e, 0x18, 0x10, 0x0a, 0x04, 0xfc, 0xf6, 0xee, 0xe8, 0xe2, 0xdc, 0xd6, 0xd0, 0xca, 0xc4, 0xbd, 0xb8, 0xb2, 0xac, 0xa8, 0xa4, 0xa1, 0x9d, 0x9a, 0x96, 0x92, 0x8e, 0x8b, 0x88, 0x85, 0x82, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x82, 0x82, 0x83, 0x84, 0x84, 0x86, 0x89, 0x8c, 0x91, 0x94, 0x96, 0x99, 0x9c, 0xa1, 0xa5, 0xa9, 0xac, 0xb2, 0xb6, 0xba, 0xc0, 0xc5, 0xca, 0xce, 0xd4, 0xda, 0xe0, 0xe6, 0xeb, 0xf1, 0xf7, 0xfd, 0x04, 0x0a, 0x11, 0x18, 0x1d, 0x23, 0x28, 0x2c, 0x32, 0x37, 0x3d, 0x44, 0x49, 0x4e, 0x52, 0x56, 0x5a, 0x5c, 0x60, 0x65, 0x6a, 0x6e, 0x71, 0x74, 0x76, 0x78, 0x7a, 0x7d, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7d, 0x7b, 0x7a, 0x79, 0x78, 0x76, 0x72, 0x70, 0x6c, 0x6a, 0x66, 0x64, 0x60, 0x5d, 0x5a, 0x56, 0x52, 0x4e, 0x4b, 0x48, 0x43, 0x3e, 0x39, 0x34, 0x30, 0x2c, 0x27, 0x22, 0x1e, 0x18, 0x14, 0x0e, 0x09, 0x05, 0x00, 0xfb, 0xf6, 0xf1, 0xec, 0xe6, 0xe1, 0xdc, 0xd8, 0xd4, 0xd0, 0xcb, 0xc6, 
    0xc1, 0xbc, 0xb8, 0xb4, 0xb2, 0xae, 0xac, 0xa8, 0xa6, 0xa2, 0x9e, 0x9b, 0x98, 0x96, 0x94, 0x92, 0x91, 0x90, 0x8e, 0x8e, 0x8e, 0x8c, 0x8c, 0x8a, 0x89, 0x88, 0x88, 0x88, 0x88, 0x89, 0x8a, 0x8a, 0x8c, 0x8c, 0x8e, 0x8e, 0x90, 0x91, 0x93, 0x96, 0x97, 0x99, 0x9b, 0x9d, 0x9f, 0xa1, 0xa3, 0xa6, 0xa9, 0xac, 0xae, 0xb1, 0xb4, 0xb6, 0xb8, 0xbc, 0xc0, 0xc3, 0xc6, 0xc9, 0xcc, 0xd0, 0xd3, 0xd6, 0xda, 0xde, 0xe2, 0xe7, 0xeb, 0xed, 0xf0, 0xf3, 0xf6, 0xfa, 0xfe, 0xfe, 0xeb, 0xf5, 0xeb, 0xe9, 0xb9, 0xb5, 0x25, 0x47, 0xb1, 0xc1, 0x5f, 0xb5, 0x3f, 0xc4, 0x7f, 0x9a, 0x6f, 0x94, 0x2d, 0xfd, 0x3d, 0xc9, 0x0f, 0xfb, 0x0f, 0x93, 0x25, 0x7f, 0x92, 0x67, 0xd3, 0xd1, 0x05, 0x7f, 0x91, 0x6f, 0xef, 0x26, 0xf3, 0xe1, 0xff, 0x2f, 0x06, 0xc1, 0x38, 0xc1, 0xcb, 0xb0, 0x3f, 0x7c, 0x91, 0x29, 0xf5, 0x5f, 0xa0, 0x19, 0x93, 0x59, 0x95, 0xff, 0x7f, 0xa7, 0x3c, 0xf5, 0xd5, 0xe5, 0x7f, 0x93, 0x4f, 0x3d, 0xa9, 0xed, 0x7f, 0xc9, 0xed, 0x03, 0xf5, 0x24, 0xff, 0x2f, 0xe1, 0x7f, 0xa0, 0xcd, 0x7f, 0x91, 0x1f, 0xe1, 0x25, 0xe3, 0x07, 0xfd, 0x7f, 0xf6, 0xf3, 0x0a, 0x2f, 0x05, 0xc5, 0x49, 0xe0, 0xc0, 0x5f, 0xbd, 0xeb, 0x67, 0x97, 0x17, 0x1f, 0xc0, 0x0f, 0x1d, 0xcb, 0x15, 0x3d, 0xc2, 0x2f, 0xcd, 0x2d, 0xef, 0x15, 0x0f, 0x3b, 0xf5, 0xeb, 0x35, 0xff, 0x17, 0xd3, 0x26, 0x43, 0xc7, 0x1d, 0x43, 0xc5, 0x29, 0xeb, 0x2a, 0xdd, 0xcb, 0x1f, 0xdb, 0x17, 0xc9, 0x1e, 0x2f, 0xd9, 0xf9, 0xe4, 0xed, 0xef, 0x15, 0x15, 0xb1, 0x4b, 0x4a, 0xb5, 0x1f, 0xe0, 0x29, 0xf9, 0x1f, 0xff, 0x0f, 0x15, 0xf6, 0xe6, 0x23, 0xf7, 0x25, 0x3f, 0xbd, 0xcd, 0x09, 0x2b, 0xe1, 0xb0, 0x4f, 0xff, 0xe3, 
    0xe5, 0x39, 0xe9, 0x23, 0xbd, 0x23, 0xf3, 0x24, 0x1b, 0x05, 0x39, 0xd3, 0x2f, 0xfd, 0x0f, 0x37, 0xbd, 0x4f, 0xfb, 0xb9, 0x49, 0xd5, 0xc3, 0x25, 0x0e, 0xf1, 0xfa, 0x3f, 0xc9, 0x4d, 0xe7, 0x09, 0xe1, 0x0b, 0xde, 0x3f, 0xc1, 0x39, 0xc9, 0xe5, 0x4d, 0xc0, 0x1d, 0xeb, 0x3f, 0xcf, 0x05, 0x0f, 0x01, 0xff, 0x2f, 0xb5, 0x4b, 0xa5, 0x2f, 0xd3, 0x01, 0x0f, 0x0f, 0x19, 0xcf, 0x35, 0xe3, 0x2f, 0xbb, 0x4f, 0xc5, 0xe7, 0x4d, 0xb9, 0x1d, 0xdd, 0x03, 0x23, 0xdf, 0x1d, 0xf3, 0x15, 0xc0, 0xf1, 0x2f, 0xf5, 0xe3, 0xde, 0x2f, 0xdc, 0x01, 0xeb, 0x0f, 0xfd, 0x05, 0x25, 0xd7, 0x1d, 0xee, 0x13, 0xf3, 0x0d, 0x0d, 0x39, 0xda, 0x15, 0xff, 0xd7, 0x2d, 0xef, 0xf9, 0x2d, 0xf5, 0xed, 0x1c, 0xef, 0xef, 0x3f, 0xb8, 0x15, 0x07, 0x14, 0xc1, 0x45, 0xcb, 0x3d, 0xd5, 0x0f, 0x05, 0xd7, 0x3f, 0xcd, 0x2f, 0xb9, 0x0d, 0x39, 0xb7, 0x01, 0x1d, 0xed, 0x0c, 0xe7, 0xf4, 0x09, 0x0f, 0x09, 0xed, 0x2f, 0xc9, 0x0c, 0x0d, 0x0f, 0xfd, 0xa9, 0x49, 0xf4, 0xfd, 0x03, 0x07, 0xdd, 0x1d, 0x1f, 0xa0, 0x2c, 0xdd, 0x1d, 0xe7, 0x2f, 0xe9, 0xff, 0x07, 0x29, 0xdd, 0x0b, 0xf7, 0xff, 0x03, 0xeb, 0x2f, 0xef, 0x0b, 0x24, 0xf9, 0xe7, 0x05, 0x09, 0x17, 0x17, 0xdd, 0xf9, 0x13, 0x29, 0xdf, 0x25, 0xe7, 0x1f, 0x01, 0x09, 0xe9, 0x3e, 0xe5, 0x14, 0xdb, 0xe7, 0x09, 0x4f, 0xbd, 0xdb, 0x3f, 0xe8, 0xfd, 0xf7, 0xf7, 0x0f, 0x0f, 0x07, 0xfc, 0x1b, 0xdb, 0x01, 0x2f, 0xe3, 0x17, 0x09, 0xf5, 0x0f, 0xfe, 0xe4, 0x17, 0xfd, 0x17, 0xe7, 0x43, 0xb5, 0x1d, 0xf3, 0xeb, 0x1d, 0x0d, 0x07, 0x2d, 0xf7, 0x09, 0xfb, 0xe1, 0x44, 0xdd, 0xe1, 0x1c, 0x2f, 0xcb, 0x05, 0xeb, 0x06, 0x03, 0x1d, 0xd7, 0x1d, 0x0d, 0x15, 
    0xed, 0x01, 0x0f, 0x05, 0x0f, 0x05, 0xe7, 0x2c, 0x05, 0xe5, 0x29, 0xed, 0x01, 0xff, 0xf3, 0x1d, 0xf5, 0x0f, 0xef, 0x09, 0x0d, 0x1d, 0xe1, 0x25, 0xf9, 0xff, 0xdf, 0x2b, 0xe5, 0x03, 0xef, 0x2d, 0xe5, 0x03, 0x09, 0xf5, 0xfb, 0xf5, 0xfd, 0x09, 0xf5, 0x09, 0xf1, 0x19, 0xeb, 0x07, 0xe7, 0x15, 0x15, 0xf3, 0x01, 0x03, 0xf2, 0x09, 0x0d, 0xed, 0x1d, 0xe9, 0x0d, 0xe5, 0x3b, 0xdd, 0xee, 0x27, 0xe0, 0x13, 0x0d, 0xed, 0x19, 0xef, 0xf7, 0x1d, 0x01, 0xef, 0xf3, 0x1b, 0xef, 0x07, 0x0f, 0xe7, 0xfd, 0x03, 0x0f, 0xf7, 0x02, 0x27, 0xe1, 0x1b, 0xe0, 0x0b, 0xe9, 0x17, 0xdf, 0x1b, 0xe7, 0x1d, 0xfc, 0x15, 0xf1, 0x05, 0xed, 0x0b, 0x07, 0xea, 0x17, 0xf3, 0xf4, 0x13, 0xfb, 0x05, 0xf3, 0xfc, 0x0f, 0xf5, 0xff, 0x09, 0x23, 0xe3, 0x0f, 0x03, 0xf5, 0xf3, 0x07, 0xff, 0xfd, 0x15, 0xe9, 0x16, 0xf5, 0xf7, 0x09, 0x0f, 0xfd, 0xe0, 0x25, 0xef, 0xef, 0x13, 0x07, 0xfd, 0x07, 0xf3, 0x05, 0x05, 0x0b, 0xf9, 0xf9, 0xff, 0x09, 0xf3, 0x1d, 0xf3, 0x07, 0xff, 0xfd, 0x0e, 0xfc, 0x01, 0x1d, 0xf3, 0x17, 0xd5, 0x09, 0x09, 0x0a, 0xfd, 0x07, 0xe5, 0x15, 0xeb, 0x1f, 0xf7, 0xfd, 0x01, 0x24, 0xd9, 0x01, 0xfd, 0x0b, 0x05, 0xf7, 0x0b, 0xf5, 0x1f, 0xef, 0x09, 0x01, 0xff, 0x0f, 0xf5, 0x09, 0xf7, 0x0b, 0xfe, 0x03, 0x14, 0xf1, 0x03, 0x05, 0xf7, 0x01, 0xf9, 0x09, 0x05, 0x01, 0x0f, 0xf4, 0x25, 0xd9, 0x07, 0x19, 0xef, 0x05, 0x07, 0x0b, 0xeb, 0x05, 0x03, 0x0f, 0xf1, 0xfb, 0xff, 0x25, 0xe7, 0x0b, 0x04, 0xf5, 0x04, 0x13, 0xe9, 0x01, 0x0f, 0xfe, 0xf9, 0xff, 0x03, 0x0f, 0xe5, 0x09, 0xf3, 0x1f, 0xef, 0x01, 0xff, 0x09, 0xf8, 0xff, 0xff, 0xed, 0x0f, 0xee, 0x1d, 0xdb, 0x0f, 0xf7, 0x0f, 
    0xf5, 0x09, 0x03, 0xfd, 0x0b, 0xfb, 0x05, 0x09, 0xff, 0xf1, 0xfb, 0x09, 0x15, 0xf9, 0x0d, 0xef, 0x0f, 0xfd, 0x0e, 0xff, 0xf5, 0x0b, 0x01, 0x01, 0x0d, 0x05, 0xf7, 0x0d, 0xe9, 0x0f, 0xf9, 0x03, 0xf9, 0x09, 0xfe, 0x03, 0x23, 0xe0, 0x01, 0x17, 0xf3, 0xf5, 0x0d, 0xf3, 0x2b, 0xd5, 0x0a, 0x0f, 0xfd, 0xff, 0x0b, 0xf7, 0xfe, 0x01, 0x09, 0xeb, 0x0f, 0x03, 0xef, 0x06, 0x01, 0xfc, 0x09, 0xf3, 0x13, 0xee, 0x17, 0xf7, 0xed, 0x0f, 0x0b, 0xef, 0xfb, 0x0f, 0xfc, 0x07, 0xff, 0x01, 0xf5, 0x0b, 0x15, 0xd9, 0x0f, 0x15, 0xea, 0x09, 0xf8, 0x07, 0x05, 0x03, 0xfb, 0xf7, 0x0b, 0x03, 0xf7, 0x0f, 0xf3, 0x0f, 0xf2, 0x0f, 0xff, 0xfc, 0x01, 0xf1, 0x04, 0xff, 0x09, 0xf5, 0x0c, 0xef, 0x09, 0x05, 0x07, 0xf7, 0x09, 0xfd, 0xfb, 0x05, 0x0b, 0x09, 0xfd, 0xfe, 0xff, 0x05, 0x0c, 0xf4, 0x1d, 0xe7, 0x0f, 0xfb, 0x0f, 0xf7, 0x04, 0x06, 0x01, 0xf7, 0xff, 0x01, 0x07, 0x01, 0x05, 0x07, 0xff, 0x0f, 0xf3, 0x05, 0xff, 0x01, 0x09, 0xfb, 0x0d, 0x03, 0xff, 0xfb, 0x05, 0x07, 0xff, 0x05, 0xfb, 0x0f, 0xef, 0x16, 0xed, 0x07, 0xfb, 0x01, 0x07, 0xff, 0xfd, 0xff, 0x07, 0xfb, 0xfd, 0x05, 0x07, 0xfc, 0x0f, 0xf4, 0xff, 0x0d, 0x01, 0xfb, 0xf6, 0x01, 0x09, 0xf5, 0x0f, 0xf9, 0x09, 0x03, 0xfd, 0x03, 0x01, 0x01, 0x01, 0x09, 0x0f, 0xf7, 0x05, 0xf5, 0x0e, 0xf7, 0x05, 0x15, 0xeb, 0x06, 0x05, 0x0f, 0xf7, 0x0b, 0xfb, 0xff, 0x03, 0xfd, 0x0f, 0xef, 0x14, 0xf5, 0x09, 0xff, 0x0f, 0xf7, 0x0d, 0x03, 0xff, 0xfc, 0x08, 0xff, 0x03, 0x09, 0xfb, 0x0b, 0xfc, 0xff, 0x05, 0x05, 0x03, 0x0b, 0x05, 0xf4, 0x05, 0x0d, 0xff, 0xfb, 0x15, 0xe9, 0x0b, 0xff, 0x05, 0xff, 0x07, 0xfb, 0x03, 0x07, 0xfd, 0xfa, 
    0x03, 0x03, 0x03, 0xeb, 0xf5, 0xeb, 0xe9, 0xb9, 0xb5, 0x00, 0x03, 0xfa, 0x1b, 0xe3, 0x04, 0x17, 0x03, 0xe5, 0x33, 0xc8, 0x37, 0xf9, 0xd7, 0x41, 0xf1, 0xbd, 0x73, 0xb5, 0xfb, 0x2f, 0xf7, 0xfe, 0xd3, 0x5d, 0xab, 0x57, 0xbe, 0x18, 0x03, 0xfa, 0x2c, 0xab, 0x6f, 0xbf, 0x0f, 0xef, 0x51, 0x98, 0x2f, 0x13, 0xf7, 0x17, 0xe9, 0x0c, 0xe9, 0x29, 0xfb, 0xe9, 0x24, 0xf5, 0xf5, 0x47, 0x8f, 0x71, 0xbd, 0x24, 0xf6, 0x16, 0xcf, 0x5b, 0xbd, 0x01, 0x44, 0xc9, 0x0d, 0x2d, 0xf5, 0xd7, 0x15, 0x3b, 0xd1, 0x13, 0xf8, 0x01, 0x03, 0x0d, 0x00, 0x03, 0xfe, 0x1c, 0xdf, 0x19, 0x2b, 0xcf, 0x0e, 0xf2, 0x27, 0xf8, 0xee, 0x2d, 0xd3, 0x31, 0xf7, 0x01, 0xdb, 0x61, 0xb7, 0x11, 0xed, 0x41, 0xe1, 0xeb, 0x35, 0xb7, 0x4d, 0xef, 0xf7, 0x24, 0xbd, 0x54, 0xd7, 0x05, 0x0d, 0x17, 0xbb, 0x4a, 0xf1, 0xc9, 0x71, 0x9a, 0x53, 0xa7, 0x73, 0xad, 0x1a, 0x18, 0xe1, 0x1d, 0x0d, 0xea, 0x18, 0xe2, 0x43, 0xa5, 0x55, 0xdc, 0x04, 0x27, 0xdd, 0x05, 0xfb, 0x37, 0xd3, 0x1c, 0xe7, 0x15, 0xf5, 0x37, 0xa8, 0x53, 0xdb, 0xfe, 0x25, 0xcd, 0x63, 0xa6, 0x29, 0x01, 0x0d, 0x05, 0x04, 0xf3, 0x14, 0x05, 0x08, 0xfa, 0x0d, 0xd9, 0x51, 0xb3, 0x2e, 0x0f, 0xd8, 0x1b, 0x11, 0xe3, 0x23, 0xf7, 0x0f, 0xbf, 0x59, 0xff, 0xcf, 0x1b, 0x1b, 0xcf, 0x2c, 0x0a, 0xe1, 0x15, 0xec, 0x23, 0x00, 0xe9, 0x2a, 0xd3, 0x26, 0xf7, 0xe1, 0x67, 0x87, 0x43, 0x04, 0xf1, 0x2f, 0xcb, 0x14, 0x2e, 0xd7, 0x07, 0x3a, 0xaa, 0x47, 0xcd, 0x48, 0xcd, 0x2b, 0xdc, 0x23, 0xdf, 0x2e, 0xf6, 0xeb, 0x17, 0xf8, 0x11, 0x03, 0xf4, 0x02, 0x01, 0x2f, 0xd9, 0x0b, 0x19, 0xe8, 0x1d, 0xfd, 0xf7, 0x27, 0xe5, 0x01, 0x15, 0xf9, 0x14, 0xfd, 0x01, 
    0xf2, 0x25, 0xd8, 0x4f, 0xba, 0xfa, 0x66, 0xa6, 0x3b, 0xdd, 0x27, 0xd8, 0x2c, 0xe7, 0x26, 0xdd, 0x1a, 0xe4, 0x31, 0xf3, 0xf3, 0x19, 0xf3, 0x0d, 0x09, 0xef, 0x27, 0xe3, 0x12, 0xff, 0x09, 0xf1, 0x15, 0x01, 0xee, 0x21, 0xd8, 0x35, 0x01, 0xcd, 0x35, 0xfc, 0xfb, 0xe9, 0x4b, 0xc9, 0xfa, 0x20, 0x18, 0xe0, 0xfb, 0x1f, 0xf9, 0xf8, 0x14, 0xef, 0xf9, 0x28, 0xe9, 0x16, 0xf7, 0xfd, 0x0b, 0x20, 0xcd, 0x35, 0xd6, 0x15, 0x13, 0xe8, 0x14, 0xd9, 0x5b, 0x9e, 0x49, 0xfb, 0xd8, 0x25, 0x18, 0xeb, 0xfa, 0x06, 0x16, 0xf7, 0x07, 0xff, 0x09, 0xf3, 0x27, 0xf6, 0xed, 0x2e, 0xcb, 0x28, 0x1b, 0xc3, 0x14, 0x3b, 0xc2, 0x06, 0x37, 0xda, 0x01, 0x01, 0x2b, 0xd3, 0x19, 0xf3, 0x06, 0x1d, 0xd1, 0x31, 0xd7, 0x21, 0x04, 0xd2, 0x4c, 0xe4, 0xf4, 0x08, 0x25, 0xdd, 0x2b, 0xc9, 0x42, 0xe1, 0xf6, 0x3a, 0xc6, 0x1e, 0x19, 0xc9, 0x4d, 0xb5, 0x33, 0x09, 0xc9, 0x3b, 0xeb, 0x16, 0xfb, 0xde, 0x25, 0x05, 0x01, 0xe9, 0x37, 0xc5, 0x24, 0x12, 0xd8, 0x2d, 0xf9, 0xf7, 0x03, 0x11, 0xf4, 0x15, 0xe0, 0x2e, 0xed, 0x07, 0xec, 0x3f, 0xce, 0x07, 0x28, 0xdb, 0x0b, 0x0f, 0xd9, 0x3f, 0xe3, 0xf5, 0x0f, 0x0c, 0x0c, 0xd9, 0x2d, 0xe9, 0x15, 0x13, 0xc9, 0x36, 0xf7, 0xff, 0x04, 0xfb, 0x0b, 0xf3, 0x2f, 0xaf, 0x53, 0xe5, 0xf9, 0x05, 0x11, 0xef, 0x0e, 0x19, 0xbd, 0x47, 0xf3, 0xd5, 0x2d, 0x0e, 0xdd, 0x0c, 0x0f, 0x03, 0x02, 0xe2, 0x37, 0xe0, 0xff, 0x33, 0xde, 0xfd, 0x08, 0x0e, 0x09, 0xf9, 0xeb, 0x1a, 0x01, 0x07, 0xee, 0x1f, 0xec, 0x13, 0xef, 0x21, 0xcd, 0x4e, 0xbd, 0x20, 0x0a, 0xf3, 0x19, 0xef, 0x17, 0xe3, 0x24, 0xdd, 0x2f, 0xca, 0x5b, 0xa3, 0x2d, 0x1d, 0xcf, 0x27, 0xf5, 0xef, 0x13, 0x19, 
    0xd8, 0x16, 0xf2, 0x3e, 0xb3, 0x37, 0xf5, 0xfc, 0x11, 0xfc, 0xfe, 0xff, 0x23, 0xcc, 0x36, 0xe2, 0x15, 0xee, 0x15, 0x0b, 0xe7, 0x15, 0x09, 0xf4, 0x05, 0x0d, 0x06, 0xd9, 0x2b, 0xfd, 0xe9, 0x32, 0xbb, 0x48, 0xd1, 0x2f, 0xef, 0x04, 0xf9, 0x27, 0xcc, 0x15, 0x2b, 0xab, 0x4b, 0xf5, 0xdb, 0x17, 0x1e, 0xe0, 0x09, 0x0b, 0x0d, 0xe1, 0x1e, 0xf6, 0xfd, 0x0f, 0x1f, 0xa9, 0x57, 0xf2, 0xe5, 0x0e, 0x28, 0xeb, 0xee, 0x34, 0xcb, 0x0b, 0x29, 0xef, 0xe1, 0x21, 0x1d, 0xc2, 0x3c, 0x02, 0xdc, 0x2a, 0xfa, 0xd9, 0x3a, 0xd4, 0x2d, 0xeb, 0xe7, 0x42, 0xda, 0xfd, 0x2a, 0xbe, 0x53, 0xd5, 0x04, 0x14, 0xf5, 0x1b, 0xf5, 0xf2, 0x29, 0xed, 0x0f, 0xfa, 0x00, 0x13, 0xea, 0x21, 0xdb, 0x00, 0x37, 0xd5, 0x07, 0x21, 0xd5, 0x3a, 0xd7, 0x14, 0xfa, 0x23, 0xe5, 0xf5, 0x35, 0xc4, 0x35, 0xdf, 0x19, 0x0b, 0xf1, 0xf5, 0x2f, 0xd8, 0x3d, 0xad, 0x67, 0x97, 0x57, 0xeb, 0xf1, 0x18, 0x02, 0xf5, 0x0b, 0x14, 0xdd, 0x29, 0xff, 0xe6, 0x05, 0x2e, 0xcc, 0x18, 0x16, 0xef, 0x0b, 0xfd, 0x05, 0x0f, 0xe5, 0x21, 0xff, 0x01, 0xeb, 0x21, 0xee, 0x11, 0xfb, 0xfb, 0x0b, 0x07, 0xf3, 0x17, 0xf5, 0x0f, 0xf9, 0xeb, 0x40, 0xc5, 0x2e, 0xea, 0x0c, 0xf7, 0x0b, 0xfa, 0xfd, 0x29, 0xca, 0x2e, 0xdd, 0x27, 0xe2, 0x2e, 0xd2, 0x17, 0x29, 0xc7, 0x1d, 0x2a, 0xf1, 0xfd, 0x13, 0x03, 0xfd, 0x05, 0x0b, 0xea, 0x15, 0x0c, 0xda, 0x27, 0x01, 0xe5, 0x11, 0x1c, 0xd5, 0x19, 0x22, 0xcc, 0x2d, 0xe9, 0x18, 0xf7, 0x07, 0xfd, 0x03, 0x0f, 0xf5, 0x03, 0x0c, 0xf5, 0x0b, 0xfb, 0x0b, 0xf5, 0x11, 0xf4, 0x15, 0xde, 0x2a, 0xe4, 0x21, 0xd6, 0x18, 0x13, 0xe3, 0x15, 0xed, 0x39, 0xc8, 0x13, 0x1b, 0xe3, 0x13, 0x0f, 0xd3, 0x1f, 
    0x17, 0xdf, 0x12, 0x13, 0xda, 0x29, 0xec, 0x06, 0xfb, 0x18, 0xf4, 0x07, 0x03, 0xfe, 0x03, 0x0f, 0xef, 0x11, 0x05, 0xd5, 0x56, 0xae, 0x1b, 0x3a, 0xab, 0x31, 0x1a, 0xbb, 0x31, 0x14, 0xd3, 0x1c, 0xf1, 0x27, 0xd7, 0x0e, 0x1c, 0xd3, 0x2a, 0xfa, 0xef, 0x27, 0xdb, 0x12, 0x11, 0xd7, 0x2f, 0xed, 0x03, 0xfe, 0x0d, 0x01, 0xeb, 0x17, 0x00, 0xfc, 0xf4, 0x27, 0xdf, 0x1b, 0xe9, 0x09, 0x25, 0xdb, 0x0b, 0x13, 0xd3, 0x45, 0xbe, 0x3f, 0xdb, 0x18, 0xee, 0x0e, 0xfe, 0x0b, 0xf1, 0x16, 0xfb, 0xf1, 0x0f, 0x14, 0xe9, 0xf7, 0x2b, 0xed, 0x02, 0x03, 0x03, 0xfb, 0x0f, 0xfb, 0x15, 0xd5, 0x29, 0xed, 0x0f, 0xee, 0x16, 0xe5, 0x0b, 0x1d, 0xd4, 0x35, 0xe3, 0x03, 0x0f, 0xed, 0x13, 0xf7, 0x06, 0x0c, 0xe8, 0x19, 0xfe, 0xf5, 0x1c, 0xf2, 0xf5, 0x19, 0xf5, 0x0f, 0xef, 0x13, 0xfd, 0xf3, 0x1d, 0xe2, 0x21, 0xd5, 0x3d, 0xc7, 0x29, 0xdf, 0x2d, 0xe9, 0xee, 0x2f, 0xe3, 0x07, 0x13, 0xef, 0x01, 0x21, 0xd9, 0x14, 0x0f, 0xe4, 0x1b, 0xea, 0x29, 0xce, 0x26, 0x0b, 0xdc, 0x31, 0xf7, 0xef, 0x1c, 0xeb, 0x11, 0xfd, 0x09, 0xf5, 0x09, 0xf7, 0x29, 0xb6, 0x59, 0xc7, 0x02, 0x35, 0xc8, 0x1d, 0x05, 0xf8, 0xfe, 0xff, 0x05, 0x0c, 0xf4, 0xf4, 0xeb, 0xf5, 0xeb, 0xe9, 0xb9, 0xb5, 0xfe, 0x20, 0x2e, 0x42, 0x3a, 0x2e, 0x07, 0x7e, 0x96, 0x1e, 0x7e, 0x6f, 0x45, 0x18, 0xaf, 0xa7, 0x97, 0xf8, 0xab, 0xfa, 0xb7, 0xb0, 0xbc, 0x9e, 0xc9, 0xc8, 0x06, 0x99, 0xe3, 0x5e, 0x5b, 0xce, 0x7e, 0x4e, 0x4a, 0x7e, 0x7e, 0x5f, 0x46, 0x7e, 0x7e, 0xcf, 0x7e, 0x37, 0x04, 0xac, 0x17, 0x2c, 0x08, 0xa5, 0xb0, 0xbe, 0xeb, 0xc6, 0xdf, 0xd8, 0xa0, 0x91, 0xc1, 0x24, 0xc2, 0x9d, 0x92, 0x96, 0x99, 0xcb, 0xb7, 0xc0, 
    0x99, 0xbd, 0xef, 0xff, 0xf7, 0xc6, 0xc6, 0x0c, 0x0f, 0x19, 0x3b, 0x42, 0xfc, 0x03, 0x5c, 0x6f, 0x47, 0x67, 0x66, 0x7e, 0x78, 0x7e, 0x7e, 0x66, 0x7e, 0x72, 0x53, 0x36, 0x77, 0x6d, 0x5b, 0x1e, 0x52, 0x6e, 0xff, 0x37, 0xf6, 0xe5, 0xb7, 0xe7, 0x00, 0x8b, 0xa3, 0x92, 0x8f, 0x9e, 0x8c, 0x92, 0x91, 0x92, 0xc9, 0x91, 0x90, 0x92, 0xd5, 0x93, 0x94, 0xb2, 0xcb, 0x97, 0xc0, 0x96, 0xb3, 0xc4, 0xa2, 0xdb, 0x1f, 0x22, 0x02, 0x9f, 0x1d, 0x52, 0x47, 0x14, 0x79, 0x4c, 0x4a, 0x7e, 0x7b, 0x26, 0x77, 0x7e, 0x7e, 0x7e, 0x58, 0x42, 0x67, 0x4e, 0x72, 0x7e, 0x7e, 0x31, 0x7d, 0x7d, 0x56, 0x7e, 0x7e, 0x53, 0x27, 0x1a, 0x46, 0x7e, 0xa7, 0x0e, 0x36, 0x23, 0x0a, 0x0d, 0x87, 0x0a, 0x41, 0xb7, 0xd5, 0x25, 0xff, 0x99, 0x8b, 0x87, 0xf5, 0xfb, 0xab, 0x87, 0xb0, 0xac, 0xef, 0x8a, 0x90, 0x93, 0xb1, 0xf1, 0xb1, 0x90, 0x8d, 0xa8, 0xc7, 0x8e, 0xaf, 0xb3, 0xa6, 0xdc, 0xa8, 0xc0, 0x97, 0xbb, 0x00, 0x1d, 0xe2, 0xa0, 0xde, 0xea, 0x5f, 0x2f, 0x3f, 0x41, 0x16, 0x01, 0xde, 0x4c, 0x2e, 0xbf, 0xfb, 0x37, 0x42, 0x28, 0x32, 0x1f, 0xde, 0xf7, 0x94, 0x30, 0x5e, 0x46, 0xcd, 0x3f, 0xdf, 0x12, 0x77, 0xdd, 0x34, 0x7e, 0x1f, 0x07, 0x68, 0x67, 0x7e, 0xe7, 0x32, 0x6d, 0x7e, 0x67, 0x1f, 0x2e, 0x7e, 0x57, 0x23, 0x22, 0x1f, 0x6e, 0x78, 0x5c, 0x03, 0xf2, 0x44, 0x0e, 0xee, 0x3d, 0xfb, 0xa3, 0x1a, 0x03, 0xfe, 0xd7, 0xbd, 0xfd, 0x0d, 0xd3, 0x95, 0x9e, 0xbe, 0xce, 0x33, 0xfb, 0x8b, 0x86, 0xbd, 0x05, 0xb6, 0x89, 0x9c, 0xb2, 0xfe, 0x07, 0x8e, 0xaa, 0x1e, 0xe7, 0x8e, 0x9f, 0xcc, 0xd2, 0xfe, 0x04, 0x35, 0xdb, 0xc0, 0x4b, 0x21, 0xe3, 0x13, 0x41, 0x3b, 0xe9, 0x02, 0x70, 0x57, 0xdf, 
    0xf7, 0x77, 0x37, 0xf2, 0x06, 0xb5, 0x0e, 0x73, 0x17, 0xdb, 0x5d, 0x47, 0x11, 0xc4, 0xe6, 0x3d, 0x3f, 0xcf, 0x72, 0x19, 0xe8, 0x36, 0xdf, 0x91, 0x64, 0x01, 0x89, 0x1c, 0x17, 0x8b, 0xc8, 0x3b, 0x90, 0x8c, 0xea, 0x3f, 0xa5, 0x91, 0xe1, 0x2a, 0xff, 0x8f, 0xe2, 0xdf, 0x9c, 0xfa, 0x00, 0xdf, 0xf3, 0xb3, 0x91, 0xdc, 0xe7, 0x18, 0x25, 0xdb, 0xce, 0x98, 0xd8, 0x55, 0xff, 0xfa, 0x48, 0xc7, 0xf4, 0x17, 0xd4, 0xd6, 0x43, 0x2f, 0xe1, 0x2a, 0x0b, 0xeb, 0xf8, 0xfb, 0x14, 0xfe, 0x50, 0xcb, 0x06, 0x65, 0x01, 0x20, 0x20, 0x07, 0x16, 0x5b, 0x5f, 0xc3, 0x13, 0xfe, 0x6b, 0x17, 0x09, 0x06, 0x42, 0x34, 0x13, 0x3f, 0x16, 0xe5, 0x05, 0x6f, 0x4a, 0x53, 0x28, 0xe1, 0x06, 0x5e, 0x39, 0xfe, 0x57, 0xd3, 0x16, 0x36, 0x2b, 0x91, 0x72, 0x47, 0xcf, 0xe2, 0x4e, 0x0d, 0x13, 0x0a, 0x07, 0xb7, 0xfe, 0x61, 0xe7, 0xd6, 0xf3, 0xef, 0x46, 0xcc, 0xf2, 0xdb, 0xaf, 0xe5, 0x33, 0xef, 0xf2, 0xfd, 0x90, 0x07, 0x01, 0xbf, 0x02, 0xca, 0x0c, 0x1f, 0xff, 0xb7, 0xf6, 0x0b, 0x0b, 0x0b, 0xc3, 0x97, 0x1a, 0x26, 0x02, 0xce, 0xa7, 0x0e, 0x7e, 0xcb, 0xd6, 0xf2, 0x33, 0xde, 0x07, 0xee, 0xa5, 0xce, 0x12, 0xf7, 0x54, 0x03, 0x95, 0xd9, 0x07, 0xd5, 0xf6, 0x22, 0x23, 0xec, 0xa6, 0x02, 0xcb, 0xd6, 0xf9, 0xd8, 0xe1, 0xef, 0xba, 0xde, 0x07, 0xd3, 0xc0, 0x2f, 0xd3, 0xcc, 0xe1, 0x05, 0xef, 0xfa, 0xed, 0x07, 0xc3, 0x0e, 0x0b, 0xfb, 0xd5, 0xf8, 0xf8, 0x03, 0xe1, 0x36, 0x07, 0xdf, 0x0e, 0x3e, 0xe3, 0xd3, 0x05, 0x51, 0x03, 0xfa, 0x01, 0x06, 0x2b, 0x0a, 0x06, 0xf1, 0x3f, 0x15, 0x18, 0xef, 0x2b, 0xc7, 0xda, 0x4e, 0x4f, 0x0a, 0xf6, 0xdf, 0xfb, 0x25, 0x44, 0x12, 0x0d, 0x06, 0xf7, 0x05, 
    0x2d, 0x1f, 0x0e, 0x3f, 0x0f, 0xe3, 0xef, 0x45, 0x2f, 0x11, 0xdf, 0x0c, 0x25, 0xfe, 0x23, 0x49, 0x00, 0xfe, 0x1c, 0xfe, 0x36, 0xfb, 0xdb, 0x58, 0x3b, 0xbe, 0x32, 0x57, 0xe7, 0xda, 0x06, 0x6a, 0x0f, 0xf7, 0x32, 0x5f, 0x05, 0xc5, 0x37, 0xff, 0x75, 0x1f, 0xd2, 0x17, 0x37, 0x22, 0x0f, 0x2b, 0xf8, 0x2f, 0x17, 0xfe, 0x2f, 0x32, 0x0d, 0x06, 0x1b, 0xf4, 0xee, 0x43, 0x05, 0xc6, 0x2a, 0xf6, 0xe8, 0x07, 0xf7, 0xee, 0x17, 0xfb, 0xdb, 0xd6, 0x0d, 0xff, 0xf6, 0x12, 0xdb, 0xe0, 0xca, 0xef, 0xfc, 0x00, 0xf2, 0xc4, 0xdf, 0xff, 0xe3, 0xac, 0xbe, 0xf5, 0xf2, 0xd7, 0xa5, 0xbd, 0xcb, 0x0e, 0xf7, 0x98, 0xae, 0xf4, 0xf5, 0xde, 0xbf, 0xd3, 0x08, 0xe7, 0x9a, 0xf6, 0xe4, 0xc7, 0xe5, 0xbf, 0xf3, 0xd8, 0xf8, 0xeb, 0xb9, 0xce, 0xdb, 0x08, 0xf8, 0xeb, 0xdb, 0xd8, 0x2a, 0x1f, 0xb6, 0xdf, 0x25, 0xcb, 0xf1, 0xeb, 0x08, 0x1e, 0xc9, 0xd9, 0x04, 0xff, 0x08, 0x07, 0xaf, 0x32, 0xf4, 0xdb, 0xf2, 0xf8, 0x0c, 0x07, 0x06, 0x1a, 0xf9, 0xfb, 0xce, 0xfd, 0x1b, 0x03, 0x11, 0xf5, 0xe4, 0x22, 0x1b, 0x0e, 0x07, 0x16, 0x02, 0x2b, 0x0a, 0xff, 0x17, 0x10, 0x36, 0x07, 0xec, 0x13, 0x41, 0x1e, 0xfc, 0x2b, 0x2b, 0x09, 0x02, 0x2e, 0x0a, 0x21, 0x19, 0x2b, 0x27, 0x14, 0x1e, 0x10, 0x04, 0x15, 0x37, 0x12, 0x29, 0xee, 0x1f, 0x0c, 0x0e, 0x49, 0x41, 0x02, 0x16, 0x0a, 0x1e, 0x41, 0xfb, 0x1e, 0xfe, 0x0c, 0x25, 0x11, 0xfa, 0xf7, 0x12, 0xf5, 0x44, 0x05, 0xf1, 0xfe, 0x13, 0x1b, 0xff, 0x09, 0xff, 0x07, 0x1a, 0x05, 0xf8, 0x07, 0x0c, 0xfe, 0x04, 0xda, 0x02, 0x32, 0xfb, 0xd4, 0x12, 0x32, 0x03, 0xfa, 0xff, 0xec, 0x07, 0x07, 0xd1, 0x13, 0x30, 0xff, 0xf8, 0x0b, 0x2a, 0x16, 0x10, 0x0a, 
    0x21, 0x02, 0x28, 0x03, 0xfc, 0x3e, 0x0e, 0xfe, 0x1b, 0x13, 0xfb, 0x12, 0x08, 0x04, 0x0e, 0x1b, 0xee, 0x03, 0xf2, 0x0c, 0x33, 0x07, 0xed, 0xec, 0x11, 0xf2, 0xf5, 0xe6, 0xf8, 0xf3, 0xfe, 0xf2, 0xe5, 0xde, 0x0c, 0xc6, 0xd4, 0xf8, 0xf4, 0xdf, 0xd1, 0xde, 0xe0, 0xcf, 0xec, 0xd2, 0xbc, 0xd5, 0xdc, 0xcd, 0xd4, 0xd8, 0xcb, 0xb8, 0xe1, 0xdb, 0xde, 0xd5, 0xc9, 0xe3, 0xed, 0xcd, 0xde, 0xf1, 0xe2, 0xdc, 0xd0, 0xfc, 0x06, 0xc1, 0xde, 0xf9, 0xcf, 0xe6, 0x06, 0xe1, 0xfd, 0xea, 0xeb, 0xe1, 0xfa, 0xfe, 0x02, 0xec, 0xeb, 0x02, 0xfc, 0xfa, 0xfb, 0xf6, 0xfc, 0x15, 0xfc, 0xd9, 0xfe, 0x06, 0xfb, 0x0b, 0xfe, 0x0d, 0x0d, 0xeb, 0xf5, 0xeb, 0xe9, 0xb9, 0xb5, 0x1f, 0x11, 0x01, 0xf9, 0xf7, 0xf7, 0xf8, 0xf9, 0xfe, 0x06, 0x10, 0x0a, 0xf8, 0xeb, 0x0c, 0x1a, 0xfd, 0xe5, 0xe5, 0xf3, 0xf9, 0x06, 0x0b, 0x08, 0x06, 0x1b, 0x24, 0x0f, 0xf7, 0xec, 0xed, 0xec, 0xef, 0xf5, 0xfd, 0x04, 0xfe, 0xfc, 0x07, 0x10, 0x0d, 0x03, 0x00, 0xf7, 0xf7, 0x06, 0x1f, 0x16, 0x02, 0xfc, 0xfc, 0xf1, 0xe0, 0xdb, 0xdc, 0xed, 0x07, 0x24, 0x1a, 0x0d, 0x18, 0x26, 0x0b, 0xe9, 0xfa, 0x06, 0xff, 0xec, 0xe3, 0xf8, 0x10, 0x0d, 0xf1, 0xe4, 0xeb, 0xed, 0xfb, 0x0a, 0x12, 0x0b, 0x1c, 0x36, 0x33, 0x10, 0xf0, 0xe6, 0xe5, 0xe4, 0xd7, 0xcd, 0xdc, 0x01, 0x20, 0x24, 0x08, 0x01, 0x15, 0x20, 0x1d, 0x08, 0xf0, 0xeb, 0xf0, 0xfa, 0x03, 0x08, 0x01, 0xf4, 0xed, 0xea, 0xeb, 0xf0, 0xfe, 0x0c, 0x15, 0x1b, 0x1f, 0x13, 0xfb, 0xef, 0xf5, 0x07, 0x12, 0xfb, 0xec, 0xf2, 0xfe, 0xf2, 0xec, 0xfa, 0x01, 0x01, 0xf7, 0xf4, 0x0f, 0x20, 0x16, 0x02, 0x0d, 0x17, 0x08, 0xf9, 0xef, 0xeb, 0xe7, 0xe0, 0xe6, 0xfc, 0x13, 
    0x0b, 0xfd, 0xff, 0x04, 0x0e, 0x1c, 0x28, 0x0e, 0xef, 0xe7, 0xf8, 0xf6, 0xea, 0xeb, 0xf7, 0x0c, 0x0d, 0xf3, 0xf5, 0x08, 0x14, 0x0b, 0x06, 0x00, 0xf4, 0xf3, 0x04, 0x13, 0x0a, 0xf8, 0xe9, 0xed, 0x05, 0x1f, 0x1a, 0xf2, 0xcb, 0xd3, 0xfc, 0x14, 0x25, 0x23, 0x12, 0xfa, 0xf6, 0x02, 0x07, 0xfc, 0xe3, 0xda, 0xf8, 0x0b, 0x08, 0xfd, 0x05, 0x07, 0x08, 0x13, 0x1a, 0x06, 0xe9, 0xeb, 0xf7, 0x02, 0x05, 0x03, 0xfc, 0xf7, 0xf8, 0xfe, 0xfd, 0xf8, 0xfb, 0x01, 0x06, 0x0d, 0x17, 0x19, 0x0a, 0xf6, 0xe6, 0xf6, 0x0e, 0xf8, 0xdb, 0xd9, 0xf8, 0x13, 0x1c, 0x16, 0x0d, 0x0b, 0x04, 0xf2, 0xe8, 0xed, 0x02, 0x19, 0x14, 0x07, 0xfe, 0xf9, 0xf5, 0xfd, 0x05, 0xf2, 0xd5, 0xd1, 0xf5, 0x2d, 0x39, 0x13, 0xe8, 0xfb, 0x1e, 0x1d, 0x07, 0xe6, 0xde, 0xf3, 0xfc, 0xfd, 0xfb, 0xf7, 0xf6, 0xf8, 0xfd, 0x02, 0x06, 0x0b, 0x11, 0x16, 0x11, 0x05, 0xf9, 0x01, 0x06, 0xf8, 0xe9, 0xe5, 0xf4, 0x09, 0xf7, 0xe5, 0xf6, 0x21, 0x1c, 0xf8, 0xed, 0xfd, 0x22, 0x2b, 0xfe, 0xf2, 0xff, 0x05, 0xf5, 0xe4, 0xe4, 0xf4, 0x05, 0x04, 0xf8, 0xf5, 0x04, 0x13, 0x10, 0xf6, 0x05, 0x1d, 0x0f, 0xf6, 0xf1, 0x05, 0x11, 0x03, 0xe4, 0xd1, 0xe5, 0xf1, 0xfd, 0x17, 0x29, 0x1b, 0xfd, 0x00, 0x00, 0xf9, 0xf2, 0xf9, 0x02, 0x04, 0x01, 0xfd, 0x04, 0x10, 0x12, 0xfa, 0xd8, 0xca, 0xf4, 0x11, 0x0e, 0x08, 0x08, 0x19, 0x2a, 0x21, 0x05, 0xe4, 0xce, 0xd1, 0xe9, 0x02, 0x0e, 0x0a, 0x16, 0x27, 0x09, 0xe6, 0xdd, 0xf2, 0xfd, 0x05, 0x0d, 0x11, 0x12, 0x0d, 0x06, 0x00, 0xf8, 0xeb, 0xdf, 0xe2, 0xf1, 0x04, 0x14, 0x19, 0x12, 0x05, 0xfb, 0x01, 0x11, 0x1a, 0xf2, 0xd1, 0xdb, 0xfc, 0x14, 0x12, 0x04, 0x02, 0x04, 0xf8, 0xde, 0xf1, 
    0x0d, 0x14, 0x08, 0xff, 0x00, 0x05, 0x0e, 0x0e, 0xfe, 0xe4, 0xdd, 0xed, 0x08, 0x1b, 0x10, 0xfd, 0xfc, 0xfd, 0xfc, 0xf7, 0xf4, 0xff, 0x09, 0x06, 0xf9, 0xfe, 0x10, 0x15, 0x0a, 0xf1, 0xe6, 0xfa, 0x03, 0xfd, 0xf4, 0xf1, 0x01, 0x09, 0xfd, 0xf5, 0x03, 0x18, 0x13, 0x07, 0xfc, 0xf6, 0xf8, 0xfa, 0xfd, 0x01, 0xff, 0xf6, 0xf3, 0x03, 0x0a, 0x02, 0xf5, 0xf1, 0xf5, 0xfb, 0x01, 0x08, 0x11, 0x1a, 0x1b, 0x0b, 0xf7, 0xf0, 0x03, 0xfa, 0xda, 0xce, 0xda, 0xf8, 0x13, 0x23, 0x24, 0x1a, 0x0d, 0x01, 0xfd, 0xf6, 0xea, 0xe2, 0xf4, 0x18, 0x20, 0x13, 0xfa, 0xe5, 0xe5, 0xf0, 0xf9, 0xf8, 0xf0, 0xf8, 0x0f, 0x17, 0x1b, 0x1e, 0x1d, 0x07, 0xf9, 0xf7, 0xef, 0xdb, 0xd2, 0xe4, 0xfb, 0x11, 0x1e, 0x1c, 0x0e, 0xf8, 0xeb, 0xf1, 0x0c, 0x17, 0x02, 0xf9, 0xff, 0x0c, 0x10, 0x01, 0xec, 0xe5, 0xec, 0xfe, 0x02, 0xf7, 0xfc, 0x0a, 0x10, 0x01, 0x01, 0x06, 0x07, 0x06, 0x08, 0x04, 0xf8, 0xf2, 0xf4, 0xfb, 0x00, 0x00, 0xfe, 0xf8, 0xf1, 0xe9, 0xf5, 0x15, 0x1f, 0x0f, 0x03, 0x19, 0x17, 0xfe, 0xe5, 0xd9, 0xec, 0x02, 0xff, 0xf8, 0xf9, 0x08, 0x17, 0x14, 0x05, 0xf7, 0xf4, 0xf0, 0xf5, 0x0b, 0x1f, 0x1d, 0x04, 0xe3, 0xec, 0x04, 0x04, 0xdb, 0xe2, 0x0d, 0x15, 0x0a, 0xfa, 0xfd, 0x16, 0x18, 0x08, 0xf8, 0x01, 0xf5, 0xdf, 0xeb, 0x07, 0x18, 0x0c, 0xf5, 0xeb, 0xf6, 0x06, 0x07, 0xfb, 0xf6, 0x02, 0x19, 0x1d, 0x09, 0xf7, 0xef, 0xf6, 0x01, 0x01, 0xf6, 0xec, 0xec, 0xf9, 0x06, 0x0c, 0x14, 0x11, 0x04, 0xf5, 0xf7, 0xff, 0x01, 0xff, 0xfb, 0x00, 0x09, 0x00, 0xf8, 0xfe, 0x0b, 0x00, 0xed, 0xe9, 0xf5, 0x0d, 0x16, 0x05, 0xf8, 0xf6, 0xff, 0x0a, 0x01, 0xfc, 0x06, 0x11, 0x11, 0x05, 0xf6, 0xea, 0xe6, 
    0xea, 0xf4, 0xf8, 0xfa, 0x02, 0x0f, 0x1d, 0x1e, 0x10, 0x08, 0x05, 0xfd, 0xe9, 0xe2, 0xe9, 0xf6, 0x04, 0x06, 0x02, 0x01, 0x06, 0x09, 0x03, 0xef, 0xf0, 0xfe, 0x08, 0x0c, 0x0c, 0x0d, 0x0f, 0x06, 0xf7, 0xef, 0xfb, 0xef, 0xe0, 0xe9, 0x08, 0x1f, 0x16, 0xfa, 0xe9, 0xf7, 0x0e, 0x08, 0x03, 0x03, 0x03, 0x05, 0x0d, 0x13, 0x08, 0xed, 0xce, 0xcb, 0xfd, 0x18, 0x10, 0x01, 0x01, 0x08, 0x0c, 0x0d, 0x08, 0xff, 0xfa, 0x00, 0x06, 0x05, 0xfa, 0xeb, 0xe4, 0xee, 0x00, 0x0e, 0x0e, 0x03, 0x03, 0x07, 0x08, 0x08, 0x04, 0x00, 0xf9, 0xf1, 0xf2, 0x04, 0x17, 0x03, 0xf0, 0xf1, 0xfd, 0xf8, 0xf9, 0x04, 0x04, 0xfe, 0xfe, 0x0b, 0x13, 0x17, 0x13, 0x06, 0xef, 0xe6, 0xee, 0xf4, 0xef, 0xe3, 0xe3, 0x03, 0x22, 0x2d, 0x20, 0x24, 0x16, 0xec, 0xcf, 0xd1, 0xec, 0x06, 0x14, 0x16, 0x10, 0x06, 0xec, 0xe3, 0xf2, 0xfe, 0xf5, 0xf0, 0x08, 0x1d, 0x25, 0x1c, 0x07, 0x0a, 0x08, 0xee, 0xd5, 0xd8, 0xed, 0xfa, 0x01, 0x02, 0x03, 0x0b, 0x18, 0x18, 0x02, 0xe9, 0xe8, 0x01, 0x18, 0x19, 0x08, 0xfd, 0x0d, 0x09, 0xf0, 0xdc, 0xd5, 0xe8, 0xf9, 0xf2, 0xf2, 0x05, 0x22, 0x34, 0x31, 0x1e, 0x08, 0xf6, 0xe8, 0xde, 0xde, 0xe8, 0xf7, 0x01, 0xfc, 0x03, 0x11, 0x13, 0x04, 0xf1, 0xf0, 0x03, 0x11, 0x0a, 0xfc, 0x0a, 0x0f, 0x06, 0xfd, 0xf9, 0xf6, 0xf5, 0xfe, 0x00, 0xf2, 0xe1, 0xe6, 0xfd, 0x13, 0x1b, 0x0c, 0x00, 0x07, 0x10, 0x16, 0x0f, 0xfc, 0xec, 0xea, 0xf0, 0xf3, 0xe8, 0xf1, 0x0f, 0x17, 0x0d, 0x00, 0xff, 0xfd, 0xfb, 0xf9, 0xfc, 0x05, 0x13, 0x1a, 0x0f, 0xf9, 0xf9, 0xeb, 0xf5, 0xeb, 0xe9, 0xb9, 0xb5, 0x14, 0x21, 0x20, 0x17, 0x19, 0x1a, 0x15, 0x14, 0x13, 0x12, 0x0f, 0x0e, 0x0c, 0x0a, 0x09, 0x07, 
    0x05, 0x03, 0x02, 0x00, 0xfe, 0xfc, 0xfa, 0xf9, 0xf7, 0xf5, 0xf3, 0xf1, 0xef, 0xee, 0xec, 0xea, 0xe8, 0xe6, 0xe5, 0xe3, 0xe1, 0xdf, 0xdd, 0xdc, 0xda, 0xd8, 0xd6, 0xd5, 0xd3, 0xd1, 0xd0, 0xce, 0xcc, 0xcb, 0xc9, 0xc7, 0xc6, 0xc4, 0xc3, 0xc1, 0xc0, 0xbe, 0xbd, 0xbb, 0xba, 0xb8, 0xb7, 0xb5, 0xb4, 0xb3, 0xb1, 0xb0, 0xae, 0xad, 0xac, 0xaa, 0xa9, 0xa8, 0xa6, 0xa6, 0xa6, 0xa2, 0xa2, 0xa3, 0xa0, 0x97, 0xae, 0xed, 0xf3, 0xe6, 0xe2, 0xed, 0xed, 0xea, 0xef, 0xf0, 0xf1, 0xf3, 0xf5, 0xf7, 0xf8, 0xfa, 0xfc, 0xfe, 0xff, 0x01, 0x03, 0x05, 0x07, 0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x12, 0x13, 0x15, 0x17, 0x19, 0x1b, 0x1d, 0x1e, 0x20, 0x22, 0x24, 0x26, 0x27, 0x29, 0x2b, 0x2d, 0x2e, 0x30, 0x32, 0x33, 0x35, 0x37, 0x38, 0x3a, 0x3c, 0x3d, 0x3f, 0x41, 0x42, 0x44, 0x45, 0x47, 0x48, 0x4a, 0x4b, 0x4d, 0x4e, 0x50, 0x51, 0x53, 0x54, 0x55, 0x57, 0x58, 0x59, 0x5b, 0x5c, 0x5d, 0x5f, 0x60, 0x5f, 0x63, 0x64, 0x63, 0x64, 0x6f, 0x5f, 0x5f,
    Last edited by Chris O.; Yesterday at 01:48 AM.

  10. #10
    The format is actually documented in doc/file_format_pmf.xlsx file. The signature is "pmfx" .. don't remember why I added "x" there but the signature must be 4 bytes to make the rest of the file data properly aligned, so had to add something (:

  11. #11
    Senior Member
    Join Date
    Dec 2013
    Posts
    238
    One more noob question: are you loading the music data from the SD card?
    The reason I'm asking is because I'm not sure if I can split the song data file and play it from let's say 126kb array buffer.
    Well perhaps I should read the documentation.
    Thanks

  12. #12
    You could load the music data from SD card and store it in flash, but it must exists in the memory all at once. Unlike mp3 which can be streamed, the PMF data is randomly accessed based on the played music data. For example when the player needs to play piano instrument, the data for that instrument must be in the memory. I suppose if you really wanted, you could implement sample caching mechanism to read it to flash from external storage in requested chunks, but not sure if the bandwidth would be enough for it.

  13. #13
    Senior Member
    Join Date
    Dec 2013
    Posts
    238
    Yeah I was afraid of this.

    I am actually loading a big music data file in 512k buffer now, plays beautiful if the file is not too large for the destination array buffer.
    Funny part is it will play even if buffer is too small just hearing some random noises
    Code:
    //============================================================================
    // SD FILE music data storage
    //============================================================================
    uint8_t SD_MusicData[512000] DMAMEM; // Upper MEMORY
    uint32_t array_counter = 0;
    //----------------------------------------------------------------------------
    EDIT:
    This plays with few random noises 736381 bytes
    modarchive.org hours.xm
    Code:
    // Song name: After Hours (hours.xm)
    //    Length: 65
    //  Channels: 30
    //      Size: 736381 bytes
    //  Exporter: PMF Converter v0.6 (PMF v1.4)
    0x70, 0x6d, 0x66, 0x78, 0x00, 0x14, 0x01, 0x00, 0x7d, 0x3c, 0x0b, 0x00, 0x90, 0x00, 0x00, 0x00, -- MORE CODE
    Last edited by Chris O.; Yesterday at 03:33 AM.

  14. #14
    Yeah, the sample data is stored at the end of the file which takes bulk of the file, so you just cut some of that data out but memory past your buffer is still referred from the sample metadata. Lucky for you Teensy doesn't have memory protection, because otherwise it would just crash

    I have thought of adding resampling to the converter, to be able to reduce the sample size and make larger music files to fit smaller flash by dropping quality. You could also to do this manually e.g. with OpenMPT, but it's more work.

  15. #15
    Senior Member
    Join Date
    Dec 2013
    Posts
    238
    TEENSY 4.0 - PMF Player - SdFat version 2.0.0 BETA ONLY - 512k array buffer example.
    Code:
    //============================================================================
    // PMF Player SdFat v2 BETA example.
    //
    // Copyright (c) 2019, Profoundic Technologies, Inc.
    // All rights reserved.
    //----------------------------------------------------------------------------
    // Redistribution and use in source and binary forms, with or without
    // modification, are permitted provided that the following conditions are met:
    //     * Redistributions of source code must retain the above copyright
    //       notice, this list of conditions and the following disclaimer.
    //     * Redistributions in binary form must reproduce the above copyright
    //       notice, this list of conditions and the following disclaimer in the
    //       documentation and/or other materials provided with the distribution.
    //     * Neither the name of Profoundic Technologies nor the names of its
    //       contributors may be used to endorse or promote products derived from
    //       this software without specific prior written permission.
    //
    // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    // ARE DISCLAIMED. IN NO EVENT SHALL PROFOUNDIC TECHNOLOGIES BE LIABLE FOR ANY
    // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
    // THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    //============================================================================
    #include "pmf_player.h"
    
    //============================================================================
    // music data
    //============================================================================
    static const uint8_t PROGMEM s_pmf_file[] =
    {
    #include "music.h"
    };
    //----------------------------------------------------------------------------
    
    //============================================================================
    // SD FILE music data storage
    //============================================================================
    uint8_t SD_MusicData[512000] DMAMEM; // Upper MEMORY
    uint32_t array_counter = 0;
    //----------------------------------------------------------------------------
    
    //============================================================================
    // globals
    //============================================================================
    static pmf_player s_player;
    static unsigned s_effect_channel = 0;
    
    char SDPmfIDCheck[14] = {};
    char PmfID[14] = {'/', '/', ' ', 'S', 'o', 'n', 'g', ' ', 'n', 'a', 'm', 'e', ':', ' '}; // Profoundic Music File format - TEXT ID
    
    //----------------------------------------------------------------------------
    
    //============================================================================
    // SdFat version 2.0.0 BETA ONLY
    //============================================================================
    #include <SdFat.h> // SdFat V "2.0.0"
    
    // Use built-in SD for SPI modes on Teensy 3.5/3.6.
    // Teensy 4.0 use first SPI port.
    // SDCARD_SS_PIN is defined for the built-in SD on some boards.
    #ifndef SDCARD_SS_PIN
    const uint8_t SD_CS_PIN = SS;
    #else  // SDCARD_SS_PIN
    // Assume built-in SD is used.
    const uint8_t SD_CS_PIN = SDCARD_SS_PIN;
    #endif  // SDCARD_SS_PIN
    
    // SD_FAT_TYPE = 0 for SdFat/File as defined in SdFatConfig.h,
    // 1 for FAT16/FAT32, 2 for exFAT, 3 for FAT16/FAT32 and exFAT.
    #define SD_FAT_TYPE 3
    
    SdFat SD;
    // The file to be parsed.
    File m_pSource;
    unsigned int FILESIZE;
    
    const int DIR_max = 100; // [# of Directory - max]
    const int max_DIR_name_lenght = 100;
    char CURDIRname[max_DIR_name_lenght] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; // Elements with missing values will be initialized to 0;
    uint32_t DIRcount = 1; // COUNT of all DIRs on SD CARD
    char DIR_list_array[DIR_max][max_DIR_name_lenght]; // [# of DIRs max][max DIR name lenght];
    //----------------------------------------------------------------------------
    
    //============================================================================
    // row_callback_test
    //============================================================================
    void row_callback_test(void *custom_data_, uint8_t channel_idx_, uint8_t &note_idx_, uint8_t &inst_idx_, uint8_t &volume_, uint8_t &effect_, uint8_t &effect_data_)
    {
      if (channel_idx_ == s_effect_channel)
      {
        static unsigned s_counter = 1;
        if (--s_counter == 0)
        {
          note_idx_ = 0 + 5 * 12; // C-5 (note+octave*12, note: 0=C, 1=C#, 2=D, 3=D#, 4=E, 5=F, 6=F#, 7=G, 8=G#, 9=A, 10=A#, 11=B)
          inst_idx_ = 2;    // sample 2
          volume_ = 63;     // volume 63 (max)
          s_counter = 8;    // hit note every 8th row
        }
      }
    }
    //----------------------------------------------------------------------------
    
    
    //============================================================================
    // example visualization (animate LED's for each track with music)
    //============================================================================
    #ifdef ARDUINO_ARCH_AVR
    enum {start_led_pin = 8};
    enum {max_channel_leds = 6};
    #else
    enum {start_led_pin = 0};
    enum {max_channel_leds = 8};
    #endif
    static void example_visualization(void *player_)
    {
      const pmf_player *player = (const pmf_player*)player_;
      unsigned num_channels = min(max_channel_leds, player->num_playback_channels());
      for (unsigned i = 0; i < num_channels; ++i)
      {
        pmf_channel_info chl = player->channel_info(i);
        digitalWrite(start_led_pin + i, chl.note_hit ? HIGH : LOW);
      }
    }
    //----
    
    void setup_example_visualization(pmf_player &player_)
    {
      for (unsigned i = 0; i < max_channel_leds; ++i)
      {
        pinMode(start_led_pin + i, OUTPUT);
        digitalWrite(start_led_pin + i, LOW);
      }
      player_.set_tick_callback(&example_visualization, &player_);
    }
    //----------------------------------------------------------------------------
    
    
    //============================================================================
    // setup
    //============================================================================
    void setup()
    {
    
    #if PMF_USE_SERIAL_LOGS==1
      // setup serial logging
      Serial.begin(9600);
      while (!Serial && millis() < 10000) {}  // wait for Serial Monitor with 10s. timeout.
    #endif
    
      if (!SD.begin(SdioConfig(FIFO_SDIO))) { // SdFat.h Ver 2.0.0 Beta
        Serial.println("m.SD initialization failed!");
        s_player.load(s_pmf_file); // play from h. file
        Serial.println(F(" Playing from h. file"));
      } else {
        Serial.println("m.SD initialization OK");
    
        LISTDIRs();
    
        m_pSource = SD.open("/"); // ROOT
        PrintFiles(m_pSource);
        m_pSource.close();
    
    
        // # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
        // ###########          Please choose ONE file only          #################
        //char FilenameIn[255] = "UnreaL 2ND_PM.pmf"; // Please choose a file
        char FilenameIn[255] = "superclear.pmf"; // Please choose a file
        // char FilenameIn[255] = "hours.pmf"; // Please choose a file
        // # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
    
        m_pSource = SD.open(FilenameIn, FILE_READ); //FILE *m_pSource;
    
        if (SD.exists(FilenameIn)) {
          Serial.print(F("\t File exists ~ ")), Serial.println(FilenameIn);
          int len = strlen(FilenameIn);
          char *extension = FilenameIn + len - 4;
          if (!strcmp(".pmf", extension) || !strcmp(".PMF", extension)) { // PMF File Format
            FILESIZE = m_pSource.size(); // get FILE SIZE
            Serial.print("\t PMF player Audio File Format Supported  ~  "), Serial.println(FilenameIn);
    
            ParsePmfHeader( m_pSource.curPosition() );
            s_player.load(SD_MusicData); // play from SD buffered file
          }
        }  else {
          Serial.print(F("Error (")), Serial.print(FilenameIn), Serial.println(F("), file does not exist. Please choose another file"));
          Serial.println(F(" Playing from h. file"));
          s_player.load(s_pmf_file); // play from h. file
        }
      }
      m_pSource.close();
    
    
      /*
        // Uncomment this code block to enable basic LED visualization (make sure pins don't conflic with used audio device)
        setup_example_visualization(s_player);
      */
    
      /*
        // Uncomment this code block to demo code-controlled effect. The code adds 13th channel to Aryx and plays drum beat every 8th row on the channel
        s_effect_channel=s_player.num_playback_channels();
        s_player.enable_playback_channels(s_player.num_playback_channels()+1); // add one extra audio channel for audio effects
        s_player.set_row_callback(&row_callback_test); // setup row callback for the effect
      */
    
      s_player.start(22050);
    }
    //----------------------------------------------------------------------------
    
    
    //============================================================================
    // loop
    //============================================================================
    void loop()
    {
      s_player.update(); // keep updating the audio buffer...
    }
    //----------------------------------------------------------------------------
    
    
    // # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
    //============================================================================
    //------------ LIST ALL DIRs ON SD CARD & SAVE IN DIR_list_array -------------
    //============================================================================
    void LISTDIRs() {
      Serial.println("\t**List Directories**");
      m_pSource = SD.open("/"); // ROOT
      char dirname[max_DIR_name_lenght]; // SDFAT // max_DIR_name_lenght
      if (m_pSource.isDirectory()) {
        strcpy(DIR_list_array[DIRcount], "/"); // array
    
        Serial.print("ROOT# ");
        Serial.print(DIRcount);
        Serial.print("\t");
        Serial.println(DIR_list_array[DIRcount]); // SDFAT LIB
        DIRcount++;
      }
      while (true) {
        File DIR = m_pSource.openNextFile();
    
        if (! DIR) {
          // no more files
          Serial.println("\t **no more Directories** ");
          //dir.close();
          break;
        }
        DIR.getName(dirname, sizeof(dirname));
        if (DIR.isDirectory()) {
          //DIRcount++;
          strcpy(DIR_list_array[DIRcount], dirname); // array
          strcat(DIR_list_array[DIRcount], "/");
          Serial.print("DIR# ");
          Serial.print(DIRcount);
          Serial.print("\t");
          Serial.println(DIR_list_array[DIRcount]); // SDFAT LIB
          DIRcount++;
        }
        DIR.close();
      }
      DIRcount --;
      Serial.print("\t **Directory count ");
      Serial.print(DIRcount), Serial.println(" **"), Serial.println();
      m_pSource.close();
    }
    
    //============================================================================
    // Print Files in Cur. Directory
    //============================================================================
    void PrintFiles(File dir) {
      Serial.println("\t**List Files in Cur. Directory**");
      char filename[max_DIR_name_lenght]; // SDFAT
      while (true) {
    
        File entry = dir.openNextFile();
        if (! entry) {
          // no more files
          Serial.println("\t **no more files**"), Serial.println();
          break;
        }
        entry.getName(filename, sizeof(filename));
    
        if (entry.isDirectory()) {
        } else {
          Serial.print(filename); // SDFAT LIB
          // files have sizes, directories do not
          Serial.print("       \t");
          Serial.println(entry.size(), DEC);
        }
        entry.close();
      }
    }
    //----------------------------------------------------------------------------
    
    //============================================================================
    //   Parse File Header.
    //============================================================================
    // Read a single character.
    byte Get(int _CurfilePos )
    {
      byte in = (m_pSource.read());
      // Serial.print("ASCII "), Serial.write(in), Serial.print(" DEC "), Serial.print(in), Serial.println();
      if (!m_pSource.available()) { // available(), number of bytes available from the current position to EOF
        Serial.println("Unexpected EOF while reading file");
      }
      return byte(in);
    }
    //----------------------------------------------------------------------------
    
    //============================================================================
    // Read text Pmf ID, (1st 14 Characters -->>// Song name: <<)
    //============================================================================
    void ReadPmfID(int filepos)
    {
      Serial.println("\t-- Reading PMF Text Header (Profoundic Music File): "); // DEBUG
      SDPmfIDCheck[0] = Get(m_pSource.curPosition());
      SDPmfIDCheck[1] = Get(m_pSource.curPosition());
      SDPmfIDCheck[2] = Get(m_pSource.curPosition());
      SDPmfIDCheck[3] = Get(m_pSource.curPosition());
      SDPmfIDCheck[4] = Get(m_pSource.curPosition());
      SDPmfIDCheck[5] = Get(m_pSource.curPosition());
      SDPmfIDCheck[6] = Get(m_pSource.curPosition());
      SDPmfIDCheck[7] = Get(m_pSource.curPosition());
      SDPmfIDCheck[8] = Get(m_pSource.curPosition());
      SDPmfIDCheck[9] = Get(m_pSource.curPosition());
      SDPmfIDCheck[10] = Get(m_pSource.curPosition());
      SDPmfIDCheck[11] = Get(m_pSource.curPosition());
      SDPmfIDCheck[12] = Get(m_pSource.curPosition());
      SDPmfIDCheck[13] = Get(m_pSource.curPosition());
      //Serial.println(m_pSource.curPosition()); // DEBUG
    }
    //----------------------------------------------------------------------------
    
    //============================================================================
    // interpret the ascii digits in[0] and in[1] as hex
    // notation and convert to an integer 0..255.
    //============================================================================
    int hex8(char *in)
    {
      uint8_t c, h;
    
      c = in[0];
    
      if (c <= '9' && c >= '0') {
        c -= '0';
      }
      else if (c <= 'f' && c >= 'a') {
        c -= ('a' - 0x0a);
      }
      else if (c <= 'F' && c >= 'A') {
        c -= ('A' - 0x0a);
      }
      else return (-1);
    
      h = c;
    
      c = in[1];
    
      if (c <= '9' && c >= '0') {
        c -= '0';
      }
      else if (c <= 'f' && c >= 'a') {
        c -= ('a' - 0x0a);
      }
      else if (c <= 'F' && c >= 'A') {
        c -= ('A' - 0x0a);
      }
      else return (-1);
    
      return ( h << 4 | c);
    }
    //----------------------------------------------------------------------------
    
    //============================================================================
    // Parse Pmf Header
    //============================================================================
    void ParsePmfHeader(int _Fpos)
    {
    
      Serial.println();
      Serial.println("\t--BEGIN -- Parse Text Header of PMF file, 1st 14 characters");
      if (m_pSource.isDirectory()) {
        Serial.println(" / ");
      } else {
        char filename[255]; // SDFAT
        m_pSource.getName(filename, sizeof(filename)); // SDfat
        const char* n = filename; // SDfat
        Serial.print("\t-- The file to be parsed -> "), Serial.print(n);
        // files have sizes, directories do not
        Serial.print("\t size: ");
        Serial.println(m_pSource.size(), DEC);
      }
      int filepos = _Fpos; // m_pSource.curPosition();
      bool PMF_check = 1;
      ReadPmfID(filepos);
      PMF_check = memcmp(SDPmfIDCheck, PmfID, sizeof(SDPmfIDCheck)); // compares 2 chuncks of memory.
      if (PMF_check == 0)
      {
        Serial.print("\t-- Text Header matches OK");
        Serial.println();
    
        m_pSource.seekSet (0);
    
        // Parsing Header Text
        char a = 0;
        char b = 0;
        char c = 0;
        while (a != 'x' && b != '7' && c != '0' ) {
          char y;
          y = (m_pSource.read()); // read next char
    
          if (y == '0') {
            char temp2 = y;
            y = (m_pSource.read());
            if (y != 'x') { //
              Serial.print(temp2);
              Serial.print(y);
            }
          } else if (y == 10) { // 10 0x0A, LF  Line Feed
            Serial.println();
          } else {
            if (y != 'x') {
              Serial.print(y);
            }
          }
    
          if (y == 'x') {
            char temp1 = y;
            y = (m_pSource.read()); // read next char
            if (y == '7') {
              y = (m_pSource.read());
              if (y == '0') {
                a = 'x';
                b = '7';
                c = y;
                uint32_t fpos = m_pSource.curPosition ();
                m_pSource.seekSet(fpos - 4); // now ready for Header Data
              }
            } else if (y != '7') {
              Serial.print(temp1);
              Serial.print(y);
            }
          }
        }
    
        // Parsing Header Data
        while (m_pSource.available()) {
          char x;
          x = (m_pSource.read());
    
          if (x == '0') {
            x = (m_pSource.read()); // read next char
            if (x == 'x') { //
              char tmp[2];
              int n = 0;
              tmp[0] = (m_pSource.read());
              tmp[1] = (m_pSource.read());
              // tmp now has two char hex value
              n = strtol(tmp, NULL, 16); // n has numeric value
              SD_MusicData[array_counter] = (char)n; // SD_MusicData[X] has character value
    
              if (array_counter < 5) {
                if (array_counter == 0) {
                  Serial.print(" DATA Header: ");
                }
                Serial.write(SD_MusicData[array_counter]);
              }
    
              array_counter++;
              if (array_counter >= sizeof SD_MusicData) {
                Serial.println(), Serial.println();
                Serial.println(" Error file is too large for destination buffer ( : ");
                Serial.print(" byte counter : "), Serial.println(array_counter);
                array_counter = 0;
                return;
              }
            }
          } else if (x == 13) { // 13  0x0D, CR  Carriage Return
            x = (m_pSource.read()); // read next char
            if (x == 10) { // 10 0x0A, LF  Line Feed
            }
          }
        }
      } else {
        Serial.print("No luck");
      }
    
      Serial.print(" , Size after conversion : "), Serial.println(array_counter), Serial.println();
      array_counter = 0;
    }
    //----------------------------------------------------------------------------

    in setup() choose ONE file only
    Code:
    // # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
        // ###########          Please choose ONE file only          #################
        //char FilenameIn[255] = "UnreaL 2ND_PM.pmf"; // Please choose a file
        char FilenameIn[255] = "superclear.pmf"; // Please choose a file
        // char FilenameIn[255] = "hours.pmf"; // Please choose a file
        // # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
    Music files for SD card:
    Attached Files Attached Files

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •