this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

#1566: fixed CRT_MONITOR option, added --soft cmd option to enable software rendering using SDL2 only

nesbox d07ad7fd b1d24e60

+288 -268
+41 -125
.github/workflows/build.yml
··· 7 7 8 8 jobs: 9 9 10 - # === Windows XP SDL2 === 11 - winxp-sdl: 10 + # === Windows XP === 11 + winxp: 12 12 runs-on: windows-latest 13 13 14 14 steps: ··· 27 27 - name: Deploy 28 28 uses: actions/upload-artifact@v2 29 29 with: 30 - name: 'tic80-winxp-sdl' 30 + name: 'tic80-winxp' 31 31 path: build/bin/tic80.exe 32 32 33 33 - name: Deploy stubs 34 34 uses: actions/upload-artifact@v2 35 35 with: 36 - name: 'tic80-winxp-sdl-stub' 36 + name: 'tic80-winxp-stub' 37 37 path: build/bin/tic80*.exe 38 38 39 - # === Windows SDL2 === 40 - windows-sdl: 39 + # === Windows === 40 + windows: 41 41 runs-on: windows-latest 42 42 43 43 steps: ··· 50 50 shell: cmd 51 51 run: | 52 52 cd build 53 - cmake -G "Visual Studio 16 2019" -DCMAKE_BUILD_TYPE=%BUILD_TYPE% -DBUILD_STUB=On .. 53 + cmake -G "Visual Studio 16 2019" -DBUILD_SDLGPU=On -DCMAKE_BUILD_TYPE=%BUILD_TYPE% -DBUILD_STUB=On .. 54 54 cmake --build . --config %BUILD_TYPE% --parallel 55 55 56 56 - name: Deploy 57 57 uses: actions/upload-artifact@v2 58 58 with: 59 - name: 'tic80-windows-sdl' 59 + name: 'tic80-windows' 60 60 path: build/bin/tic80.exe 61 61 62 62 - name: Deploy stubs 63 63 uses: actions/upload-artifact@v2 64 64 with: 65 - name: 'tic80-windows-sdl-stub' 65 + name: 'tic80-windows-stub' 66 66 path: build/bin/tic80*.exe 67 67 68 - # === Windows SDLGPU === 69 - windows-sdlgpu: 70 - runs-on: windows-latest 71 - 72 - steps: 73 - - uses: actions/checkout@v2 74 - with: 75 - submodules: recursive 76 - fetch-depth: 0 77 - 78 - - name: Build 79 - shell: cmd 80 - run: | 81 - cd build 82 - cmake -G "Visual Studio 16 2019" -DBUILD_SDLGPU=On -DCMAKE_BUILD_TYPE=%BUILD_TYPE% -DBUILD_STUB=On .. 83 - cmake --build . --config %BUILD_TYPE% --parallel 84 - 85 - - name: Deploy 86 - uses: actions/upload-artifact@v2 87 - with: 88 - name: 'tic80-windows-sdlgpu' 89 - path: build/bin/tic80.exe 90 - 91 - # === Windows SDLGPU PRO === 92 - windows-sdlgpu-pro: 68 + # === Windows PRO === 69 + windows-pro: 93 70 runs-on: windows-latest 94 71 95 72 steps: ··· 129 106 name: 'tic80-windows-sokol' 130 107 path: build/bin/tic80.exe 131 108 132 - # === Ubuntu SDLGPU === 133 - linux-sdlgpu: 134 - runs-on: ubuntu-16.04 135 - 136 - steps: 137 - - uses: actions/checkout@v2 138 - with: 139 - submodules: recursive 140 - fetch-depth: 0 141 - 142 - - name: Install 143 - run: | 144 - sudo apt-get update 145 - sudo apt-get install libglu1-mesa-dev libasound2-dev libpulse-dev libaudio-dev libsamplerate0-dev -y 146 - 147 - - name: Build 148 - run: | 149 - cd build 150 - cmake -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DBUILD_SDLGPU=On -DBUILD_STUB=On .. 151 - cmake --build . --config $BUILD_TYPE --parallel 152 - cpack 153 - 154 - - name: Deploy DEB 155 - uses: actions/upload-artifact@v2 156 - with: 157 - name: 'tic80-linux-sdlgpu-deb' 158 - path: build/tic80.deb 159 - 160 - - name: Deploy ZIP 161 - uses: actions/upload-artifact@v2 162 - with: 163 - name: 'tic80-linux-sdlgpu' 164 - path: build/bin/tic80 165 - 166 - # === Ubuntu SDLGPU PRO === 167 - linux-sdlgpu-pro: 109 + # === Ubuntu PRO === 110 + linux-pro: 168 111 runs-on: ubuntu-16.04 169 112 170 113 steps: ··· 185 128 cmake --build . --config $BUILD_TYPE --parallel 186 129 cpack 187 130 188 - # === Ubuntu SDL2 === 189 - linux-sdl: 131 + # === Ubuntu === 132 + linux: 190 133 runs-on: ubuntu-16.04 191 134 192 135 steps: ··· 203 146 - name: Build 204 147 run: | 205 148 cd build 206 - cmake -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DBUILD_STUB=On .. 149 + cmake -DCMAKE_BUILD_TYPE=$BUILD_TYPE DBUILD_SDLGPU=On -DBUILD_STUB=On .. 207 150 cmake --build . --config $BUILD_TYPE --parallel 208 151 cpack 209 152 210 153 - name: Deploy DEB 211 154 uses: actions/upload-artifact@v2 212 155 with: 213 - name: 'tic80-linux-sdl-deb' 156 + name: 'tic80-linux-deb' 214 157 path: build/tic80.deb 215 158 216 159 - name: Deploy ZIP 217 160 uses: actions/upload-artifact@v2 218 161 with: 219 - name: 'tic80-linux-sdl' 162 + name: 'tic80-linux' 220 163 path: build/bin/tic80 221 164 222 165 - name: Deploy stubs 223 166 uses: actions/upload-artifact@v2 224 167 with: 225 - name: 'tic80-linux-sdl-stub' 168 + name: 'tic80-linux-stub' 226 169 path: build/bin/tic80* 227 170 228 171 # === Raspberry PI === ··· 387 330 name: 'tic80-nintendo-3ds' 388 331 path: build/bin/tic80.3dsx 389 332 390 - # === MacOS 10.15 SDL2 === 391 - macos-sdl: 333 + # === MacOS 10.15 === 334 + macos: 392 335 runs-on: macos-10.15 393 336 394 337 steps: ··· 403 346 - name: Build 404 347 run: | 405 348 cd build 406 - cmake -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DBUILD_STUB=On .. 349 + cmake -DCMAKE_BUILD_TYPE=$BUILD_TYPE DBUILD_SDLGPU=On -DBUILD_STUB=On .. 407 350 cmake --build . --config $BUILD_TYPE --parallel 408 351 cpack 409 352 cp *.dmg tic80.dmg ··· 411 354 - name: Deploy DMG 412 355 uses: actions/upload-artifact@v2 413 356 with: 414 - name: 'tic80-macos-sdl-dmg' 357 + name: 'tic80-macos-dmg' 415 358 path: build/tic80.dmg 416 359 417 360 - name: Deploy 418 361 uses: actions/upload-artifact@v2 419 362 with: 420 - name: 'tic80-macos-sdl' 363 + name: 'tic80-macos' 421 364 path: build/bin/tic80 422 365 423 366 - name: Deploy stubs 424 367 uses: actions/upload-artifact@v2 425 368 with: 426 - name: 'tic80-macos-sdl-stub' 369 + name: 'tic80-macos-stub' 427 370 path: build/bin/tic80* 428 371 429 - # === MacOS 10.15 SDLGPU === 430 - macos-sdlgpu: 431 - runs-on: macos-10.15 432 - 433 - steps: 434 - - uses: actions/checkout@v2 435 - with: 436 - submodules: recursive 437 - fetch-depth: 0 438 - 439 - - name: Install 440 - run: brew uninstall --ignore-dependencies libidn2 441 - 442 - - name: Build 443 - run: | 444 - cd build 445 - cmake -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DBUILD_SDLGPU=On -DBUILD_STUB=On .. 446 - cmake --build . --config $BUILD_TYPE --parallel 447 - cpack 448 - cp *.dmg tic80.dmg 449 - 450 - - name: Deploy DMG 451 - uses: actions/upload-artifact@v2 452 - with: 453 - name: 'tic80-macos-sdlgpu-dmg' 454 - path: build/tic80.dmg 455 - 456 - # === MacOS 10.15 SDLGPU PRO === 457 - macos-sdlgpu-pro: 372 + # === MacOS 10.15 PRO === 373 + macos-pro: 458 374 runs-on: macos-10.15 459 375 460 376 steps: ··· 552 468 553 469 # === Export === 554 470 export: 555 - needs: [winxp-sdl, windows-sdl, linux-sdl, rpi, macos-sdl, wasm] 471 + needs: [winxp, windows, linux, rpi, macos, wasm] 556 472 runs-on: ubuntu-latest 557 473 558 474 steps: 559 475 - name: Download Windows XP artifact 560 476 uses: actions/download-artifact@v2 561 477 with: 562 - name: tic80-winxp-sdl 478 + name: tic80-winxp 563 479 path: winxpdir 564 480 565 481 - name: Download Windows artifact 566 482 uses: actions/download-artifact@v2 567 483 with: 568 - name: tic80-windows-sdl 484 + name: tic80-windows 569 485 path: windir 570 486 571 487 - name: Download Ubuntu artifact 572 488 uses: actions/download-artifact@v2 573 489 with: 574 - name: tic80-linux-sdl 490 + name: tic80-linux 575 491 path: linuxdir 576 492 577 493 - name: Download RPI artifact ··· 583 499 - name: Download MacOS artifact 584 500 uses: actions/download-artifact@v2 585 501 with: 586 - name: tic80-macos-sdl 502 + name: tic80-macos 587 503 path: macdir 588 504 589 505 - name: Download WASM artifact ··· 625 541 - name: Download Windows XP artifact 626 542 uses: actions/download-artifact@v2 627 543 with: 628 - name: tic80-winxp-sdl-stub 544 + name: tic80-winxp-stub 629 545 path: winxpdir 630 546 631 547 - name: Download Windows artifact 632 548 uses: actions/download-artifact@v2 633 549 with: 634 - name: tic80-windows-sdl-stub 550 + name: tic80-windows-stub 635 551 path: windir 636 552 637 553 - name: Download Ubuntu artifact 638 554 uses: actions/download-artifact@v2 639 555 with: 640 - name: tic80-linux-sdl-stub 556 + name: tic80-linux-stub 641 557 path: linuxdir 642 558 643 559 - name: Download RPI artifact ··· 649 565 - name: Download MacOS artifact 650 566 uses: actions/download-artifact@v2 651 567 with: 652 - name: tic80-macos-sdl-stub 568 + name: tic80-macos-stub 653 569 path: macdir 654 570 655 571 - name: Download WASM artifact ··· 691 607 with: 692 608 name: | 693 609 tic80-rpi 694 - tic80-macos-sdl 695 - tic80-winxp-sdl-stub 696 - tic80-windows-sdl-stub 697 - tic80-linux-sdl-stub 610 + tic80-macos 611 + tic80-winxp-stub 612 + tic80-windows-stub 613 + tic80-linux-stub 698 614 tic80-rpi-stub 699 - tic80-macos-sdl-stub 615 + tic80-macos-stub 700 616 tic80-wasm-stub
+1 -1
build/assets/config.tic.dat
··· 1 - 0x78, 0xda, 0xed, 0x3c, 0x4b, 0x73, 0x1b, 0xc9, 0x79, 0xb3, 0xd6, 0x3a, 0x5b, 0x44, 0x7a, 0x77, 0xc3, 0x3d, 0xa7, 0xca, 0xb3, 0xd8, 0x43, 0x00, 0x12, 0x04, 0x49, 0x80, 0x64, 0x6d, 0x22, 0xa2, 0x5c, 0x5c, 0x12, 0x12, 0x59, 0x16, 0x49, 0x15, 0x49, 0xed, 0x3a, 0xe5, 0x72, 0x31, 0x20, 0x38, 0x20, 0x11, 0x83, 0x00, 0x6b, 0x00, 0x0a, 0xe4, 0x6e, 0x54, 0x95, 0xa3, 0x0e, 0x39, 0xe4, 0xea, 0x3d, 0x6d, 0x92, 0x4b, 0xcc, 0xd2, 0x21, 0x8f, 0x3f, 0xd0, 0x92, 0x12, 0x3b, 0x76, 0x3a, 0x58, 0xaf, 0x1f, 0x79, 0x5a, 0xa2, 0x9f, 0x79, 0x42, 0x88, 0x36, 0xce, 0x3b, 0x5b, 0xa5, 0x7c, 0x5f, 0x3f, 0x66, 0x7a, 0x66, 0x7a, 0x86, 0xd2, 0x5a, 0xb6, 0x37, 0x0c, 0x7b, 0xd8, 0xea, 0xe9, 0xfe, 0xfa, 0xfb, 0xfa, 0x7b, 0x4f, 0x4f, 0x0f, 0x4a, 0xc3, 0x96, 0x65, 0x3d, 0xf3, 0xce, 0x27, 0xac, 0x1e, 0x83, 0x72, 0xf3, 0xe6, 0xcd, 0x5b, 0xc7, 0xc7, 0xc7, 0xb7, 0xb0, 0x85, 0xee, 0x2d, 0x46, 0xbd, 0xca, 0x58, 0x7f, 0x70, 0xf3, 0x26, 0x1b, 0x1c, 0x1f, 0xd3, 0xc1, 0xcd, 0xdf, 0xa5, 0x03, 0x76, 0x8b, 0x32, 0x7a, 0x8b, 0x52, 0x55, 0x39, 0xfe, 0xf0, 0xf0, 0x70, 0x2e, 0x9d, 0x4e, 0xe7, 0xb0, 0x85, 0x6e, 0x0e, 0xf0, 0x54, 0x45, 0xfc, 0xe1, 0x61, 0x36, 0x48, 0xa7, 0xe9, 0x60, 0xf8, 0x65, 0xc0, 0xcf, 0xd1, 0x01, 0x15, 0xb5, 0x4f, 0x73, 0x16, 0xe3, 0xf8, 0x80, 0x3b, 0x5b, 0x2c, 0x16, 0x67, 0xb1, 0x85, 0xee, 0x2c, 0x81, 0x0a, 0xb8, 0xb3, 0x12, 0x3f, 0x9d, 0x66, 0x83, 0x62, 0x91, 0x0e, 0xd2, 0x05, 0xc0, 0x9f, 0xa5, 0x03, 0x02, 0x95, 0xce, 0x02, 0xfe, 0xac, 0xc4, 0xef, 0x76, 0xbb, 0x8d, 0x5a, 0xad, 0xd6, 0xc0, 0x16, 0xba, 0xbc, 0x12, 0x8b, 0x60, 0x8b, 0xf8, 0xdd, 0x2e, 0x1b, 0xd4, 0x6a, 0x74, 0xd0, 0xdd, 0x01, 0xfc, 0x06, 0xd0, 0x6c, 0x50, 0x6a, 0x41, 0xc5, 0xf6, 0xab, 0xf7, 0xee, 0x3d, 0x7f, 0x0f, 0xcb, 0x83, 0xfb, 0xf7, 0xee, 0x0d, 0x06, 0xf7, 0x1e, 0x0c, 0x06, 0xf7, 0xb1, 0x0b, 0xff, 0x3c, 0xf8, 0xf6, 0x60, 0xf0, 0x82, 0x82, 0xf3, 0x71, 0x80, 0xf3, 0x79, 0x11, 0xf8, 0x7d, 0x89, 0x2f, 0x5b, 0xe8, 0x07, 0xe0, 0x0f, 0x24, 0xfd, 0x07, 0x12, 0xff, 0x81, 0x8f, 0xff, 0x2b, 0xb5, 0xda, 0xcf, 0xd4, 0xae, 0xef, 0xd4, 0x6a, 0x3b, 0xd7, 0x45, 0xed, 0x76, 0x79, 0x0b, 0x23, 0xd7, 0xf7, 0xbb, 0xdd, 0xe7, 0xec, 0x74, 0xfa, 0x63, 0xe9, 0xe1, 0x97, 0xd3, 0xe9, 0x97, 0x5f, 0x4a, 0xeb, 0x2d, 0xdc, 0xbd, 0xf4, 0x73, 0xc3, 0xc3, 0xcf, 0xbc, 0x73, 0x7c, 0x9c, 0x3a, 0xfe, 0xc2, 0xdb, 0xc7, 0xbc, 0xbe, 0xfd, 0x85, 0x63, 0x75, 0x0f, 0x77, 0x6f, 0xff, 0xe6, 0xe7, 0x3f, 0x3f, 0x34, 0x51, 0x2c, 0x5e, 0x28, 0x16, 0x5e, 0x29, 0xf2, 0xfa, 0x4a, 0x1a, 0xb4, 0x8c, 0x6d, 0xa1, 0x58, 0x80, 0x7f, 0x91, 0x36, 0xb7, 0x37, 0xda, 0x9e, 0x5f, 0x5f, 0xe1, 0xf7, 0xbf, 0x01, 0x7e, 0xc0, 0x2c, 0x8a, 0xba, 0xed, 0xb1, 0x5b, 0x16, 0x03, 0xdb, 0xf7, 0x6f, 0x81, 0xfd, 0x8f, 0x65, 0x45, 0x7f, 0xb0, 0x68, 0x7f, 0xc0, 0xd8, 0x60, 0xc0, 0xed, 0x8d, 0xb6, 0x4f, 0xdf, 0x81, 0x16, 0xaf, 0x74, 0xfa, 0xe7, 0xc1, 0x0f, 0x3c, 0xfc, 0x1c, 0xa5, 0x60, 0x7b, 0x5e, 0x73, 0x69, 0xca, 0xb8, 0x1f, 0x0c, 0xfb, 0xf8, 0xdc, 0xde, 0x68, 0xfb, 0xbb, 0x77, 0xef, 0xce, 0x16, 0x67, 0x67, 0xf1, 0x1e, 0x69, 0x78, 0xf8, 0xb3, 0x94, 0x82, 0xed, 0xe9, 0x5d, 0xa8, 0xb3, 0x45, 0xca, 0xb8, 0x1f, 0xa4, 0x7d, 0x7c, 0x6e, 0x6b, 0xb4, 0x7d, 0x0d, 0xdb, 0x2f, 0xf2, 0xfb, 0x5f, 0x03, 0x3f, 0xf0, 0xf0, 0x1b, 0x16, 0x03, 0xdb, 0xf7, 0x1b, 0x60, 0xff, 0x9a, 0xac, 0xe8, 0x0f, 0x0a, 0x1f, 0xc2, 0xc0, 0x8a, 0xf3, 0x01, 0x1c, 0xd7, 0xe1, 0x61, 0x1f, 0x08, 0xc2, 0xa3, 0x3e, 0x10, 0x80, 0x1b, 0x7c, 0x40, 0xc1, 0xe3, 0x7c, 0x00, 0xc7, 0x11, 0x1e, 0xe7, 0x03, 0x38, 0x8e, 0xf0, 0x38, 0x1f, 0xc0, 0x71, 0x84, 0xc7, 0xf9, 0x00, 0x8e, 0x1b, 0xe3, 0x97, 0x97, 0x74, 0x2e, 0xc7, 0xee, 0x98, 0xe2, 0x17, 0xe0, 0x60, 0x4f, 0xa8, 0x77, 0xa0, 0x5a, 0x4f, 0xa1, 0xec, 0x5c, 0x73, 0x9e, 0xb3, 0x7e, 0x4c, 0x05, 0x9d, 0x2b, 0x52, 0x19, 0xe1, 0x15, 0xd4, 0x5f, 0xc4, 0x12, 0x81, 0x7f, 0xeb, 0x79, 0x6f, 0x4e, 0xf1, 0x82, 0x65, 0xf1, 0xfa, 0xc3, 0x47, 0x8f, 0x78, 0xfb, 0xf5, 0xe7, 0xef, 0x15, 0xf5, 0xa2, 0xe0, 0xfa, 0x3c, 0xad, 0x58, 0x1f, 0xf1, 0xe2, 0xc7, 0x2f, 0xb6, 0x77, 0x58, 0x34, 0x7e, 0x2d, 0x8c, 0xd9, 0x3e, 0xc4, 0x2e, 0xf7, 0x81, 0x70, 0xfc, 0x3e, 0x0d, 0x1e, 0x1e, 0x3e, 0x7a, 0x64, 0x9d, 0x97, 0xf3, 0x72, 0x5e, 0x7e, 0x4a, 0x85, 0x10, 0x51, 0x21, 0x9b, 0x53, 0xc2, 0x78, 0xd5, 0x0b, 0x65, 0x04, 0x40, 0x50, 0x29, 0x66, 0x05, 0x9c, 0xc4, 0x42, 0x49, 0x16, 0xe1, 0x70, 0x31, 0x81, 0x8b, 0x6d, 0x90, 0x00, 0xd0, 0x66, 0x96, 0x18, 0x67, 0xb2, 0x1f, 0xc0, 0x17, 0x63, 0x1c, 0x2e, 0xe7, 0x06, 0xd7, 0x67, 0x82, 0xbe, 0x5a, 0x83, 0x91, 0xc8, 0xfa, 0xc8, 0xbf, 0xc0, 0xb7, 0x44, 0x55, 0x20, 0x48, 0xe2, 0x71, 0xd5, 0x67, 0x4f, 0xa3, 0x8f, 0x17, 0x31, 0xc8, 0x47, 0xd5, 0xda, 0x8c, 0xdf, 0x07, 0xc5, 0xf3, 0x75, 0x66, 0xd2, 0x9f, 0x90, 0x89, 0x0a, 0xdd, 0x71, 0xfd, 0x85, 0xf9, 0x87, 0xf9, 0x84, 0xf2, 0x6a, 0xc4, 0x67, 0x04, 0x54, 0xcf, 0xbc, 0x8a, 0xfd, 0x80, 0xf9, 0x28, 0x41, 0x96, 0x08, 0xb4, 0x04, 0x5b, 0x4a, 0x83, 0x70, 0x8f, 0x6f, 0x65, 0x1f, 0x8b, 0x1a, 0xec, 0xcb, 0x44, 0xe5, 0x36, 0x62, 0x06, 0x27, 0xa1, 0x7e, 0x8d, 0xd8, 0x57, 0xca, 0x48, 0xa5, 0xfd, 0xc2, 0xbb, 0x02, 0x09, 0x43, 0xff, 0xb1, 0x94, 0x8d, 0x4d, 0xfe, 0xc3, 0x69, 0x9b, 0xf0, 0x43, 0xfe, 0x41, 0xa3, 0xfe, 0x61, 0x6a, 0xb5, 0x09, 0xa0, 0x24, 0xd4, 0x2e, 0xfe, 0xa1, 0x23, 0xb3, 0xa8, 0x7f, 0x29, 0xfb, 0xca, 0x36, 0x22, 0x3d, 0xd7, 0x8b, 0x81, 0x37, 0x9d, 0x47, 0x46, 0x8c, 0xb8, 0xb8, 0xb8, 0xd4, 0x1b, 0xe1, 0x31, 0x64, 0x05, 0xe5, 0x57, 0xfe, 0xa4, 0xec, 0x42, 0x23, 0xdb, 0x2a, 0x5c, 0x97, 0x0a, 0x1f, 0x37, 0xb8, 0x8f, 0x87, 0x4f, 0x63, 0xf0, 0x75, 0xff, 0x55, 0x3a, 0x8e, 0xd0, 0x27, 0x52, 0x3e, 0x22, 0xf9, 0x0d, 0xb1, 0xcf, 0x64, 0x9c, 0xb1, 0x28, 0xd8, 0xd3, 0xbb, 0xb4, 0x31, 0x35, 0xe8, 0x57, 0xf1, 0xa5, 0x6a, 0x44, 0x77, 0x32, 0xbf, 0x08, 0x5e, 0xac, 0x88, 0x7f, 0x5a, 0xbe, 0x87, 0x44, 0xfd, 0x8f, 0xf8, 0x34, 0x78, 0x1b, 0xd1, 0x0f, 0x56, 0x99, 0xbf, 0xa8, 0xd0, 0x61, 0x6c, 0x7c, 0xb0, 0x60, 0xfe, 0xa2, 0x22, 0x87, 0xa8, 0x01, 0xe2, 0xdd, 0x53, 0x6d, 0x3c, 0x46, 0x6d, 0xba, 0xfb, 0xa9, 0x1a, 0xe7, 0x3a, 0x34, 0xce, 0xb5, 0x34, 0xbf, 0xd2, 0x73, 0x96, 0x9e, 0xdf, 0x12, 0x7d, 0x93, 0x5a, 0x32, 0xf7, 0xca, 0xd0, 0x63, 0x2a, 0xdf, 0x1a, 0x4c, 0xcb, 0xa2, 0x26, 0x86, 0x4c, 0x49, 0x20, 0xeb, 0x10, 0xa6, 0x5f, 0xb2, 0xaf, 0xe7, 0x57, 0xe8, 0x62, 0xf6, 0xb2, 0xb0, 0x0d, 0xe4, 0x57, 0x19, 0xdb, 0x98, 0xa1, 0x08, 0x74, 0x88, 0x67, 0x43, 0xe2, 0xe9, 0x9e, 0xcb, 0xa0, 0xf9, 0x46, 0x30, 0x06, 0x89, 0x62, 0x9e, 0xcb, 0x89, 0xcb, 0x12, 0xdd, 0x85, 0x19, 0xf1, 0xe3, 0x4e, 0x3d, 0xc7, 0x88, 0xaf, 0x0b, 0x42, 0x08, 0x91, 0x54, 0x82, 0xad, 0x1c, 0xd7, 0x9d, 0x87, 0x0a, 0xc6, 0x41, 0x10, 0xc6, 0xd3, 0xc4, 0x79, 0x39, 0x2f, 0x67, 0xbd, 0xf0, 0x23, 0xb2, 0xc1, 0x60, 0xd0, 0xc7, 0x37, 0x7d, 0x2c, 0xbc, 0xed, 0xf5, 0x64, 0x3b, 0x90, 0xe0, 0x9e, 0x0e, 0xee, 0xf5, 0xc4, 0xf4, 0x81, 0x68, 0xfd, 0x62, 0xa0, 0x13, 0x02, 0x47, 0xe8, 0x9c, 0x5b, 0xe0, 0xa7, 0x5b, 0xfa, 0x3d, 0x34, 0x24, 0xd8, 0x0d, 0x2a, 0x1a, 0x88, 0x45, 0xcb, 0x40, 0x2b, 0xbd, 0x30, 0x50, 0xf9, 0x09, 0xd2, 0x89, 0xc1, 0x57, 0x7e, 0x62, 0xc4, 0x3f, 0xb7, 0xc0, 0x47, 0x28, 0xfe, 0x0d, 0x95, 0xf9, 0x66, 0xed, 0xc5, 0x54, 0x13, 0x3e, 0x06, 0x38, 0x8c, 0xf5, 0x07, 0x26, 0x7c, 0x3c, 0x57, 0x1a, 0x60, 0xed, 0xc5, 0xe1, 0xf7, 0x07, 0xa2, 0x32, 0x23, 0x3e, 0xe2, 0xf1, 0x7a, 0xea, 0xfa, 0x51, 0xfc, 0x41, 0xa8, 0x1a, 0xf0, 0x07, 0x7a, 0x4d, 0xe4, 0xdf, 0x8c, 0xef, 0xc9, 0xde, 0x97, 0x2a, 0xd4, 0xf1, 0x75, 0xd9, 0xf1, 0xfe, 0xf4, 0xf8, 0x83, 0xe0, 0x82, 0xb8, 0x91, 0x95, 0xb1, 0x98, 0x00, 0x65, 0x8f, 0x59, 0xf4, 0x60, 0x66, 0x61, 0x7b, 0x9b, 0x79, 0xd1, 0x6c, 0x1d, 0xe5, 0x45, 0xca, 0x19, 0x8b, 0x2f, 0x6d, 0x9c, 0x80, 0xcf, 0xfa, 0x49, 0xf8, 0x3d, 0xf6, 0xa3, 0xe1, 0x6b, 0x76, 0x8a, 0xc3, 0x57, 0xb6, 0xfe, 0x51, 0xd6, 0xef, 0x27, 0xe1, 0xf7, 0x12, 0xf0, 0xc3, 0xa5, 0x27, 0x78, 0xe6, 0xb5, 0xff, 0x18, 0x35, 0x21, 0x2e, 0xfd, 0xf8, 0x7c, 0x02, 0xe7, 0x30, 0xc5, 0x3f, 0x4b, 0xce, 0x03, 0x49, 0xf8, 0xfd, 0x24, 0xfc, 0xde, 0xa9, 0xf8, 0xfd, 0x41, 0x12, 0xbe, 0x97, 0x3f, 0x3e, 0xc4, 0xfa, 0x81, 0xf8, 0x35, 0xe3, 0x7b, 0xf1, 0xff, 0x21, 0xf9, 0xef, 0x27, 0xe1, 0xab, 0x3c, 0xa0, 0xfb, 0x6e, 0xcc, 0xf3, 0x53, 0xf7, 0x9d, 0x53, 0x63, 0xfb, 0x49, 0xf2, 0x00, 0x8b, 0xf3, 0xab, 0x20, 0x2f, 0x06, 0x9f, 0xea, 0x87, 0xe2, 0xc7, 0xcb, 0xd7, 0x11, 0xfc, 0x81, 0x96, 0xaf, 0xcd, 0xf8, 0x7d, 0x15, 0x7f, 0x7d, 0x23, 0xbe, 0xcc, 0xf3, 0xbd, 0xc4, 0xf5, 0x13, 0xf0, 0xa3, 0xf9, 0x3e, 0x0e, 0x3f, 0x90, 0x07, 0xc2, 0xf8, 0xf1, 0xeb, 0xf7, 0x07, 0x5a, 0x0e, 0xe8, 0x9b, 0xf8, 0x57, 0x39, 0xa0, 0xf7, 0x04, 0xb6, 0xec, 0x49, 0x59, 0x3e, 0xf6, 0xe5, 0x4f, 0x58, 0xf8, 0x75, 0xe4, 0xdd, 0x17, 0xa1, 0x7e, 0x00, 0x95, 0xbd, 0x08, 0xf5, 0x03, 0xd1, 0x3e, 0xfa, 0xc0, 0x7a, 0x68, 0x01, 0xe0, 0xa1, 0x9a, 0xf0, 0xc8, 0x7a, 0x08, 0x80, 0x77, 0x61, 0xc2, 0x43, 0x26, 0x27, 0x3d, 0x7c, 0x84, 0x7f, 0xe2, 0x16, 0xf0, 0xf5, 0x2a, 0xc1, 0xe7, 0xe5, 0xbc, 0x9c, 0x97, 0xff, 0xd3, 0x9b, 0x78, 0xad, 0x5a, 0x56, 0xf4, 0xfb, 0x09, 0xb5, 0xac, 0xa4, 0x2f, 0xf5, 0x54, 0x1c, 0x4d, 0x07, 0xda, 0xf0, 0xf9, 0x2b, 0x91, 0xc7, 0x70, 0x78, 0x13, 0x3d, 0x7e, 0xf5, 0xcf, 0x5d, 0xa9, 0xea, 0x87, 0x8e, 0x20, 0x39, 0x3e, 0x11, 0x67, 0x77, 0x94, 0x44, 0xcf, 0x97, 0x69, 0x92, 0x7c, 0xea, 0x4c, 0x97, 0xe8, 0xc7, 0x75, 0x91, 0xe3, 0x63, 0xaf, 0x52, 0xc3, 0xf1, 0x3b, 0x21, 0xe2, 0xd8, 0x9f, 0x1f, 0xfb, 0x11, 0xf3, 0x11, 0x3d, 0x65, 0xf1, 0x67, 0xb8, 0xfa, 0xa7, 0x8c, 0x38, 0x7e, 0xe9, 0x63, 0xbc, 0xcd, 0x52, 0x12, 0x3d, 0xbf, 0xb7, 0x22, 0xfa, 0x8b, 0xd2, 0x65, 0xf2, 0xf4, 0x94, 0x45, 0x3f, 0x5f, 0x78, 0xe7, 0xbb, 0xca, 0x07, 0xc2, 0xdf, 0xc7, 0x98, 0xf7, 0x7d, 0x4d, 0x4e, 0x89, 0xc0, 0x89, 0xf7, 0xdd, 0x8d, 0xd0, 0x78, 0xfa, 0x8c, 0xaa, 0xb9, 0x56, 0x04, 0x9f, 0x69, 0xeb, 0x98, 0x3e, 0xbf, 0x28, 0xb8, 0x89, 0x7f, 0x7d, 0x7d, 0xc3, 0xe7, 0x3f, 0x89, 0x4f, 0x02, 0xad, 0x19, 0x2e, 0x8c, 0x43, 0x59, 0xbc, 0xce, 0x4d, 0xfa, 0x0f, 0xc3, 0x23, 0xf6, 0xd5, 0x6c, 0x63, 0xf2, 0x3f, 0xdd, 0xf6, 0x26, 0x1f, 0x08, 0xe0, 0x99, 0x3e, 0x6f, 0x69, 0xf2, 0x1b, 0xe3, 0x57, 0xfa, 0x2d, 0x3f, 0xfb, 0x36, 0xac, 0xa1, 0xe4, 0xe7, 0x95, 0x89, 0x36, 0x6c, 0x7f, 0x01, 0xf3, 0x5b, 0x33, 0x7e, 0x9c, 0x7d, 0x34, 0xfa, 0x06, 0x7c, 0xdd, 0xfe, 0x71, 0xfe, 0x15, 0x80, 0x1b, 0xe4, 0xe7, 0xe3, 0x94, 0x68, 0x76, 0xd4, 0xdd, 0x2f, 0x28, 0x5b, 0x58, 0x3e, 0xaa, 0x3e, 0x5a, 0xc4, 0xfa, 0x3f, 0xf1, 0x8c, 0xcc, 0x0c, 0xfe, 0xcd, 0x69, 0xca, 0x6f, 0x0a, 0xbc, 0x0d, 0xeb, 0x2f, 0x5c, 0xc3, 0xf4, 0xa9, 0xe4, 0x8d, 0xe7, 0x49, 0x12, 0xc9, 0x7f, 0x9c, 0x3e, 0x91, 0x73, 0xa8, 0x89, 0xff, 0xa0, 0x7e, 0x13, 0xf5, 0xcf, 0xe2, 0xe3, 0x23, 0x88, 0x4f, 0x12, 0xf0, 0xa3, 0xfa, 0x63, 0x2a, 0xff, 0x31, 0x93, 0x7f, 0x90, 0xa8, 0x12, 0x4c, 0xf6, 0x89, 0xe3, 0x3f, 0x0c, 0x23, 0xd1, 0xe7, 0x07, 0x21, 0xbe, 0x0e, 0x19, 0x35, 0xdb, 0x5f, 0x97, 0x33, 0x18, 0xbf, 0x44, 0x54, 0x9d, 0xcf, 0xb0, 0xfd, 0xb5, 0xdc, 0x12, 0xf9, 0x8c, 0xc6, 0x42, 0xcf, 0x97, 0x84, 0xcf, 0x8b, 0xfe, 0x4d, 0xf4, 0x99, 0xe0, 0x3d, 0x7f, 0x48, 0xcc, 0xe7, 0xdb, 0xc7, 0xfc, 0xa6, 0x14, 0xf6, 0x5f, 0xc3, 0x92, 0x46, 0x1c, 0xcc, 0xdd, 0x22, 0x7f, 0x1b, 0xfc, 0x37, 0xe4, 0x03, 0x26, 0x7c, 0xa6, 0x3e, 0x01, 0xb3, 0x68, 0x82, 0x4c, 0xa2, 0x1f, 0x7c, 0x46, 0x19, 0x72, 0x20, 0xee, 0x29, 0x88, 0xdc, 0x5b, 0x18, 0x9f, 0x7f, 0x32, 0xc7, 0xc9, 0x38, 0xb2, 0x42, 0x31, 0xca, 0x0c, 0x39, 0x28, 0x22, 0xa0, 0x15, 0xef, 0x9f, 0xe1, 0xe4, 0x4f, 0x4c, 0xf4, 0xf5, 0xfc, 0x68, 0xb0, 0xaf, 0x5e, 0x2d, 0x83, 0xfc, 0xea, 0xd9, 0xc8, 0xe3, 0x9f, 0x18, 0xe0, 0x49, 0xfc, 0x87, 0x62, 0xd8, 0xf4, 0x0c, 0x39, 0x3d, 0x07, 0x84, 0xec, 0x43, 0x63, 0x9e, 0x01, 0x06, 0xf5, 0xe8, 0xf6, 0x37, 0xc6, 0x7f, 0xd8, 0x76, 0x26, 0xf9, 0x13, 0xe2, 0x3f, 0x1c, 0xc3, 0x26, 0x5f, 0x0e, 0xe4, 0x00, 0x6a, 0xd2, 0x2f, 0xf1, 0xbe, 0xa1, 0x9b, 0xe0, 0x61, 0xd9, 0x69, 0x52, 0x0e, 0x88, 0x89, 0x7f, 0x1a, 0x13, 0xff, 0x16, 0x31, 0x54, 0x53, 0xfc, 0xb3, 0x98, 0xf8, 0x17, 0x1f, 0x9c, 0xad, 0xa7, 0xf3, 0x6b, 0xd9, 0xf3, 0x72, 0x5e, 0xce, 0xcb, 0x79, 0x09, 0xee, 0x0f, 0xa8, 0xf6, 0x5a, 0x42, 0xa3, 0xa9, 0xc7, 0x22, 0x09, 0xfb, 0x07, 0x42, 0xbc, 0x9f, 0x50, 0x7a, 0x6d, 0x24, 0xff, 0xeb, 0xad, 0x21, 0x3d, 0x06, 0xde, 0x5d, 0x49, 0xcc, 0xf1, 0x84, 0xfa, 0x69, 0x0e, 0x31, 0xf3, 0x1f, 0xcf, 0x60, 0x48, 0x46, 0x62, 0xde, 0x9f, 0x51, 0xcb, 0xfc, 0xfe, 0xac, 0x64, 0x54, 0xe7, 0x10, 0x71, 0x3a, 0x64, 0xa7, 0x9d, 0x43, 0x84, 0x8e, 0x23, 0xac, 0xe8, 0x36, 0xe7, 0xb1, 0xed, 0x65, 0xc5, 0x1f, 0x01, 0x18, 0xcf, 0x0c, 0xf4, 0x9f, 0x36, 0x31, 0x13, 0xef, 0x9a, 0xfc, 0xa6, 0xc7, 0x9b, 0x4e, 0x3f, 0x09, 0x6e, 0x19, 0xe8, 0x13, 0xcd, 0x37, 0x4c, 0xcf, 0x3f, 0x46, 0xb4, 0xc7, 0x26, 0x31, 0x6f, 0xbf, 0x88, 0x15, 0xf4, 0xb1, 0x88, 0xde, 0x48, 0xf0, 0x98, 0x27, 0x42, 0x9f, 0x24, 0xe3, 0x27, 0xf1, 0x67, 0x25, 0xc4, 0x86, 0x09, 0x9e, 0x70, 0x3c, 0x13, 0xbb, 0x17, 0x57, 0x3c, 0x31, 0xe3, 0xde, 0x26, 0xf1, 0xe7, 0x89, 0x01, 0xf9, 0x4d, 0x3c, 0x52, 0x5d, 0x7e, 0xcb, 0x1c, 0x3f, 0xba, 0x7e, 0x88, 0x69, 0x7b, 0x43, 0x82, 0xad, 0xc9, 0x3e, 0xde, 0xf1, 0x5a, 0x0c, 0x7e, 0x9c, 0xff, 0xe9, 0xf6, 0x37, 0xfa, 0x57, 0x08, 0x4e, 0xe2, 0xd6, 0x8f, 0xc9, 0x0f, 0x84, 0x9c, 0x22, 0x5f, 0x28, 0x3f, 0xc4, 0xf9, 0x97, 0x15, 0xfc, 0x69, 0x60, 0x94, 0x7e, 0x4c, 0xae, 0x0c, 0x6f, 0xfd, 0x4c, 0xf4, 0x59, 0x28, 0x46, 0x93, 0xf4, 0x47, 0x62, 0xec, 0x47, 0x62, 0xf8, 0x0b, 0xd8, 0xcf, 0xa4, 0xbf, 0x90, 0x8e, 0xe2, 0xec, 0xc7, 0x34, 0x19, 0x4d, 0xfa, 0x8f, 0x8b, 0xff, 0xb0, 0x7e, 0xe3, 0xf4, 0x77, 0x9a, 0xfd, 0xc8, 0x29, 0xfa, 0xf7, 0x78, 0x8c, 0xc1, 0xa7, 0x71, 0xf6, 0xd1, 0xe0, 0x26, 0xfe, 0xc2, 0xf9, 0x85, 0x99, 0xce, 0xff, 0x74, 0xf9, 0x4e, 0x89, 0x61, 0xd3, 0xf1, 0x7b, 0xc0, 0xff, 0x62, 0xec, 0xf3, 0xd8, 0xc7, 0xf9, 0xc4, 0x7a, 0xe2, 0xf7, 0x7f, 0x16, 0xca, 0x13, 0x61, 0xde, 0x99, 0x15, 0x1f, 0xbf, 0xe1, 0x1c, 0x40, 0x63, 0x7e, 0x1e, 0x1e, 0x67, 0xdf, 0x40, 0x8e, 0x8a, 0xc3, 0x0f, 0xf9, 0x91, 0x95, 0x90, 0xe3, 0xc2, 0x67, 0xa4, 0xc4, 0x10, 0x43, 0x71, 0xb9, 0xdb, 0x48, 0x9f, 0x04, 0x03, 0x99, 0x18, 0xe8, 0x13, 0xed, 0xe8, 0xc8, 0x14, 0xbf, 0x49, 0xf9, 0xc5, 0x94, 0x03, 0x2c, 0x2b, 0x39, 0x07, 0x58, 0x09, 0x31, 0x4c, 0xad, 0x64, 0x7c, 0x16, 0x97, 0x43, 0x75, 0xfb, 0x18, 0x62, 0x84, 0xc5, 0x3f, 0x1e, 0xfd, 0xe3, 0xe7, 0xb8, 0xfd, 0x05, 0x89, 0xdf, 0x7f, 0x85, 0x63, 0x98, 0x9e, 0x06, 0xb7, 0xe2, 0xe1, 0xa6, 0xf8, 0x0f, 0xef, 0xdf, 0x48, 0x02, 0xfd, 0xb8, 0xef, 0x33, 0x2a, 0x2f, 0x26, 0xc5, 0x3f, 0x8b, 0x89, 0x7f, 0x6a, 0xf0, 0x31, 0xa3, 0x7f, 0x10, 0x73, 0xfc, 0x7b, 0xfa, 0x7d, 0x36, 0xf7, 0xa2, 0x45, 0x6f, 0x9b, 0xae, 0x6f, 0x7f, 0xc7, 0x74, 0x9d, 0x85, 0x97, 0x13, 0xf6, 0x67, 0xa6, 0xab, 0xff, 0xc0, 0x74, 0x9d, 0x89, 0x97, 0xb1, 0xff, 0x67, 0xf6, 0xfd, 0xea, 0x7b, 0xe1, 0x0b, 0xed, 0xfb, 0xf0, 0xfd, 0xf0, 0x75, 0x6e, 0xdf, 0xb3, 0x62, 0x5f, 0xbc, 0xa2, 0xf6, 0xc5, 0xeb, 0xdc, 0xbe, 0xe7, 0xf6, 0xfd, 0xa8, 0x97, 0x13, 0x83, 0x79, 0x7b, 0xb7, 0x4f, 0x0c, 0xe6, 0x1d, 0x9c, 0x09, 0xfb, 0x9e, 0x18, 0xcc, 0xfb, 0xad, 0xfb, 0x27, 0x06, 0xf3, 0x7e, 0x70, 0xff, 0x2c, 0xc8, 0xfb, 0x95, 0x3f, 0x8d, 0x1a, 0xf8, 0xde, 0xfd, 0x7f, 0xfc, 0xa7, 0xa8, 0x81, 0xef, 0x9d, 0x09, 0x79, 0xff, 0xfa, 0x6f, 0x4c, 0xf1, 0xfb, 0xdf, 0xff, 0x73, 0x66, 0xf3, 0x73, 0xef, 0x36, 0xff, 0x93, 0xe5, 0xf6, 0x09, 0x2f, 0x10, 0xac, 0xfc, 0x4f, 0x96, 0xef, 0x88, 0xd1, 0x33, 0x91, 0x9f, 0xdf, 0x7d, 0x8f, 0xff, 0xc9, 0xf2, 0xde, 0xc9, 0xc9, 0x9d, 0xbb, 0x27, 0x27, 0x0f, 0xff, 0xf9, 0x7d, 0xfe, 0x27, 0xcb, 0xfb, 0x27, 0x27, 0xdf, 0xfd, 0xde, 0xd9, 0x90, 0xf7, 0x24, 0x52, 0xbe, 0xf6, 0xf5, 0x13, 0x43, 0xf9, 0x97, 0x1f, 0x9e, 0x11, 0x79, 0xdf, 0xf9, 0xad, 0x80, 0x5c, 0x5f, 0xfc, 0xd2, 0x1f, 0xfd, 0xf1, 0x9f, 0x7c, 0xf9, 0xe4, 0xb7, 0x7f, 0x27, 0x30, 0xfa, 0xb7, 0x7f, 0xf7, 0xfd, 0x1f, 0xfc, 0xfd, 0x3f, 0x9c, 0x09, 0x79, 0x7f, 0xef, 0xf7, 0x03, 0x92, 0xfd, 0xf9, 0x5f, 0x7c, 0xe3, 0x9b, 0x7f, 0xf9, 0x57, 0x27, 0x7f, 0xf0, 0x87, 0x81, 0xd1, 0x7f, 0xff, 0x8f, 0x7f, 0xfd, 0xb7, 0xff, 0xfc, 0xaf, 0xa1, 0xdb, 0x96, 0xf5, 0x71, 0x7e, 0xbd, 0x38, 0x84, 0xd7, 0xcf, 0xf2, 0x8b, 0xdf, 0x5b, 0x8f, 0x73, 0xf1, 0xff, 0x1d, 0xcb, 0xba, 0x80, 0xd7, 0xb3, 0x70, 0x3d, 0x07, 0x17, 0xb9, 0x40, 0x86, 0xac, 0xe0, 0x45, 0x42, 0x97, 0x4e, 0xe1, 0x02, 0x90, 0xf8, 0x75, 0xeb, 0x05, 0xeb, 0x85, 0x67, 0x5e, 0x78, 0xe6, 0xf1, 0xd6, 0x0c, 0x5f, 0xcf, 0x7e, 0xfc, 0x9b, 0x2f, 0x59, 0x1b, 0x8b, 0xe5, 0xe5, 0x72, 0x29, 0xf5, 0x56, 0x6a, 0x68, 0x7e, 0x75, 0xa1, 0x6c, 0x97, 0x52, 0x43, 0x70, 0x3b, 0xf4, 0xda, 0x65, 0x1b, 0x4b, 0x69, 0x72, 0x3a, 0x07, 0xbd, 0x4b, 0xaa, 0x57, 0xc0, 0xde, 0xfa, 0xc6, 0xda, 0xd2, 0xca, 0x65, 0xbb, 0x34, 0x85, 0x9d, 0x95, 0x6b, 0xcb, 0xaf, 0x95, 0xd7, 0x00, 0x34, 0x89, 0xbd, 0x4f, 0x95, 0x7f, 0xf9, 0x8d, 0xd5, 0xb5, 0x85, 0x52, 0x11, 0x3b, 0x73, 0x57, 0x97, 0x38, 0x16, 0x27, 0x31, 0xbf, 0xba, 0xbc, 0x5c, 0x5e, 0xd9, 0x28, 0x4d, 0x72, 0xac, 0xf5, 0xa5, 0xcb, 0x2b, 0x9c, 0x20, 0x9f, 0xb8, 0x5e, 0xbe, 0x52, 0x9e, 0xdf, 0xb0, 0x25, 0x6c, 0xfe, 0xda, 0xda, 0xfa, 0x2a, 0x50, 0x14, 0x6b, 0x2d, 0xce, 0x2d, 0xac, 0xbe, 0x61, 0x97, 0x3a, 0xee, 0x81, 0xc3, 0x69, 0x5e, 0xd9, 0xd8, 0xbc, 0xb4, 0x0a, 0x74, 0x6a, 0x95, 0x46, 0x9b, 0x8f, 0x2c, 0xcf, 0x6d, 0xcc, 0x2f, 0x6e, 0x2e, 0x94, 0xaf, 0x2c, 0x2d, 0x2f, 0x6d, 0x94, 0xd7, 0xd6, 0xd5, 0xd4, 0x1b, 0xb9, 0x54, 0x6a, 0xe8, 0xf2, 0xdc, 0x72, 0xf9, 0xea, 0xdc, 0x82, 0x14, 0x6a, 0x63, 0xf5, 0xda, 0xfc, 0x22, 0xdc, 0xf3, 0x0e, 0x90, 0xba, 0xba, 0x38, 0x57, 0x9a, 0x7c, 0x75, 0x02, 0xa9, 0xdc, 0x10, 0x18, 0x37, 0x52, 0xa9, 0xf9, 0xc5, 0xf2, 0xfc, 0xa7, 0x36, 0x57, 0xca, 0x6f, 0x6c, 0xbe, 0x0e, 0xd4, 0x96, 0x56, 0x57, 0x38, 0xc1, 0xd4, 0xca, 0xea, 0xe6, 0xfa, 0xea, 0xb5, 0x95, 0x05, 0xb1, 0x70, 0xea, 0xf2, 0xd2, 0xa5, 0xcd, 0x2b, 0xe5, 0x95, 0xcb, 0x1b, 0x8b, 0xa5, 0xc2, 0x84, 0x3d, 0x36, 0x66, 0xd7, 0x9b, 0x76, 0xdb, 0xa9, 0xb6, 0x9a, 0xdb, 0xed, 0xd4, 0xfc, 0xda, 0xc6, 0xe6, 0xf2, 0xea, 0xca, 0xd2, 0xc6, 0xea, 0x9a, 0x36, 0x7b, 0x7d, 0x7e, 0xee, 0x4a, 0xb9, 0x54, 0x4c, 0x5d, 0x5b, 0x92, 0xb7, 0x53, 0xa9, 0xd4, 0x58, 0x7c, 0x49, 0xd5, 0x0e, 0x9a, 0xd5, 0x4e, 0xbd, 0xd5, 0xb4, 0x37, 0x96, 0xe6, 0x33, 0xd9, 0xd4, 0x50, 0xb5, 0xd1, 0xc6, 0xa6, 0xd1, 0xaa, 0x56, 0x1a, 0x76, 0xa3, 0xb2, 0xe5, 0x34, 0x4a, 0xe9, 0x8d, 0xdd, 0x7a, 0xdb, 0x86, 0xbf, 0xf6, 0x51, 0xbb, 0xe3, 0xec, 0xd9, 0xb0, 0x7c, 0xad, 0xbe, 0x73, 0xe0, 0x56, 0x38, 0x5e, 0xb5, 0xe2, 0x76, 0xdc, 0xfa, 0xf6, 0x8e, 0x93, 0x56, 0x58, 0xed, 0xfa, 0x9b, 0x4e, 0x69, 0xdf, 0xad, 0x37, 0x3b, 0x19, 0x4e, 0x20, 0x37, 0x91, 0x1b, 0x9b, 0x01, 0x9a, 0xfa, 0x50, 0xa6, 0x30, 0x35, 0x31, 0x86, 0x13, 0xb3, 0xe3, 0xe3, 0x85, 0x5c, 0x66, 0xb2, 0x38, 0x03, 0x53, 0xe0, 0x36, 0x9b, 0x72, 0x9a, 0xdb, 0x29, 0x2e, 0x1b, 0xda, 0xa4, 0xbc, 0xc6, 0x5d, 0x06, 0x54, 0xb4, 0x51, 0xfe, 0x74, 0xe9, 0x33, 0x9f, 0x01, 0x15, 0xbe, 0x72, 0xdd, 0x71, 0xdb, 0xb8, 0xf0, 0xe4, 0xe4, 0x04, 0x74, 0x2b, 0x1d, 0x58, 0x7d, 0xeb, 0xa0, 0xe3, 0xd8, 0xd7, 0x9d, 0x6a, 0xd1, 0xde, 0xd9, 0x3f, 0xd8, 0x7c, 0xdd, 0x71, 0x3b, 0xce, 0xe1, 0xc5, 0x30, 0xb0, 0xc0, 0x81, 0x1b, 0xce, 0xe1, 0x7c, 0xab, 0xe5, 0x6e, 0x47, 0xc0, 0x53, 0x1c, 0x3c, 0xdf, 0x6a, 0xb4, 0x5c, 0x84, 0x1d, 0x34, 0xeb, 0xb5, 0x96, 0xbb, 0x67, 0xef, 0x55, 0x3a, 0x02, 0xb2, 0xdc, 0xda, 0x76, 0x1a, 0xaf, 0xd7, 0x9d, 0xee, 0x55, 0xb7, 0xf5, 0xab, 0x0e, 0xd7, 0xd9, 0x72, 0x05, 0xf0, 0xf9, 0x42, 0xd7, 0x2b, 0xee, 0x51, 0xbd, 0xb9, 0x23, 0xe8, 0x54, 0x15, 0x0d, 0x6d, 0xb4, 0x60, 0x77, 0xb4, 0x85, 0xaf, 0xb7, 0xea, 0xdb, 0x40, 0xb9, 0xde, 0xcc, 0xe0, 0x5d, 0x56, 0xb9, 0x0a, 0x47, 0xb4, 0x4b, 0x41, 0x46, 0x86, 0x14, 0x22, 0x00, 0x90, 0x50, 0x46, 0x97, 0x22, 0xcb, 0x67, 0xec, 0x34, 0x36, 0xaf, 0xb6, 0xda, 0x75, 0x6e, 0x8e, 0x52, 0x32, 0xb3, 0xf6, 0x08, 0xe7, 0x31, 0xe3, 0xeb, 0x29, 0x67, 0x4f, 0xe6, 0x27, 0x38, 0x9d, 0x1b, 0xa9, 0xa1, 0xcf, 0x7e, 0x16, 0x1c, 0xf4, 0xea, 0xd2, 0xa7, 0xcb, 0x57, 0x8c, 0xca, 0x1e, 0x1f, 0xdf, 0x77, 0x9d, 0x6a, 0x9d, 0x8f, 0xec, 0xd6, 0x77, 0x76, 0xf7, 0xed, 0x5a, 0xa3, 0x55, 0xe9, 0x24, 0xca, 0xaa, 0x14, 0xd9, 0xae, 0xec, 0xed, 0x37, 0x1c, 0xb7, 0xb0, 0x60, 0xb7, 0x5b, 0x07, 0x6e, 0xd5, 0xd1, 0x61, 0x9c, 0x8a, 0xdd, 0x71, 0x77, 0x36, 0x0f, 0xcd, 0xc3, 0x47, 0xe6, 0xe1, 0xae, 0x79, 0x78, 0x37, 0x3a, 0xdc, 0xae, 0xba, 0xa6, 0xd9, 0x38, 0x0c, 0xb3, 0xb9, 0x68, 0x76, 0x79, 0xef, 0xa0, 0x51, 0xe9, 0x38, 0xdb, 0x10, 0x64, 0xfb, 0x07, 0x1d, 0xdb, 0x75, 0xda, 0xad, 0xc6, 0x01, 0xaa, 0x2e, 0x8f, 0xf2, 0xa1, 0x5c, 0x30, 0x54, 0xe2, 0x36, 0x28, 0x4c, 0xcf, 0xe4, 0x27, 0x72, 0x93, 0x53, 0x53, 0x5c, 0x75, 0x02, 0x7d, 0xb1, 0xe2, 0x6e, 0x37, 0x9d, 0x76, 0xdb, 0x6e, 0xd5, 0x80, 0x6e, 0xa5, 0xd9, 0xa8, 0x37, 0x9d, 0xbc, 0x00, 0xd9, 0x63, 0xaf, 0xe6, 0x27, 0xc0, 0x34, 0xed, 0x56, 0xad, 0x23, 0x46, 0xc6, 0x26, 0x67, 0xf8, 0xc8, 0x9e, 0xb3, 0x5d, 0x3f, 0xd8, 0x83, 0x31, 0xc1, 0xcf, 0x2e, 0xd0, 0x58, 0x07, 0xdc, 0x12, 0x22, 0x98, 0x08, 0xef, 0xd7, 0x0f, 0x9d, 0x46, 0x9b, 0xa7, 0x81, 0xe0, 0x12, 0x63, 0x85, 0xf0, 0x0a, 0x53, 0x7c, 0x00, 0x29, 0x06, 0xc8, 0x5f, 0xad, 0x1f, 0x96, 0xc6, 0x8a, 0x3e, 0xf5, 0x85, 0x7a, 0x7b, 0xbf, 0x51, 0x39, 0xb2, 0xbb, 0x15, 0x77, 0x5f, 0xd2, 0x9a, 0xe0, 0x98, 0xcd, 0x56, 0xd3, 0x11, 0x7d, 0x70, 0x90, 0x71, 0x21, 0x80, 0x73, 0xd8, 0x71, 0x9d, 0x3d, 0x47, 0xe9, 0x03, 0x71, 0x84, 0x42, 0x70, 0xca, 0xcc, 0x14, 0xea, 0x04, 0x6e, 0xa6, 0x5e, 0x45, 0xb5, 0xd8, 0x72, 0x81, 0xb9, 0xbd, 0xd6, 0x41, 0xb3, 0xc3, 0xb5, 0xb2, 0x5b, 0xd9, 0x6e, 0x75, 0xc1, 0xf1, 0xdb, 0x9f, 0xcb, 0x7b, 0x3c, 0x61, 0x6f, 0xa1, 0xe2, 0x7e, 0xae, 0x34, 0x91, 0x9f, 0xbe, 0x18, 0x18, 0xbd, 0x02, 0x1e, 0xd6, 0x29, 0x4d, 0xe2, 0x30, 0xa7, 0x34, 0xf6, 0x94, 0x8a, 0xe4, 0xab, 0xbd, 0x76, 0xf9, 0x35, 0xbb, 0xd3, 0xb2, 0xaf, 0x80, 0x12, 0x2b, 0xae, 0x14, 0x7d, 0xae, 0xdd, 0x3e, 0x40, 0x37, 0x3e, 0x68, 0xe3, 0xbf, 0x62, 0xca, 0xd1, 0x3e, 0xf8, 0x04, 0xb8, 0x74, 0xe7, 0x00, 0xec, 0x6f, 0x77, 0x30, 0x19, 0xb6, 0x77, 0x5b, 0x07, 0x8d, 0x6d, 0x50, 0x51, 0xc7, 0xde, 0x72, 0xec, 0xa6, 0xe3, 0x6c, 0x3b, 0xdb, 0xbe, 0x48, 0x1b, 0x2d, 0x41, 0x73, 0x32, 0x23, 0xfa, 0xd5, 0xec, 0x5b, 0xae, 0x03, 0xd8, 0xcd, 0x4c, 0x75, 0x16, 0xc4, 0x9c, 0x98, 0x9a, 0x98, 0x9a, 0xce, 0x7e, 0xb2, 0x3a, 0x3e, 0x59, 0xc8, 0xff, 0x62, 0xe1, 0x97, 0xf6, 0x5b, 0xdd, 0x4c, 0xa6, 0x3a, 0x0a, 0xe3, 0xd3, 0xd3, 0xd9, 0xf1, 0x49, 0x6c, 0x72, 0x85, 0xfc, 0x54, 0xf6, 0xe2, 0x0d, 0xa1, 0xe6, 0xa2, 0x47, 0x2f, 0xc3, 0x7b, 0x1e, 0x35, 0x9e, 0xf1, 0x32, 0xfe, 0x62, 0xd5, 0xbc, 0x9b, 0xcd, 0xe9, 0xdd, 0x9d, 0x60, 0x77, 0x2b, 0x8b, 0x34, 0x85, 0x9c, 0x62, 0x14, 0xc5, 0x47, 0x19, 0x9f, 0xae, 0xf0, 0xeb, 0xee, 0xce, 0x96, 0x49, 0x74, 0x90, 0x70, 0xa2, 0x38, 0x59, 0x9c, 0x78, 0xf5, 0x93, 0xd5, 0x11, 0x21, 0x3a, 0x17, 0x76, 0x04, 0x15, 0x50, 0xcd, 0x4d, 0xe4, 0xa7, 0x26, 0x67, 0x66, 0x66, 0xb2, 0x63, 0x42, 0x11, 0xba, 0xf4, 0x48, 0x30, 0x46, 0x76, 0xb1, 0x96, 0x94, 0x5c, 0x75, 0x76, 0xf4, 0x8e, 0x2e, 0xf5, 0x0a, 0xc8, 0xec, 0xb4, 0x3b, 0xb6, 0xa3, 0x22, 0x5d, 0x24, 0x25, 0x7b, 0xa7, 0x7e, 0xdd, 0x69, 0x8a, 0x94, 0x80, 0x92, 0xef, 0xb7, 0xe0, 0x41, 0x05, 0xff, 0xca, 0x94, 0x5a, 0x69, 0x72, 0x0d, 0x38, 0x0d, 0xf0, 0xe1, 0x5a, 0xdb, 0xe9, 0x28, 0x6d, 0x35, 0xda, 0x2d, 0xfb, 0x4d, 0xc7, 0x6d, 0xfd, 0x02, 0x46, 0x26, 0xc6, 0xbc, 0xeb, 0x38, 0x2a, 0x57, 0x14, 0xed, 0x4b, 0x4e, 0xa7, 0xba, 0x9b, 0xe1, 0x61, 0x02, 0x94, 0x72, 0xfc, 0x06, 0xa6, 0x65, 0x79, 0xa6, 0x87, 0x91, 0x12, 0x6a, 0xa8, 0xe5, 0x66, 0xe0, 0x76, 0x04, 0x98, 0x1a, 0x45, 0xd8, 0x28, 0x8f, 0x25, 0x08, 0x04, 0xd0, 0xc6, 0x74, 0x36, 0x3b, 0x0e, 0xe3, 0x3c, 0xc1, 0x4b, 0x99, 0x3d, 0x3f, 0x98, 0xcc, 0x17, 0x20, 0x91, 0x4b, 0xab, 0x14, 0x16, 0x32, 0x22, 0xa3, 0xe6, 0x80, 0x54, 0xfe, 0xf0, 0x28, 0xc7, 0x73, 0x4b, 0x36, 0x0f, 0xf2, 0xfb, 0x92, 0x43, 0x94, 0x77, 0x2a, 0xcd, 0xaa, 0x83, 0x99, 0xc3, 0x93, 0x5e, 0x26, 0x13, 0x70, 0x82, 0xa6, 0x54, 0x0c, 0x17, 0xd3, 0x4b, 0x77, 0x88, 0xe4, 0x49, 0x90, 0x7d, 0x0b, 0x99, 0x96, 0xdc, 0x5e, 0x94, 0x1c, 0x8d, 0x65, 0x90, 0xff, 0x31, 0x4f, 0x92, 0x6c, 0x76, 0x4c, 0x89, 0x90, 0x15, 0x26, 0x1c, 0x1a, 0x92, 0x39, 0x64, 0xc1, 0xbe, 0x5c, 0x39, 0x68, 0xb7, 0xeb, 0x95, 0xa6, 0xef, 0x2b, 0x38, 0x22, 0x1d, 0x05, 0x75, 0xa4, 0x72, 0x72, 0xa5, 0xe1, 0x78, 0x76, 0x76, 0x0e, 0xf7, 0x0b, 0x19, 0x3e, 0x34, 0x82, 0x6b, 0xe3, 0x1a, 0x9e, 0x50, 0xc5, 0xb1, 0x4e, 0x65, 0xdf, 0x23, 0x6b, 0xd7, 0xea, 0x8d, 0x8e, 0xe3, 0xda, 0x95, 0x46, 0x0b, 0x6c, 0xb8, 0xdb, 0x72, 0xdf, 0xb4, 0x55, 0x7e, 0xe4, 0x06, 0x59, 0x84, 0x91, 0xa2, 0x6f, 0x10, 0xb1, 0x98, 0x67, 0x11, 0x3e, 0x65, 0xab, 0x24, 0xac, 0xa6, 0x0c, 0x96, 0x19, 0x03, 0x0f, 0xcd, 0xe1, 0x1c, 0xf1, 0xa0, 0x15, 0x3e, 0x18, 0x9e, 0x84, 0xf9, 0x32, 0x3c, 0x69, 0x3b, 0x32, 0x29, 0x48, 0x49, 0xac, 0xbe, 0xdd, 0xee, 0x94, 0xb8, 0x92, 0x51, 0xac, 0x3c, 0x7f, 0xf6, 0xa1, 0x5c, 0xf3, 0xad, 0x26, 0x3c, 0x77, 0x01, 0xac, 0x8c, 0x06, 0x16, 0xea, 0x3a, 0x98, 0x0d, 0xf3, 0x3e, 0x2e, 0xd7, 0x49, 0x49, 0x66, 0x74, 0x8d, 0x66, 0x77, 0xab, 0xc4, 0xd5, 0x0a, 0xb4, 0x39, 0xf7, 0x42, 0x9d, 0xfa, 0x84, 0xaa, 0x37, 0x01, 0x93, 0x8e, 0x61, 0xc2, 0xb6, 0x3f, 0x21, 0x44, 0x01, 0x98, 0x5b, 0x13, 0x76, 0x11, 0xca, 0xf6, 0x42, 0x28, 0xaf, 0xb9, 0x69, 0x66, 0x6b, 0xa4, 0xbb, 0x35, 0x5a, 0x1d, 0xe9, 0x56, 0x47, 0xb7, 0x47, 0xba, 0xdb, 0xd9, 0xf1, 0x0c, 0x74, 0xa1, 0x03, 0xb7, 0x9e, 0xe9, 0xa6, 0x9f, 0xd8, 0x74, 0xd3, 0xc9, 0xa6, 0xab, 0x44, 0x4c, 0x57, 0x88, 0x5a, 0xe5, 0x27, 0x67, 0x5f, 0x3e, 0xc9, 0x89, 0x4c, 0x2a, 0xfc, 0xa4, 0x9c, 0xa0, 0xe2, 0x3b, 0x41, 0xc1, 0x68, 0xe3, 0x1f, 0xa7, 0x97, 0xc8, 0x09, 0x8e, 0x3f, 0xa1, 0xf0, 0x61, 0xdc, 0xa8, 0x32, 0xd2, 0xad, 0x8c, 0x06, 0x7d, 0x69, 0xd4, 0x19, 0xe9, 0x3a, 0xe8, 0x50, 0x95, 0x51, 0xe5, 0x53, 0xa3, 0x30, 0xe0, 0xb9, 0x95, 0xa4, 0xaa, 0xf6, 0x46, 0x9a, 0xc2, 0x04, 0x4f, 0xb8, 0xb7, 0x8a, 0xf5, 0x23, 0x93, 0x39, 0x8e, 0xf4, 0xfc, 0xeb, 0x89, 0x03, 0x28, 0x39, 0xb5, 0x55, 0xf3, 0x17, 0x9f, 0x6b, 0x34, 0x60, 0x77, 0xe3, 0xa5, 0xd2, 0x5d, 0x78, 0x1c, 0x70, 0x37, 0xe6, 0x19, 0xd6, 0xa9, 0xd5, 0x60, 0x1f, 0x2e, 0x52, 0xae, 0xe7, 0xd7, 0x1b, 0x6e, 0x5d, 0xcb, 0xaf, 0x9a, 0x2f, 0x8b, 0x5c, 0x85, 0x3c, 0x8e, 0xa9, 0xdd, 0xb9, 0xf2, 0x60, 0x11, 0x0b, 0x08, 0x42, 0xbf, 0x0c, 0xf8, 0xad, 0x8f, 0xe5, 0xed, 0xe9, 0x7d, 0x7f, 0xe0, 0xa2, 0x07, 0x29, 0x7a, 0xae, 0xe0, 0xc1, 0x7c, 0x92, 0x9e, 0x17, 0xf8, 0x30, 0x0f, 0x4f, 0xaa, 0x23, 0x68, 0x9f, 0xc0, 0xa3, 0xa6, 0xe5, 0xf2, 0x27, 0xa7, 0xb6, 0x13, 0x06, 0x7c, 0x7c, 0x8e, 0xc2, 0xdb, 0x9d, 0x18, 0xc5, 0x67, 0x25, 0xc4, 0xfb, 0xfe, 0x6e, 0xc5, 0x7b, 0xdc, 0xbc, 0x01, 0xbb, 0xc9, 0x90, 0x3a, 0xd4, 0x23, 0x07, 0xfc, 0x07, 0xd9, 0xbe, 0x88, 0x2f, 0xfa, 0x72, 0x7c, 0xc4, 0xdb, 0x78, 0x8e, 0x22, 0x7b, 0xf9, 0xa3, 0x11, 0xfe, 0x6f, 0x76, 0x84, 0x6f, 0x64, 0x0f, 0x73, 0x1e, 0xe0, 0x90, 0x03, 0x0e, 0x25, 0xe0, 0x28, 0x20, 0x02, 0xd2, 0x81, 0x67, 0xd5, 0x28, 0xee, 0x3d, 0x15, 0xff, 0xeb, 0xc1, 0x5d, 0x2a, 0xd7, 0xed, 0x32, 0x74, 0xa2, 0xac, 0xe5, 0x0f, 0x47, 0x4b, 0x62, 0x69, 0xbe, 0x9f, 0x56, 0x86, 0x40, 0xcc, 0x12, 0xdf, 0x9f, 0xa8, 0xbd, 0x6d, 0x2e, 0x72, 0x23, 0xb8, 0xe0, 0x34, 0x4a, 0x35, 0xb7, 0x52, 0xed, 0x08, 0x56, 0xc7, 0x67, 0x94, 0x8e, 0xeb, 0x35, 0x31, 0x02, 0xbb, 0xa6, 0x62, 0xb1, 0x98, 0xe5, 0xdc, 0xb8, 0x25, 0x6f, 0x5b, 0xcc, 0xe7, 0xc0, 0xc3, 0x1b, 0x1e, 0xe8, 0xfe, 0x44, 0xdc, 0x3e, 0xf1, 0x89, 0x3b, 0xa6, 0x89, 0x1c, 0xb2, 0x15, 0x82, 0x48, 0x3d, 0xe0, 0xe0, 0xc5, 0x1b, 0x5c, 0xbb, 0x81, 0xd7, 0xd3, 0xac, 0xcd, 0x65, 0xf5, 0x5f, 0x4b, 0x60, 0xdf, 0x36, 0x21, 0x43, 0xd8, 0xdb, 0xb8, 0x07, 0x29, 0x72, 0x2d, 0x41, 0xca, 0x72, 0x3b, 0x25, 0x78, 0x2f, 0xbd, 0xe4, 0x56, 0x76, 0xf8, 0xab, 0x20, 0x6c, 0x4c, 0xc4, 0xd6, 0x80, 0xbf, 0xe5, 0xe5, 0xc4, 0x5b, 0x9d, 0x10, 0x95, 0x4f, 0xce, 0x1f, 0x95, 0xf8, 0xcb, 0xd8, 0x98, 0xec, 0xf1, 0x3d, 0xff, 0x90, 0x52, 0x79, 0x89, 0xfb, 0x06, 0x07, 0x8d, 0x7b, 0x54, 0xba, 0x82, 0xca, 0x6e, 0x56, 0xbc, 0x82, 0x0d, 0x79, 0xcb, 0xc1, 0x9b, 0x33, 0xee, 0x7e, 0x4a, 0x18, 0x5e, 0x68, 0xaf, 0x11, 0x6e, 0xbe, 0x10, 0x37, 0xde, 0xab, 0xb3, 0x87, 0x23, 0x5e, 0xb0, 0xa7, 0xe4, 0xae, 0x32, 0x13, 0x26, 0x97, 0x0d, 0xbd, 0x29, 0xa7, 0x6e, 0xa4, 0xfe, 0x17, 0x05, 0x9f, 0xf4, 0xab, 1 + 0x78, 0xda, 0xed, 0x3c, 0x4b, 0x73, 0x1b, 0xc9, 0x79, 0xb3, 0xd6, 0x3a, 0x5b, 0x44, 0x7a, 0x77, 0xc3, 0x3d, 0xa7, 0xca, 0xb3, 0xd8, 0x43, 0x00, 0x12, 0x04, 0x49, 0x80, 0x52, 0x6d, 0x22, 0xa2, 0x5c, 0x5c, 0x12, 0x92, 0x58, 0x16, 0x49, 0x15, 0x49, 0xad, 0x9c, 0x72, 0xb9, 0x68, 0x10, 0x1c, 0x90, 0x88, 0x21, 0x80, 0x35, 0x00, 0x05, 0x72, 0x37, 0xaa, 0xca, 0x51, 0x87, 0x1c, 0x72, 0xf5, 0x9e, 0x36, 0xc9, 0x25, 0x66, 0xe9, 0x90, 0xc7, 0x1f, 0x68, 0x49, 0x89, 0x13, 0x3b, 0x1d, 0xac, 0x37, 0xce, 0xdb, 0x96, 0x68, 0x27, 0x76, 0x9e, 0xd0, 0x44, 0x1b, 0xe7, 0x9d, 0xad, 0x52, 0xbe, 0xaf, 0x1f, 0x33, 0x3d, 0x33, 0x3d, 0x43, 0x69, 0x2d, 0xdb, 0x1b, 0x86, 0x3d, 0x6c, 0xf5, 0x74, 0x7f, 0xfd, 0x7d, 0xfd, 0xbd, 0xa7, 0xa7, 0x07, 0xa5, 0x51, 0xcb, 0xb2, 0x9e, 0x7b, 0xf7, 0x53, 0xd6, 0x80, 0x41, 0xb9, 0x75, 0xeb, 0xd6, 0xed, 0xc3, 0xc3, 0xc3, 0xdb, 0xd8, 0x42, 0xf7, 0x36, 0xa3, 0x7e, 0x65, 0x6c, 0xe8, 0xdd, 0xba, 0xc5, 0xbc, 0xc3, 0x43, 0xea, 0xdd, 0xfa, 0x0d, 0xea, 0xb1, 0xdb, 0x94, 0xd1, 0xdb, 0x94, 0xaa, 0xca, 0xf1, 0x47, 0x47, 0x47, 0x0b, 0xd9, 0x6c, 0xb6, 0x80, 0x2d, 0x74, 0x0b, 0x80, 0xa7, 0x2a, 0xe2, 0x8f, 0x8e, 0x32, 0x2f, 0x9b, 0xa5, 0xde, 0xe8, 0xab, 0x80, 0x5f, 0xa0, 0x1e, 0x15, 0x75, 0x48, 0x0b, 0x16, 0xe3, 0xf8, 0x80, 0x3b, 0x5b, 0x2e, 0x97, 0x67, 0xb1, 0x85, 0xee, 0x2c, 0x81, 0x0a, 0xb8, 0xb3, 0x12, 0x3f, 0x9b, 0x65, 0x5e, 0xb9, 0x4c, 0xbd, 0x6c, 0x09, 0xf0, 0x67, 0xa9, 0x47, 0xa0, 0xd2, 0x59, 0xc0, 0x9f, 0x95, 0xf8, 0xfd, 0x7e, 0xbf, 0xd5, 0x68, 0x34, 0x5a, 0xd8, 0x42, 0x97, 0x57, 0x62, 0x11, 0x6c, 0x11, 0xbf, 0xdf, 0x67, 0x5e, 0xa3, 0x41, 0xbd, 0xfe, 0x36, 0xe0, 0xb7, 0x80, 0x66, 0x8b, 0x52, 0x0b, 0x2a, 0xb6, 0x5f, 0xbf, 0x7f, 0xff, 0xc5, 0xfb, 0x58, 0x1e, 0x3e, 0xb8, 0x7f, 0xdf, 0xf3, 0xee, 0x3f, 0xf4, 0xbc, 0x07, 0xd8, 0x85, 0x7f, 0x1e, 0x7e, 0xdb, 0xf3, 0x5e, 0x52, 0x70, 0x3e, 0x0e, 0x70, 0x3e, 0x2f, 0x06, 0x7f, 0x20, 0xf1, 0x65, 0x0b, 0xfd, 0x10, 0xfc, 0xa1, 0xa4, 0xff, 0x50, 0xe2, 0x3f, 0x0c, 0xf0, 0xbf, 0xd0, 0x68, 0xfc, 0x44, 0xe3, 0xc6, 0x76, 0xa3, 0xb1, 0x7d, 0x43, 0xd4, 0x7e, 0x9f, 0xb7, 0x30, 0x72, 0x63, 0xb7, 0xdf, 0x7f, 0xc1, 0xce, 0x66, 0x3f, 0x91, 0x1d, 0x7d, 0x35, 0x9b, 0x7d, 0xf5, 0x95, 0xac, 0xde, 0xc2, 0xdd, 0x2b, 0x3f, 0x35, 0x3a, 0xfa, 0xdc, 0xbb, 0x87, 0x87, 0x99, 0xc3, 0x2f, 0xbf, 0x73, 0xc8, 0xeb, 0x3b, 0x5f, 0x3e, 0x54, 0xf7, 0x70, 0xf7, 0xce, 0xaf, 0x7c, 0xe9, 0x4b, 0x23, 0x53, 0xe5, 0xf2, 0x99, 0x72, 0xe9, 0xb5, 0x32, 0xaf, 0xaf, 0x65, 0x41, 0xcb, 0xd8, 0x96, 0xca, 0x25, 0xf8, 0x17, 0x69, 0x73, 0x7b, 0xa3, 0xed, 0xf9, 0xf5, 0x35, 0x7e, 0xff, 0xcb, 0xe0, 0x07, 0xcc, 0xa2, 0xa8, 0xdb, 0x01, 0xbb, 0x6d, 0x31, 0xb0, 0xfd, 0xf0, 0x36, 0xd8, 0xff, 0x50, 0x56, 0xf4, 0x07, 0x8b, 0x0e, 0x3d, 0xc6, 0x3c, 0x8f, 0xdb, 0x1b, 0x6d, 0x9f, 0xbd, 0x0b, 0x2d, 0x5e, 0xd9, 0xec, 0x4f, 0x83, 0x1f, 0xf8, 0xf8, 0x05, 0x4a, 0xc1, 0xf6, 0xbc, 0x16, 0xb2, 0x94, 0x71, 0x3f, 0x18, 0x0d, 0xf0, 0xb9, 0xbd, 0xd1, 0xf6, 0xf7, 0xee, 0xdd, 0x9b, 0x2d, 0xcf, 0xce, 0xe2, 0x3d, 0xd2, 0xf0, 0xf1, 0x67, 0x29, 0x05, 0xdb, 0xd3, 0x7b, 0x50, 0x67, 0xcb, 0x94, 0x71, 0x3f, 0xc8, 0x06, 0xf8, 0xdc, 0xd6, 0x68, 0xfb, 0x06, 0xb6, 0x5f, 0xe1, 0xf7, 0xbf, 0x08, 0x7e, 0xe0, 0xe3, 0xb7, 0x2c, 0x06, 0xb6, 0x1f, 0xb6, 0xc0, 0xfe, 0x0d, 0x59, 0xd1, 0x1f, 0x14, 0x3e, 0x84, 0x81, 0x95, 0xe4, 0x03, 0x38, 0xae, 0xc3, 0xa3, 0x3e, 0x10, 0x86, 0xc7, 0x7d, 0x20, 0x04, 0x37, 0xf8, 0x80, 0x82, 0x27, 0xf9, 0x00, 0x8e, 0x23, 0x3c, 0xc9, 0x07, 0x70, 0x1c, 0xe1, 0x49, 0x3e, 0x80, 0xe3, 0x08, 0x4f, 0xf2, 0x01, 0x1c, 0x37, 0xc6, 0x2f, 0x2f, 0xd9, 0x42, 0x81, 0xdd, 0x35, 0xc5, 0x2f, 0xc0, 0xc1, 0x9e, 0x50, 0xef, 0x42, 0xb5, 0x9e, 0x41, 0xd9, 0xbe, 0xea, 0xbc, 0x60, 0xfd, 0x90, 0x0a, 0x3a, 0x57, 0xac, 0x32, 0xc2, 0x2b, 0xa8, 0xbf, 0x8c, 0x25, 0x06, 0xff, 0xd6, 0x8b, 0xfe, 0x9c, 0xf2, 0x19, 0xcb, 0xe2, 0xf5, 0xfb, 0x8f, 0x1f, 0xf3, 0xf6, 0x1b, 0x2f, 0xde, 0x2f, 0xeb, 0x45, 0xc1, 0xf5, 0x79, 0x5a, 0xb1, 0x3e, 0xe6, 0x25, 0x88, 0x5f, 0x6c, 0xef, 0xb2, 0x78, 0xfc, 0x5a, 0x18, 0xb3, 0x43, 0x88, 0x5d, 0xee, 0x03, 0xd1, 0xf8, 0x7d, 0x16, 0x3c, 0x3c, 0x7a, 0xfc, 0xd8, 0x3a, 0x2d, 0xa7, 0xe5, 0xb4, 0xfc, 0x98, 0x0a, 0x21, 0xa2, 0x42, 0x36, 0xa7, 0x84, 0xf1, 0xaa, 0x17, 0xca, 0x08, 0x80, 0xa0, 0x52, 0xcc, 0x0a, 0x38, 0x89, 0x45, 0x92, 0x2c, 0xc2, 0xe1, 0x62, 0x02, 0x17, 0xdb, 0x30, 0x01, 0xa0, 0xcd, 0x2c, 0x31, 0xce, 0x64, 0x3f, 0x84, 0x2f, 0xc6, 0x38, 0x5c, 0xce, 0x0d, 0xaf, 0xcf, 0x04, 0x7d, 0xb5, 0x06, 0x23, 0xb1, 0xf5, 0x91, 0x7f, 0x81, 0x6f, 0x89, 0xaa, 0x40, 0x90, 0xc4, 0x93, 0x6a, 0xc0, 0x9e, 0x46, 0x1f, 0x2f, 0x62, 0x90, 0x8f, 0xaa, 0xb5, 0x19, 0xbf, 0x0f, 0x8b, 0x17, 0xe8, 0xcc, 0xa4, 0x3f, 0x21, 0x13, 0x15, 0xba, 0xe3, 0xfa, 0x8b, 0xf2, 0x0f, 0xf3, 0x09, 0xe5, 0xd5, 0x88, 0xcf, 0x08, 0xa8, 0x9e, 0xf9, 0x15, 0xfb, 0x21, 0xf3, 0x51, 0x82, 0x2c, 0x11, 0x68, 0x09, 0xb6, 0x94, 0x86, 0xe1, 0x3e, 0xdf, 0xca, 0x3e, 0x16, 0x35, 0xd8, 0x97, 0x89, 0xca, 0x6d, 0xc4, 0x0c, 0x4e, 0x42, 0x83, 0x1a, 0xb3, 0xaf, 0x94, 0x91, 0x4a, 0xfb, 0x45, 0x77, 0x05, 0x12, 0x86, 0xfe, 0x63, 0x29, 0x1b, 0x9b, 0xfc, 0x87, 0xd3, 0x36, 0xe1, 0x47, 0xfc, 0x83, 0xc6, 0xfd, 0xc3, 0xd4, 0x6a, 0x13, 0x40, 0x49, 0xa8, 0x5d, 0xfc, 0x43, 0x47, 0x66, 0x71, 0xff, 0x52, 0xf6, 0x95, 0x6d, 0x4c, 0x7a, 0xae, 0x17, 0x03, 0x6f, 0x3a, 0x8f, 0x8c, 0x18, 0x71, 0x71, 0x71, 0xa9, 0x37, 0xc2, 0x63, 0xc8, 0x0a, 0xcb, 0xaf, 0xfc, 0x49, 0xd9, 0x85, 0xc6, 0xb6, 0x55, 0xb8, 0x2e, 0x15, 0x3e, 0x6e, 0x70, 0x1f, 0x1f, 0x9f, 0x26, 0xe0, 0xeb, 0xfe, 0xab, 0x74, 0x1c, 0xa3, 0x4f, 0xa4, 0x7c, 0x44, 0xf2, 0x1b, 0x61, 0x9f, 0xc9, 0x38, 0x63, 0x71, 0xb0, 0xaf, 0x77, 0x69, 0x63, 0x6a, 0xd0, 0xaf, 0xe2, 0x4b, 0xd5, 0x98, 0xee, 0x64, 0x7e, 0x11, 0xbc, 0x58, 0x31, 0xff, 0xb4, 0x02, 0x0f, 0x89, 0xfb, 0x1f, 0x09, 0x68, 0xf0, 0x36, 0xa6, 0x1f, 0xac, 0x32, 0x7f, 0x51, 0xa1, 0xc3, 0xc4, 0xf8, 0x60, 0xe1, 0xfc, 0x45, 0x45, 0x0e, 0x51, 0x03, 0xc4, 0xbf, 0xa7, 0xda, 0x78, 0x82, 0xda, 0x74, 0xf7, 0x53, 0x35, 0xc9, 0x75, 0x68, 0x92, 0x6b, 0x69, 0x7e, 0xa5, 0xe7, 0x2c, 0x3d, 0xbf, 0xa5, 0xfa, 0x26, 0xb5, 0x64, 0xee, 0x95, 0xa1, 0xc7, 0x54, 0xbe, 0x35, 0x98, 0x96, 0xc5, 0x4d, 0x0c, 0x99, 0x92, 0x40, 0xd6, 0x21, 0x4c, 0xbf, 0x64, 0x5f, 0xcf, 0xaf, 0xd0, 0xc5, 0xec, 0x65, 0x61, 0x1b, 0xca, 0xaf, 0x32, 0xb6, 0x31, 0x43, 0x11, 0xe8, 0x10, 0xdf, 0x86, 0xc4, 0xd7, 0x3d, 0x97, 0x41, 0xf3, 0x8d, 0x70, 0x0c, 0x12, 0xc5, 0x3c, 0x97, 0x13, 0x97, 0x25, 0xba, 0x0b, 0x33, 0x12, 0xc4, 0x9d, 0x7a, 0x8e, 0x91, 0x40, 0x17, 0x84, 0x10, 0x22, 0xa9, 0x84, 0x5b, 0x39, 0xae, 0x3b, 0x0f, 0x15, 0x8c, 0x83, 0x20, 0x8c, 0xa7, 0x89, 0xd3, 0x72, 0x5a, 0x4e, 0x7a, 0xe1, 0x47, 0x64, 0x9e, 0xe7, 0x0d, 0xf1, 0x4d, 0x1f, 0x0b, 0x6f, 0x07, 0x03, 0xd9, 0x7a, 0x12, 0x3c, 0xd0, 0xc1, 0x83, 0x81, 0x98, 0xee, 0x89, 0x36, 0x28, 0x06, 0x3a, 0x11, 0x70, 0x8c, 0xce, 0xa9, 0x05, 0x7e, 0xbc, 0x65, 0x38, 0x40, 0x43, 0x82, 0xdd, 0xa0, 0xa2, 0x81, 0x58, 0xbc, 0x78, 0x5a, 0x19, 0x44, 0x81, 0xca, 0x4f, 0x90, 0x4e, 0x02, 0xbe, 0xf2, 0x13, 0x23, 0xfe, 0xa9, 0x05, 0x3e, 0x46, 0xf1, 0x6f, 0xa8, 0x2c, 0x30, 0xeb, 0x20, 0xa1, 0x9a, 0xf0, 0x31, 0xc0, 0x61, 0x6c, 0xe8, 0x99, 0xf0, 0xf1, 0x5c, 0xc9, 0xc3, 0x3a, 0x48, 0xc2, 0x1f, 0x7a, 0xa2, 0x32, 0x23, 0x3e, 0xe2, 0xf1, 0x7a, 0xec, 0xfa, 0x71, 0x7c, 0x2f, 0x52, 0x0d, 0xf8, 0x9e, 0x5e, 0x53, 0xf9, 0x37, 0xe3, 0xfb, 0xb2, 0x0f, 0xa5, 0x0a, 0x75, 0x7c, 0x5d, 0x76, 0xbc, 0x3f, 0x3e, 0xfe, 0x20, 0xb8, 0x20, 0x6e, 0x64, 0x65, 0x2c, 0x21, 0x40, 0xd9, 0x13, 0x16, 0x3d, 0x98, 0x59, 0xd4, 0xde, 0x66, 0x5e, 0x34, 0x5b, 0xc7, 0x79, 0x91, 0x72, 0x26, 0xe2, 0x4b, 0x1b, 0xa7, 0xe0, 0xb3, 0x61, 0x1a, 0xfe, 0x80, 0xfd, 0x60, 0xf8, 0x9a, 0x9d, 0x92, 0xf0, 0x95, 0xad, 0x7f, 0x90, 0xf5, 0x87, 0x69, 0xf8, 0x83, 0x14, 0xfc, 0x68, 0x19, 0x08, 0x9e, 0x79, 0x1d, 0x3e, 0x41, 0x4d, 0x89, 0xcb, 0x20, 0x3e, 0x9f, 0xc2, 0x39, 0x4c, 0xf1, 0xcf, 0xd2, 0xf3, 0x40, 0x1a, 0xfe, 0x30, 0x0d, 0x7f, 0x70, 0x2c, 0xfe, 0xd0, 0x4b, 0xc3, 0xf7, 0xf3, 0xc7, 0x47, 0x58, 0x3f, 0x14, 0xbf, 0x66, 0x7c, 0x3f, 0xfe, 0x3f, 0x22, 0xff, 0xc3, 0x34, 0x7c, 0x95, 0x07, 0x74, 0xdf, 0x4d, 0x78, 0x7e, 0xea, 0xbe, 0x73, 0x6c, 0x6c, 0x3f, 0x4d, 0x1e, 0x60, 0x49, 0x7e, 0x15, 0xe6, 0xc5, 0xe0, 0x53, 0xc3, 0x48, 0xfc, 0xf8, 0xf9, 0x3a, 0x86, 0xef, 0x69, 0xf9, 0xda, 0x8c, 0x3f, 0x54, 0xf1, 0x37, 0x34, 0xe2, 0xcb, 0x3c, 0x3f, 0x48, 0x5d, 0x3f, 0x05, 0x3f, 0x9e, 0xef, 0x93, 0xf0, 0x43, 0x79, 0x20, 0x8a, 0x9f, 0xbc, 0xfe, 0xd0, 0xd3, 0x72, 0xc0, 0xd0, 0xc4, 0xbf, 0xca, 0x01, 0x83, 0xa7, 0xb0, 0xe5, 0x40, 0xca, 0xf2, 0x89, 0xaf, 0x7e, 0xca, 0xc2, 0xaf, 0x23, 0xef, 0xbd, 0x0c, 0xf5, 0x43, 0xa8, 0xec, 0x65, 0xa8, 0x1f, 0x8a, 0xf6, 0xf1, 0x87, 0xd6, 0x23, 0x0b, 0x00, 0x8f, 0xd4, 0x84, 0xc7, 0xd6, 0x23, 0x00, 0xbc, 0x07, 0x13, 0x1e, 0x31, 0x39, 0xe9, 0xd1, 0x63, 0xfc, 0x13, 0xb7, 0x80, 0xaf, 0x57, 0x09, 0x3e, 0x2d, 0xa7, 0xe5, 0xb4, 0xfc, 0x9f, 0xde, 0xc4, 0x6b, 0xd5, 0xb2, 0xe2, 0xdf, 0x4f, 0xa8, 0x65, 0xa5, 0x7d, 0xa9, 0xa7, 0xe2, 0x68, 0x3a, 0xd4, 0x46, 0xcf, 0x5f, 0x89, 0x3c, 0x86, 0xc3, 0x9b, 0xf8, 0xf1, 0x6b, 0x70, 0xee, 0x4a, 0x55, 0x3f, 0x72, 0x04, 0xc9, 0xf1, 0x89, 0x38, 0xbb, 0xa3, 0x24, 0x7e, 0xbe, 0x4c, 0xd3, 0xe4, 0x53, 0x67, 0xba, 0x44, 0x3f, 0xae, 0x8b, 0x1d, 0x1f, 0xfb, 0x95, 0x1a, 0x8e, 0xdf, 0x09, 0x11, 0xc7, 0xfe, 0xfc, 0xd8, 0x8f, 0x98, 0x8f, 0xe8, 0x29, 0x4b, 0x3e, 0xc3, 0xd5, 0x3f, 0x65, 0x24, 0xf1, 0x4b, 0x9f, 0xe0, 0x6d, 0x96, 0x92, 0xf8, 0xf9, 0xbd, 0x15, 0xd3, 0x5f, 0x9c, 0x2e, 0x93, 0xa7, 0xa7, 0x2c, 0xfe, 0xf9, 0xc2, 0x3f, 0xdf, 0x55, 0x3e, 0x10, 0xfd, 0x3e, 0xc6, 0xfc, 0xef, 0x6b, 0x72, 0x4a, 0x0c, 0x4e, 0xfc, 0xef, 0x6e, 0x84, 0x26, 0xd3, 0x67, 0x54, 0xcd, 0xb5, 0x62, 0xf8, 0x4c, 0x5b, 0xc7, 0xf4, 0xf9, 0x45, 0xc1, 0x4d, 0xfc, 0xeb, 0xeb, 0x1b, 0x3e, 0xff, 0x49, 0x7c, 0x12, 0x6a, 0xcd, 0x70, 0x61, 0x1c, 0xca, 0x92, 0x75, 0x6e, 0xd2, 0x7f, 0x14, 0x1e, 0xb3, 0xaf, 0x66, 0x1b, 0x93, 0xff, 0xe9, 0xb6, 0x37, 0xf9, 0x40, 0x08, 0xcf, 0xf4, 0x79, 0x4b, 0x93, 0xdf, 0x18, 0xbf, 0xd2, 0x6f, 0xf9, 0xd9, 0xb7, 0x61, 0x0d, 0x25, 0x3f, 0xaf, 0x4c, 0xb4, 0x51, 0xfb, 0x0b, 0x58, 0xd0, 0x9a, 0xf1, 0x93, 0xec, 0xa3, 0xd1, 0x37, 0xe0, 0xeb, 0xf6, 0x4f, 0xf2, 0xaf, 0x10, 0xdc, 0x20, 0x3f, 0x1f, 0xa7, 0x44, 0xb3, 0xa3, 0xee, 0x7e, 0x61, 0xd9, 0xa2, 0xf2, 0x51, 0xf5, 0xd1, 0x22, 0xd1, 0xff, 0x89, 0x6f, 0x64, 0x66, 0xf0, 0x6f, 0x4e, 0x53, 0x7e, 0x53, 0xe0, 0x6d, 0x54, 0x7f, 0xd1, 0x1a, 0xa5, 0x4f, 0x25, 0x6f, 0x3c, 0x4f, 0x92, 0x58, 0xfe, 0xe3, 0xf4, 0x89, 0x9c, 0x43, 0x4d, 0xfc, 0x87, 0xf5, 0x9b, 0xaa, 0x7f, 0x96, 0x1c, 0x1f, 0x61, 0x7c, 0x92, 0x82, 0x1f, 0xd7, 0x1f, 0x53, 0xf9, 0x8f, 0x99, 0xfc, 0x83, 0xc4, 0x95, 0x60, 0xb2, 0x4f, 0x12, 0xff, 0x51, 0x18, 0x89, 0x3f, 0x3f, 0x08, 0x09, 0x74, 0xc8, 0xa8, 0xd9, 0xfe, 0xba, 0x9c, 0xe1, 0xf8, 0x25, 0xa2, 0xea, 0x7c, 0x46, 0xed, 0xaf, 0xe5, 0x96, 0xd8, 0x67, 0x34, 0x16, 0x79, 0xbe, 0xa4, 0x7c, 0x5e, 0x0c, 0x6e, 0xe2, 0xcf, 0x04, 0xff, 0xf9, 0x43, 0x12, 0x3e, 0xdf, 0x3e, 0xe1, 0x37, 0xa5, 0xa8, 0xff, 0x1a, 0x96, 0x34, 0xe2, 0x60, 0xee, 0x16, 0xf9, 0xdb, 0xe0, 0xbf, 0x11, 0x1f, 0x30, 0xe1, 0x33, 0xf5, 0x09, 0x98, 0xc5, 0x13, 0x64, 0x1a, 0xfd, 0xf0, 0x33, 0xca, 0x90, 0x03, 0x71, 0x4f, 0x41, 0xe4, 0xde, 0xc2, 0xf8, 0xfc, 0x93, 0x39, 0x4e, 0xc6, 0x91, 0x15, 0x89, 0x51, 0x66, 0xc8, 0x41, 0x31, 0x01, 0xad, 0x64, 0xff, 0x8c, 0x26, 0x7f, 0x62, 0xa2, 0xaf, 0xe7, 0x47, 0x83, 0x7d, 0xf5, 0x6a, 0x19, 0xe4, 0x57, 0xcf, 0x46, 0x1e, 0xff, 0xc4, 0x00, 0x4f, 0xe3, 0x3f, 0x12, 0xc3, 0xa6, 0x67, 0xc8, 0xf1, 0x39, 0x20, 0x62, 0x1f, 0x9a, 0xf0, 0x0c, 0x30, 0xa8, 0x47, 0xb7, 0xbf, 0x31, 0xfe, 0xa3, 0xb6, 0x33, 0xc9, 0x9f, 0x12, 0xff, 0xd1, 0x18, 0x36, 0xf9, 0x72, 0x28, 0x07, 0x50, 0x93, 0x7e, 0x89, 0xff, 0x0d, 0xdd, 0x04, 0x8f, 0xca, 0x4e, 0xd3, 0x72, 0x40, 0x42, 0xfc, 0xd3, 0x84, 0xf8, 0xb7, 0x88, 0xa1, 0x9a, 0xe2, 0x9f, 0x25, 0xc4, 0xbf, 0xf8, 0xe0, 0x6c, 0x3d, 0x9b, 0x5f, 0xcb, 0x9e, 0x96, 0xd3, 0x72, 0x5a, 0x4e, 0x4b, 0x78, 0x7f, 0x40, 0xb5, 0xd7, 0x12, 0x1a, 0x4f, 0x3d, 0x16, 0x49, 0xd9, 0x3f, 0x10, 0xe2, 0xff, 0x84, 0xd2, 0x6f, 0x63, 0xf9, 0x5f, 0x6f, 0x0d, 0xe9, 0x31, 0xf4, 0xee, 0x4a, 0x12, 0x8e, 0x27, 0xd4, 0x4f, 0x73, 0x88, 0x99, 0xff, 0x64, 0x06, 0x23, 0x32, 0x12, 0xf3, 0xfe, 0x8c, 0x5a, 0xe6, 0xf7, 0x67, 0x25, 0xa3, 0x3a, 0x87, 0x48, 0xd2, 0x21, 0x3b, 0xee, 0x1c, 0x22, 0x72, 0x1c, 0x61, 0xc5, 0xb7, 0x39, 0x4f, 0x6c, 0x2f, 0x2b, 0xf9, 0x08, 0xc0, 0x78, 0x66, 0xa0, 0xff, 0xb4, 0x89, 0x99, 0x78, 0xd7, 0xe4, 0x37, 0x3d, 0xde, 0x74, 0xfa, 0x69, 0x70, 0xcb, 0x40, 0x9f, 0x68, 0xbe, 0x61, 0x7a, 0xfe, 0x31, 0xa2, 0x3d, 0x36, 0x89, 0x79, 0xfb, 0x45, 0xac, 0xb0, 0x8f, 0xc5, 0xf4, 0x46, 0xc2, 0xc7, 0x3c, 0x31, 0xfa, 0x24, 0x1d, 0x3f, 0x8d, 0x3f, 0x2b, 0x25, 0x36, 0x4c, 0xf0, 0x94, 0xe3, 0x99, 0xc4, 0xbd, 0xb8, 0xe2, 0x89, 0x19, 0xf7, 0x36, 0xa9, 0x3f, 0x4f, 0x0c, 0xc9, 0x6f, 0xe2, 0x91, 0xea, 0xf2, 0x5b, 0xe6, 0xf8, 0xd1, 0xf5, 0x43, 0x4c, 0xdb, 0x1b, 0x12, 0x6e, 0x4d, 0xf6, 0xf1, 0x8f, 0xd7, 0x12, 0xf0, 0x93, 0xfc, 0x4f, 0xb7, 0xbf, 0xd1, 0xbf, 0x22, 0x70, 0x92, 0xb4, 0x7e, 0x42, 0x7e, 0x20, 0xe4, 0x18, 0xf9, 0x22, 0xf9, 0x21, 0xc9, 0xbf, 0xac, 0xf0, 0x4f, 0x03, 0xe3, 0xf4, 0x13, 0x72, 0x65, 0x74, 0xeb, 0x67, 0xa2, 0xcf, 0x22, 0x31, 0x9a, 0xa6, 0x3f, 0x92, 0x60, 0x3f, 0x92, 0xc0, 0x5f, 0xc8, 0x7e, 0x26, 0xfd, 0x45, 0x74, 0x94, 0x64, 0x3f, 0xa6, 0xc9, 0x68, 0xd2, 0x7f, 0x52, 0xfc, 0x47, 0xf5, 0x9b, 0xa4, 0xbf, 0xe3, 0xec, 0x47, 0x8e, 0xd1, 0xbf, 0xcf, 0x63, 0x02, 0x3e, 0x4d, 0xb2, 0x8f, 0x06, 0x37, 0xf1, 0x17, 0xcd, 0x2f, 0xcc, 0x74, 0xfe, 0xa7, 0xcb, 0x77, 0x4c, 0x0c, 0x9b, 0x8e, 0xdf, 0x43, 0xfe, 0x97, 0x60, 0x9f, 0x27, 0x3e, 0xce, 0x27, 0xd6, 0x53, 0xbf, 0xff, 0xb3, 0x48, 0x9e, 0x88, 0xf2, 0xce, 0xac, 0xe4, 0xf8, 0x8d, 0xe6, 0x00, 0x9a, 0xf0, 0xf3, 0xf0, 0x24, 0xfb, 0x86, 0x72, 0x54, 0x12, 0x7e, 0xc4, 0x8f, 0xac, 0x94, 0x1c, 0x17, 0x3d, 0x23, 0x25, 0x86, 0x18, 0x4a, 0xca, 0xdd, 0x46, 0xfa, 0x24, 0x1c, 0xc8, 0xc4, 0x40, 0x9f, 0x68, 0x47, 0x47, 0xa6, 0xf8, 0x4d, 0xcb, 0x2f, 0xa6, 0x1c, 0x60, 0x59, 0xe9, 0x39, 0xc0, 0x4a, 0x89, 0x61, 0x6a, 0xa5, 0xe3, 0xb3, 0xa4, 0x1c, 0xaa, 0xdb, 0xc7, 0x10, 0x23, 0x2c, 0xf9, 0xf1, 0x18, 0x1c, 0x3f, 0x27, 0xed, 0x2f, 0x48, 0xf2, 0xfe, 0x2b, 0x1a, 0xc3, 0xf4, 0x38, 0xb8, 0x95, 0x0c, 0x37, 0xc5, 0x7f, 0x74, 0xff, 0x46, 0x52, 0xe8, 0x27, 0x7d, 0x9f, 0x51, 0x79, 0x31, 0x2d, 0xfe, 0x59, 0x42, 0xfc, 0x53, 0x83, 0x8f, 0x19, 0xfd, 0x83, 0x98, 0xe3, 0xdf, 0xd7, 0xef, 0xf3, 0x85, 0x97, 0x2d, 0x7a, 0xc7, 0x74, 0x7d, 0xfb, 0x3b, 0xa6, 0xeb, 0x24, 0xbc, 0x9c, 0xb0, 0x3f, 0x32, 0x5d, 0xc3, 0x87, 0xa6, 0xeb, 0x44, 0xbc, 0x8c, 0xfd, 0x3f, 0xb3, 0xef, 0xd7, 0xdf, 0x8f, 0x5e, 0x68, 0xdf, 0x47, 0x1f, 0x44, 0xaf, 0x53, 0xfb, 0x9e, 0x14, 0xfb, 0xe2, 0x15, 0xb7, 0x2f, 0x5e, 0xa7, 0xf6, 0x3d, 0xb5, 0xef, 0xc7, 0xbd, 0x1c, 0x19, 0xcc, 0x3b, 0xb8, 0x73, 0x64, 0x30, 0xaf, 0x77, 0x22, 0xec, 0x7b, 0x64, 0x30, 0xef, 0xb7, 0x1e, 0x1c, 0x19, 0xcc, 0xfb, 0xe1, 0x83, 0x93, 0x20, 0xef, 0xd7, 0xfe, 0x30, 0x6e, 0xe0, 0xfb, 0x0f, 0xfe, 0xf1, 0x9f, 0xe2, 0x06, 0xbe, 0x7f, 0x22, 0xe4, 0xfd, 0xab, 0x6f, 0x9a, 0xe2, 0xf7, 0xbf, 0xff, 0xe7, 0xc4, 0xe6, 0xe7, 0xc1, 0x1d, 0xfe, 0x27, 0xcb, 0x9d, 0x23, 0x5e, 0x20, 0x58, 0xf9, 0x9f, 0x2c, 0xdf, 0x11, 0xa3, 0x27, 0x22, 0x3f, 0xbf, 0xf7, 0x3e, 0xff, 0x93, 0xe5, 0xfd, 0xa3, 0xa3, 0xbb, 0xf7, 0x8e, 0x8e, 0x1e, 0xfd, 0xf3, 0x07, 0xfc, 0x4f, 0x96, 0x0f, 0x8e, 0x8e, 0xfe, 0xfa, 0x6f, 0x4e, 0x86, 0xbc, 0x47, 0xb1, 0xf2, 0xc7, 0xdf, 0x38, 0x32, 0x94, 0x7f, 0xf9, 0xfe, 0x09, 0x91, 0xf7, 0xdd, 0x5f, 0x0d, 0xc9, 0xf5, 0x95, 0xdf, 0xff, 0xdd, 0xdf, 0xfb, 0x83, 0xaf, 0x1e, 0xfd, 0xda, 0xaf, 0x87, 0x46, 0xff, 0xf6, 0xef, 0xbe, 0xfb, 0xbd, 0xbf, 0xff, 0x87, 0x13, 0x21, 0xef, 0x6f, 0xfe, 0x56, 0x48, 0xb2, 0x3f, 0xfb, 0xf3, 0x3f, 0xf9, 0xd3, 0xbf, 0xf8, 0xcb, 0xa3, 0xdf, 0xfe, 0x9d, 0xd0, 0xe8, 0xbf, 0xff, 0xc7, 0xbf, 0xfe, 0xdb, 0x7f, 0xfe, 0xd7, 0xc8, 0x1d, 0xcb, 0xfa, 0x24, 0xbf, 0x5e, 0x1e, 0xc1, 0xeb, 0x27, 0xf9, 0xc5, 0xef, 0xad, 0x27, 0xb9, 0xf8, 0xff, 0x8e, 0x65, 0x9d, 0xc1, 0xeb, 0x79, 0xb8, 0x5e, 0x80, 0x8b, 0x9c, 0x21, 0x23, 0x56, 0xf8, 0x22, 0x91, 0x4b, 0xa7, 0x70, 0x06, 0x48, 0xfc, 0x92, 0xf5, 0x92, 0xf5, 0xd2, 0x73, 0x2f, 0x3d, 0xf7, 0x64, 0x6b, 0x46, 0xaf, 0xe7, 0x3f, 0xe9, 0xbd, 0x62, 0xad, 0x5f, 0xaa, 0x2e, 0x55, 0x2b, 0x99, 0xb7, 0x33, 0x23, 0xf3, 0x2b, 0x0b, 0x55, 0xbb, 0x92, 0x19, 0x81, 0xdb, 0x91, 0x37, 0x2e, 0xda, 0x58, 0x2a, 0xd3, 0x67, 0x0b, 0xd0, 0xbb, 0xa0, 0x7a, 0x25, 0xec, 0xad, 0xad, 0xaf, 0x2e, 0x2e, 0x5f, 0xb4, 0x2b, 0x33, 0xd8, 0x59, 0xbe, 0xba, 0xf4, 0x46, 0x75, 0x15, 0x40, 0xd3, 0xd8, 0xfb, 0x4c, 0xf5, 0xe7, 0xaf, 0xad, 0xac, 0x2e, 0x54, 0xca, 0xd8, 0x99, 0xbb, 0xb2, 0xc8, 0xb1, 0x38, 0x89, 0xf9, 0x95, 0xa5, 0xa5, 0xea, 0xf2, 0x7a, 0x65, 0x9a, 0x63, 0xad, 0x2d, 0x5e, 0x5c, 0xe6, 0x04, 0xf9, 0xc4, 0xb5, 0xea, 0xe5, 0xea, 0xfc, 0xba, 0x2d, 0x61, 0xf3, 0x57, 0x57, 0xd7, 0x56, 0x80, 0xa2, 0x58, 0xeb, 0xd2, 0xdc, 0xc2, 0xca, 0x35, 0xbb, 0xd2, 0x73, 0xf7, 0x1c, 0x4e, 0xf3, 0xf2, 0xfa, 0xc6, 0x85, 0x15, 0xa0, 0xd3, 0xa8, 0xb5, 0xba, 0x7c, 0x64, 0x69, 0x6e, 0x7d, 0xfe, 0xd2, 0xc6, 0x42, 0xf5, 0xf2, 0xe2, 0xd2, 0xe2, 0x7a, 0x75, 0x75, 0x4d, 0x4d, 0xbd, 0x59, 0xc8, 0x64, 0x46, 0x2e, 0xce, 0x2d, 0x55, 0xaf, 0xcc, 0x2d, 0x48, 0xa1, 0xd6, 0x57, 0xae, 0xce, 0x5f, 0x82, 0x7b, 0xde, 0x01, 0x52, 0x57, 0x2e, 0xcd, 0x55, 0xa6, 0x5f, 0x9f, 0x42, 0x2a, 0x37, 0x05, 0xc6, 0xcd, 0x4c, 0x66, 0xfe, 0x52, 0x75, 0xfe, 0x33, 0x1b, 0xcb, 0xd5, 0x6b, 0x1b, 0x6f, 0x02, 0xb5, 0xc5, 0x95, 0x65, 0x4e, 0x30, 0xb3, 0xbc, 0xb2, 0xb1, 0xb6, 0x72, 0x75, 0x79, 0x41, 0x2c, 0x9c, 0xb9, 0xb8, 0x78, 0x61, 0xe3, 0x72, 0x75, 0xf9, 0xe2, 0xfa, 0xa5, 0x4a, 0x69, 0xca, 0x9e, 0x98, 0xb0, 0x9b, 0x6d, 0xbb, 0xeb, 0xd4, 0x3b, 0xed, 0xad, 0x6e, 0x66, 0x6d, 0xe5, 0xc2, 0xfa, 0xb5, 0xb9, 0xd5, 0xea, 0xc6, 0x6a, 0x75, 0x79, 0xa1, 0x8a, 0xba, 0x92, 0x48, 0xf3, 0xab, 0xeb, 0x1b, 0x4b, 0x2b, 0xcb, 0x8b, 0xeb, 0x2b, 0xab, 0x1a, 0x99, 0xb5, 0xf9, 0xb9, 0xcb, 0xd5, 0x4a, 0x39, 0x73, 0x75, 0x51, 0xde, 0xce, 0x64, 0x32, 0x13, 0xc9, 0x25, 0xd3, 0xd8, 0x6b, 0xd7, 0x7b, 0xcd, 0x4e, 0xdb, 0x5e, 0x5f, 0x9c, 0xcf, 0xe5, 0x33, 0x23, 0xf5, 0x56, 0x17, 0x9b, 0x56, 0xa7, 0x5e, 0x6b, 0xd9, 0xad, 0xda, 0xa6, 0xd3, 0xaa, 0x64, 0xd7, 0x77, 0x9a, 0x5d, 0x1b, 0xfe, 0xba, 0x07, 0xdd, 0x9e, 0x73, 0xdd, 0x06, 0xbe, 0x1a, 0xcd, 0xed, 0x3d, 0xb7, 0xc6, 0xf1, 0xea, 0x35, 0xb7, 0xe7, 0x36, 0xb7, 0xb6, 0x9d, 0xac, 0xc2, 0xea, 0x36, 0xdf, 0x72, 0x2a, 0xbb, 0x6e, 0xb3, 0xdd, 0xcb, 0x71, 0x02, 0x85, 0xa9, 0xc2, 0xc4, 0x39, 0xa0, 0xa9, 0x0f, 0xe5, 0x4a, 0x33, 0x53, 0x13, 0x38, 0x31, 0x3f, 0x39, 0x59, 0x2a, 0xe4, 0xa6, 0xcb, 0xe7, 0x60, 0x0a, 0xdc, 0xe6, 0x33, 0x4e, 0x7b, 0x2b, 0xc3, 0x65, 0x43, 0x63, 0x55, 0x57, 0xb9, 0x2f, 0x81, 0xee, 0xd6, 0xab, 0x9f, 0xad, 0x7c, 0xee, 0x73, 0xa0, 0xdb, 0xd7, 0x6e, 0x38, 0x6e, 0x17, 0x17, 0x9e, 0x9e, 0x9e, 0x82, 0x6e, 0xad, 0x07, 0xab, 0x6f, 0xee, 0xf5, 0x1c, 0xfb, 0x86, 0x53, 0x2f, 0xdb, 0xdb, 0xbb, 0x7b, 0x1b, 0x6f, 0x3a, 0x6e, 0xcf, 0xd9, 0x3f, 0x1f, 0x05, 0x96, 0x38, 0x70, 0xdd, 0xd9, 0x9f, 0xef, 0x74, 0xdc, 0xad, 0x18, 0x78, 0x86, 0x83, 0xe7, 0x3b, 0xad, 0x8e, 0x8b, 0xb0, 0xbd, 0x76, 0xb3, 0xd1, 0x71, 0xaf, 0xdb, 0xd7, 0x6b, 0x3d, 0x01, 0x59, 0xea, 0x6c, 0x39, 0xad, 0x37, 0x9b, 0x4e, 0xff, 0x8a, 0xdb, 0xf9, 0x05, 0x87, 0xeb, 0x6c, 0xa9, 0x06, 0xf8, 0x7c, 0xa1, 0x1b, 0x35, 0xf7, 0xa0, 0xd9, 0xde, 0x16, 0x74, 0xea, 0x8a, 0x86, 0x36, 0x5a, 0xb2, 0x7b, 0xda, 0xc2, 0x37, 0x3a, 0xcd, 0x2d, 0xa0, 0xdc, 0x6c, 0xe7, 0xf0, 0x2e, 0xaf, 0x7c, 0x88, 0x23, 0xda, 0x95, 0x30, 0x23, 0x23, 0x0a, 0x11, 0x00, 0x48, 0x28, 0xa7, 0x4b, 0x91, 0xe7, 0x33, 0xb6, 0x5b, 0x1b, 0x57, 0x3a, 0xdd, 0x26, 0x37, 0x47, 0x25, 0x9d, 0x59, 0x7b, 0x8c, 0xf3, 0x98, 0x0b, 0xf4, 0x54, 0xb0, 0xa7, 0x8b, 0x53, 0x9c, 0xce, 0xcd, 0xcc, 0xc8, 0xe7, 0x3f, 0x0f, 0x9e, 0x7b, 0x65, 0xf1, 0xb3, 0xd5, 0xcb, 0x46, 0x65, 0x4f, 0x4e, 0xee, 0xba, 0x4e, 0xbd, 0xc9, 0x47, 0x76, 0x9a, 0xdb, 0x3b, 0xbb, 0x76, 0xa3, 0xd5, 0xa9, 0xf5, 0x52, 0x65, 0x55, 0x8a, 0xec, 0xd6, 0xae, 0xef, 0xb6, 0x1c, 0xb7, 0xb4, 0x60, 0x77, 0x3b, 0x7b, 0x6e, 0xdd, 0xd1, 0x61, 0x9c, 0x8a, 0xdd, 0x73, 0xb7, 0x37, 0xf6, 0xcd, 0xc3, 0x07, 0xe6, 0xe1, 0xbe, 0x79, 0x78, 0x27, 0x3e, 0xdc, 0xad, 0xbb, 0xa6, 0xd9, 0x38, 0x0c, 0xb3, 0xb9, 0x68, 0x76, 0xf5, 0xfa, 0x5e, 0xab, 0xd6, 0x73, 0xb6, 0x20, 0xfa, 0x76, 0xf7, 0x7a, 0xb6, 0xeb, 0x74, 0x3b, 0xad, 0x3d, 0x54, 0x5d, 0x11, 0xe5, 0x43, 0xb9, 0x60, 0xa8, 0xc2, 0x6d, 0x50, 0x3a, 0x7b, 0xae, 0x38, 0x55, 0x98, 0x9e, 0x99, 0xe1, 0xaa, 0x13, 0xe8, 0x97, 0x6a, 0xee, 0x56, 0xdb, 0xe9, 0x76, 0xed, 0x4e, 0x03, 0xe8, 0xd6, 0xda, 0xad, 0x66, 0xdb, 0x29, 0x0a, 0x90, 0x3d, 0xf1, 0x7a, 0x71, 0x0a, 0x4c, 0xd3, 0xed, 0x34, 0x7a, 0x62, 0x64, 0x62, 0xfa, 0x1c, 0x1f, 0xb9, 0xee, 0x6c, 0x35, 0xf7, 0xae, 0xc3, 0x98, 0xe0, 0x67, 0x07, 0x68, 0xac, 0x01, 0x6e, 0x05, 0x11, 0x4c, 0x84, 0x77, 0x9b, 0xfb, 0x4e, 0xab, 0xcb, 0xf3, 0x43, 0x78, 0x89, 0x89, 0x52, 0x74, 0x85, 0x19, 0x3e, 0x80, 0x14, 0x43, 0xe4, 0xaf, 0x34, 0xf7, 0x2b, 0x13, 0xe5, 0x80, 0xfa, 0x42, 0xb3, 0xbb, 0xdb, 0xaa, 0x1d, 0xd8, 0xfd, 0x9a, 0xbb, 0x2b, 0x69, 0x4d, 0x71, 0xcc, 0x76, 0xa7, 0xed, 0x88, 0x3e, 0x38, 0xc8, 0xa4, 0x10, 0xc0, 0xd9, 0xef, 0xb9, 0xce, 0x75, 0x47, 0xe9, 0x03, 0x71, 0x84, 0x42, 0x70, 0xca, 0xb9, 0x19, 0xd4, 0x09, 0xdc, 0xcc, 0xbc, 0x8e, 0x6a, 0xb1, 0xe5, 0x02, 0x73, 0xd7, 0x3b, 0x7b, 0xed, 0x1e, 0xd7, 0xca, 0x4e, 0x6d, 0xab, 0xd3, 0x07, 0xc7, 0xef, 0x7e, 0xb1, 0xe8, 0xf3, 0x84, 0xbd, 0x85, 0x9a, 0xfb, 0xc5, 0xca, 0x54, 0xf1, 0xec, 0xf9, 0xd0, 0xe8, 0x65, 0xf0, 0xb0, 0x5e, 0x65, 0x1a, 0x87, 0x39, 0xa5, 0x89, 0x67, 0x54, 0x24, 0x5f, 0xdd, 0xd5, 0x8b, 0x6f, 0xd8, 0xbd, 0x8e, 0x7d, 0x19, 0x94, 0x58, 0x73, 0xa5, 0xe8, 0x73, 0xdd, 0xee, 0x1e, 0xba, 0xf1, 0x5e, 0x17, 0xff, 0x15, 0x53, 0x0e, 0x76, 0xc1, 0x27, 0xc0, 0xa5, 0x7b, 0x7b, 0x60, 0x7f, 0xbb, 0x87, 0xc9, 0xb0, 0xbb, 0xd3, 0xd9, 0x6b, 0x6d, 0x81, 0x8a, 0x7a, 0xf6, 0xa6, 0x63, 0xb7, 0x1d, 0x67, 0xcb, 0xd9, 0x0a, 0x44, 0x5a, 0xef, 0x08, 0x9a, 0xd3, 0x39, 0xd1, 0xaf, 0xe7, 0xdf, 0x76, 0x1d, 0xc0, 0x6e, 0xe7, 0xea, 0xb3, 0x20, 0xe6, 0xd4, 0xcc, 0xd4, 0xcc, 0xd9, 0xfc, 0xa7, 0xeb, 0x93, 0xd3, 0xa5, 0xe2, 0xcf, 0x96, 0x7e, 0x6e, 0xb7, 0xd3, 0xcf, 0xe5, 0xea, 0xe3, 0x30, 0x7e, 0xf6, 0x6c, 0x7e, 0x72, 0x1a, 0x9b, 0x42, 0xa9, 0x38, 0x93, 0x3f, 0x7f, 0x53, 0xa8, 0xb9, 0xec, 0xd3, 0xcb, 0xf1, 0x9e, 0x4f, 0x8d, 0x67, 0xbc, 0x5c, 0xb0, 0x58, 0xbd, 0xe8, 0xe6, 0x0b, 0x7a, 0x77, 0x3b, 0xdc, 0xdd, 0xcc, 0x23, 0x4d, 0x21, 0xa7, 0x18, 0x45, 0xf1, 0x51, 0xc6, 0x67, 0x2b, 0xfc, 0x9a, 0xbb, 0xbd, 0x69, 0x12, 0x1d, 0x24, 0x9c, 0x2a, 0x4f, 0x97, 0xa7, 0x5e, 0xff, 0x74, 0x7d, 0x4c, 0x88, 0xce, 0x85, 0x1d, 0x43, 0x05, 0xd4, 0x0b, 0x53, 0xc5, 0x99, 0xe9, 0x73, 0xe7, 0xce, 0xe5, 0x27, 0x84, 0x22, 0x74, 0xe9, 0x91, 0x60, 0x82, 0xec, 0x62, 0x2d, 0x29, 0xb9, 0xea, 0x6c, 0xeb, 0x1d, 0x5d, 0xea, 0x65, 0x90, 0xd9, 0xe9, 0xf6, 0x6c, 0x47, 0x45, 0xba, 0x48, 0x4a, 0xf6, 0x76, 0xf3, 0x86, 0xd3, 0x16, 0x29, 0x01, 0x25, 0xdf, 0xed, 0xc0, 0x83, 0x0a, 0xfe, 0x95, 0x29, 0xb5, 0xd6, 0xe6, 0x1a, 0x70, 0x5a, 0xe0, 0xc3, 0x8d, 0xae, 0xd3, 0x53, 0xda, 0x6a, 0x75, 0x3b, 0xf6, 0x5b, 0x8e, 0xdb, 0xf9, 0x19, 0x8c, 0x4c, 0x8c, 0x79, 0xd7, 0x71, 0x54, 0xae, 0x28, 0xdb, 0x17, 0x9c, 0x5e, 0x7d, 0x27, 0xc7, 0xc3, 0x04, 0x28, 0x15, 0xf8, 0x0d, 0x4c, 0xcb, 0xf3, 0x4c, 0x0f, 0x23, 0x15, 0xd4, 0x50, 0xc7, 0xcd, 0xc1, 0xed, 0x18, 0x30, 0x35, 0x8e, 0xb0, 0x71, 0x1e, 0x4b, 0x10, 0x08, 0xa0, 0x8d, 0xb3, 0xf9, 0xfc, 0x24, 0x8c, 0xf3, 0x04, 0x2f, 0x65, 0xf6, 0xfd, 0x60, 0xba, 0x58, 0x82, 0x44, 0x2e, 0xad, 0x52, 0x5a, 0xc8, 0x89, 0x8c, 0x5a, 0x00, 0x52, 0xc5, 0xfd, 0x83, 0x02, 0xcf, 0x2d, 0xf9, 0x22, 0xc8, 0x1f, 0x48, 0x0e, 0x51, 0xde, 0xab, 0xb5, 0xeb, 0x0e, 0x66, 0x0e, 0x5f, 0x7a, 0x99, 0x4c, 0xc0, 0x09, 0xda, 0x52, 0x31, 0x5c, 0x4c, 0x3f, 0xdd, 0x21, 0x92, 0x2f, 0x41, 0xfe, 0x6d, 0x64, 0x5a, 0x72, 0x7b, 0x5e, 0x72, 0x34, 0x91, 0x43, 0xfe, 0x27, 0x7c, 0x49, 0xf2, 0xf9, 0x09, 0x25, 0x42, 0x5e, 0x98, 0x70, 0x64, 0x44, 0xe6, 0x90, 0x05, 0xfb, 0x62, 0x6d, 0xaf, 0xdb, 0x6d, 0xd6, 0xda, 0x81, 0xaf, 0xe0, 0x88, 0x74, 0x14, 0xd4, 0x91, 0xca, 0xc9, 0xb5, 0x96, 0xe3, 0xdb, 0xd9, 0xd9, 0xdf, 0x2d, 0xe5, 0xf8, 0xd0, 0x18, 0xae, 0x8d, 0x6b, 0xf8, 0x42, 0x95, 0x27, 0x7a, 0xb5, 0x5d, 0x9f, 0xac, 0xdd, 0x68, 0xb6, 0x7a, 0x8e, 0x6b, 0xd7, 0x5a, 0x1d, 0xb0, 0xe1, 0x4e, 0xc7, 0x7d, 0xcb, 0x56, 0xf9, 0x91, 0x1b, 0xe4, 0x12, 0x8c, 0x94, 0x03, 0x83, 0x88, 0xc5, 0x7c, 0x8b, 0xf0, 0x29, 0x9b, 0x15, 0x61, 0x35, 0x65, 0xb0, 0xdc, 0x04, 0x78, 0x68, 0x01, 0xe7, 0x88, 0x07, 0xad, 0xf0, 0xc1, 0xe8, 0x24, 0xcc, 0x97, 0xd1, 0x49, 0x5b, 0xb1, 0x49, 0x61, 0x4a, 0x62, 0xf5, 0xad, 0x6e, 0xaf, 0xc2, 0x95, 0x8c, 0x62, 0x15, 0xf9, 0xb3, 0x0f, 0xe5, 0x9a, 0xef, 0xb4, 0xe1, 0xb9, 0x0b, 0x60, 0x65, 0x34, 0xb0, 0x50, 0xdf, 0xc1, 0x6c, 0x58, 0x0c, 0x70, 0xb9, 0x4e, 0x2a, 0x32, 0xa3, 0x6b, 0x34, 0xfb, 0x9b, 0x15, 0xae, 0x56, 0xa0, 0xcd, 0xb9, 0x17, 0xea, 0xd4, 0x27, 0xd4, 0xfd, 0x09, 0x98, 0x74, 0x0c, 0x13, 0xb6, 0x82, 0x09, 0x11, 0x0a, 0xc0, 0xdc, 0xaa, 0xb0, 0x8b, 0x50, 0xb6, 0x1f, 0x42, 0x45, 0xcd, 0x4d, 0x73, 0x9b, 0x63, 0xfd, 0xcd, 0xf1, 0xfa, 0x58, 0xbf, 0x3e, 0xbe, 0x35, 0xd6, 0xdf, 0xca, 0x4f, 0xe6, 0xa0, 0x0b, 0x1d, 0xb8, 0xf5, 0x4d, 0x77, 0xf6, 0xa9, 0x4d, 0x77, 0x36, 0xdd, 0x74, 0xb5, 0x98, 0xe9, 0x4a, 0x71, 0xab, 0xfc, 0xe8, 0xec, 0xcb, 0x27, 0x39, 0xb1, 0x49, 0xa5, 0x1f, 0x95, 0x13, 0xd4, 0x02, 0x27, 0x28, 0x19, 0x6d, 0xfc, 0xc3, 0xf4, 0x12, 0x39, 0xc1, 0x09, 0x26, 0x94, 0x3e, 0x8a, 0x1b, 0xd5, 0xc6, 0xfa, 0xb5, 0xf1, 0xb0, 0x2f, 0x8d, 0x3b, 0x63, 0x7d, 0x07, 0x1d, 0xaa, 0x36, 0xae, 0x7c, 0x6a, 0x1c, 0x06, 0x7c, 0xb7, 0x92, 0x54, 0xd5, 0xde, 0x48, 0x53, 0x98, 0xe0, 0x09, 0xf7, 0x56, 0x89, 0x7e, 0x64, 0x32, 0xc7, 0x81, 0x9e, 0x7f, 0x7d, 0x71, 0x00, 0xa5, 0xa0, 0xb6, 0x6a, 0xc1, 0xe2, 0x73, 0xad, 0x16, 0xec, 0x6e, 0xfc, 0x54, 0xba, 0x03, 0x8f, 0x03, 0xee, 0xc6, 0x3c, 0xc3, 0x3a, 0x8d, 0x06, 0xec, 0xc3, 0x45, 0xca, 0xf5, 0xfd, 0x7a, 0xdd, 0x6d, 0x6a, 0xf9, 0x55, 0xf3, 0x65, 0x91, 0xab, 0x90, 0xc7, 0x09, 0xb5, 0x3b, 0x57, 0x1e, 0x2c, 0x62, 0x01, 0x41, 0xe8, 0x97, 0x21, 0xbf, 0x0d, 0xb0, 0xfc, 0x3d, 0x7d, 0xe0, 0x0f, 0x5c, 0xf4, 0x30, 0x45, 0xdf, 0x15, 0x7c, 0x58, 0x40, 0xd2, 0xf7, 0x82, 0x00, 0xe6, 0xe3, 0x49, 0x75, 0x84, 0xed, 0x13, 0x7a, 0xd4, 0x74, 0x5c, 0xfe, 0xe4, 0xd4, 0x76, 0xc2, 0x80, 0x8f, 0xcf, 0x51, 0x78, 0xbb, 0x13, 0xa3, 0xf8, 0xac, 0x84, 0x78, 0xdf, 0xdd, 0xa9, 0xf9, 0x8f, 0x9b, 0x6b, 0xb0, 0x9b, 0x8c, 0xa8, 0x43, 0x3d, 0x72, 0xc0, 0x7f, 0x90, 0xed, 0xf3, 0x78, 0x02, 0x20, 0xc7, 0xc7, 0xfc, 0x8d, 0xe7, 0x38, 0xb2, 0x57, 0x3c, 0x18, 0xe3, 0xff, 0xe6, 0xc7, 0xf8, 0x46, 0x76, 0xbf, 0xe0, 0x03, 0xf6, 0x39, 0x60, 0x5f, 0x02, 0x0e, 0x42, 0x22, 0x20, 0x1d, 0x78, 0x56, 0x8d, 0xe3, 0xde, 0x53, 0xf1, 0xbf, 0x16, 0xde, 0xa5, 0x72, 0xdd, 0x2e, 0x41, 0x27, 0xce, 0x5a, 0x71, 0x7f, 0xbc, 0x22, 0x96, 0xe6, 0xfb, 0x69, 0x65, 0x08, 0xc4, 0xac, 0xf0, 0xfd, 0x89, 0xda, 0xdb, 0x16, 0x62, 0x37, 0x82, 0x0b, 0x4e, 0xa3, 0xd2, 0x70, 0x6b, 0xf5, 0x9e, 0x60, 0x75, 0xf2, 0x9c, 0xd2, 0x71, 0xb3, 0x21, 0x46, 0x60, 0xd7, 0x54, 0x2e, 0x97, 0xf3, 0x9c, 0x1b, 0xb7, 0xe2, 0x6f, 0x8b, 0xf9, 0x1c, 0x78, 0x78, 0xc3, 0x03, 0x3d, 0x98, 0x88, 0xdb, 0x27, 0x3e, 0x71, 0xdb, 0x34, 0x91, 0x43, 0x36, 0x23, 0x10, 0xa9, 0x07, 0x1c, 0x3c, 0x7f, 0x93, 0x6b, 0x37, 0xf4, 0x7a, 0x9a, 0xb7, 0xb9, 0xac, 0xc1, 0x6b, 0x09, 0xec, 0xdb, 0xa6, 0x64, 0x08, 0xfb, 0x1b, 0xf7, 0x30, 0x45, 0xae, 0x25, 0x48, 0x59, 0x6e, 0xaf, 0x02, 0xef, 0xa5, 0x17, 0xdc, 0xda, 0x36, 0x7f, 0x15, 0x84, 0x8d, 0x89, 0xd8, 0x1a, 0xf0, 0xb7, 0xbc, 0x82, 0x78, 0xab, 0x13, 0xa2, 0xf2, 0xc9, 0xc5, 0x83, 0x0a, 0x7f, 0x19, 0x9b, 0x90, 0x3d, 0xbe, 0xe7, 0x1f, 0x51, 0x2a, 0xaf, 0x70, 0xdf, 0xe0, 0xa0, 0x49, 0x9f, 0x4a, 0x5f, 0x50, 0xd9, 0xc9, 0x8b, 0x57, 0xb0, 0x11, 0x7f, 0x39, 0x78, 0x73, 0xc6, 0xdd, 0x4f, 0x05, 0xc3, 0x0b, 0xed, 0x35, 0xc6, 0xcd, 0x17, 0xe1, 0xc6, 0x7f, 0x75, 0xf6, 0x71, 0xc4, 0x0b, 0xf6, 0x8c, 0xdc, 0x55, 0xe6, 0xa2, 0xe4, 0xf2, 0x91, 0x37, 0xe5, 0xcc, 0xcd, 0xcc, 0xff, 0x02, 0x43, 0xc1, 0xfc, 0x7e,
+1
config.lua
··· 29 29 CHECK_NEW_VERSION=true 30 30 NO_SOUND=false 31 31 GIF_LENGTH=20 -- in seconds 32 + SOFTWARE_RENDERING=false 32 33 CRT_MONITOR=false 33 34 GIF_SCALE=3 34 35 UI_SCALE=4
+2 -1
src/studio/config.c
··· 193 193 readGlobalBool(lua, "CHECK_NEW_VERSION", &config->data.checkNewVersion); 194 194 readGlobalBool(lua, "NO_SOUND", &config->data.noSound); 195 195 #if defined(CRT_SHADER_SUPPORT) 196 - readGlobalBool(lua, "CRT_MONITOR", &config->data.crtMonitor); 196 + readGlobalBool(lua, "SOFTWARE_RENDERING", &config->data.soft); 197 + readGlobalBool(lua, "CRT_MONITOR", &config->data.crt); 197 198 readConfigCrtShader(config, lua); 198 199 #endif 199 200 readGlobalInteger(lua, "UI_SCALE", &config->data.uiScale);
+10 -9
src/studio/studio.c
··· 1533 1533 #if defined(CRT_SHADER_SUPPORT) 1534 1534 void switchCrtMonitor() 1535 1535 { 1536 - impl.config->data.crtMonitor = !impl.config->data.crtMonitor; 1536 + impl.config->data.crt = !impl.config->data.crt; 1537 1537 } 1538 1538 #endif 1539 1539 ··· 2176 2176 impl.config->data.uiScale = args.scale; 2177 2177 2178 2178 #if defined(CRT_SHADER_SUPPORT) 2179 - impl.config->data.crtMonitor = args.crt; 2179 + impl.config->data.soft |= args.soft; 2180 + impl.config->data.crt |= args.crt; 2180 2181 #endif 2181 2182 2182 - impl.config->data.goFullscreen = args.fullscreen; 2183 - impl.config->data.noSound = args.nosound; 2184 - impl.config->data.cli = args.cli; 2183 + impl.config->data.goFullscreen |= args.fullscreen; 2184 + impl.config->data.noSound |= args.nosound; 2185 + impl.config->data.cli |= args.cli; 2185 2186 2186 - impl.studio.tick = studioTick; 2187 - impl.studio.close = studioClose; 2188 - impl.studio.exit = exitStudio; 2189 - impl.studio.config = getConfig; 2187 + impl.studio.tick = studioTick; 2188 + impl.studio.close = studioClose; 2189 + impl.studio.exit = exitStudio; 2190 + impl.studio.config = getConfig; 2190 2191 2191 2192 if(args.cli) 2192 2193 args.skip = true;
+2 -1
src/studio/studio.h
··· 63 63 #define PNG_EXT ".png" 64 64 65 65 #if defined(CRT_SHADER_SUPPORT) 66 - # define CRT_CMD_PARAM(macro) \ 66 + # define CRT_CMD_PARAM(macro) \ 67 + macro(soft, bool, BOOLEAN, "", "use software rendering") \ 67 68 macro(crt, bool, BOOLEAN, "", "enable CRT monitor effect") 68 69 #else 69 70 # define CRT_CMD_PARAM(macro)
+2 -1
src/studio/system.h
··· 108 108 bool cli; 109 109 110 110 #if defined(CRT_SHADER_SUPPORT) 111 - bool crtMonitor; 111 + bool soft; 112 + bool crt; 112 113 struct 113 114 { 114 115 const char* vertex;
+229 -130
src/system/sdl/main.c
··· 28 28 #include <time.h> 29 29 30 30 #if defined(CRT_SHADER_SUPPORT) 31 - 32 31 #include <SDL_gpu.h> 33 - #define STUDIO_PIXEL_FORMAT GPU_FORMAT_RGBA 34 - 35 32 #else 36 - 37 33 #include <SDL.h> 38 - #define STUDIO_PIXEL_FORMAT SDL_PIXELFORMAT_ABGR8888 39 - 40 34 #endif 41 35 42 36 #if defined(__EMSCRIPTEN__) ··· 68 62 tic_touch_size, 69 63 }; 70 64 65 + typedef union 66 + { 71 67 #if defined(CRT_SHADER_SUPPORT) 72 - # define Renderer GPU_Target 73 - # define Texture GPU_Image 74 - # define Rect GPU_Rect 75 - # define destoryTexture GPU_FreeImage 76 - # define destoryRenderer(render) GPU_CloseCurrentRenderer() 77 - # define renderPresent GPU_Flip 78 - # define renderClear GPU_Clear 79 - # define renderCopy(render, tex, src, dst) GPU_BlitScale(tex, &src, render, dst.x, dst.y, dst.w / src.w, dst.h / src.h) 80 - #else 81 - # define Renderer SDL_Renderer 82 - # define Texture SDL_Texture 83 - # define Rect SDL_Rect 84 - # define destoryTexture SDL_DestroyTexture 85 - # define destoryRenderer(render) SDL_DestroyRenderer(render) 86 - # define renderPresent SDL_RenderPresent 87 - # define renderClear SDL_RenderClear 88 - # define renderCopy(render, tex, src, dst) SDL_RenderCopy(render, tex, &src, &dst) 68 + GPU_Target* gpu; 69 + #endif 70 + SDL_Renderer* sdl; 71 + } Renderer; 72 + 73 + typedef union 74 + { 75 + #if defined(CRT_SHADER_SUPPORT) 76 + GPU_Image* gpu; 89 77 #endif 78 + SDL_Texture* sdl; 79 + } Texture; 90 80 91 81 static struct 92 82 { ··· 96 86 97 87 struct 98 88 { 99 - Renderer* renderer; 100 - Texture* texture; 89 + Renderer renderer; 90 + Texture texture; 101 91 102 92 #if defined(CRT_SHADER_SUPPORT) 103 93 u32 shader; 104 94 GPU_ShaderBlock block; 105 95 #endif 106 - } gpu; 96 + } screen; 107 97 108 98 struct 109 99 { ··· 112 102 #if defined(TOUCH_INPUT_SUPPORT) 113 103 struct 114 104 { 115 - Texture* texture; 105 + Texture texture; 116 106 void* pixels; 117 107 tic80_gamepads joystick; 118 108 ··· 152 142 153 143 struct 154 144 { 155 - Texture* up; 156 - Texture* down; 145 + Texture up; 146 + Texture down; 157 147 void* upPixels; 158 148 void* downPixels; 159 149 } texture; ··· 181 171 { 182 172 .gamepad.touch.counter = TOUCH_TIMEOUT, 183 173 .keyboard.touch.useText = false, 184 - }; 174 + } 185 175 #endif 186 176 ; 187 177 178 + static void destoryTexture(Texture texture) 179 + { 180 + #if defined(CRT_SHADER_SUPPORT) 181 + if(!platform.studio->config()->soft) 182 + { 183 + GPU_FreeImage(texture.gpu); 184 + } 185 + else 186 + #endif 187 + { 188 + SDL_DestroyTexture(texture.sdl); 189 + } 190 + } 191 + 192 + static void destoryRenderer(Renderer renderer) 193 + { 194 + #if defined(CRT_SHADER_SUPPORT) 195 + if(!platform.studio->config()->soft) 196 + { 197 + GPU_CloseCurrentRenderer(); 198 + } 199 + else 200 + #endif 201 + { 202 + SDL_DestroyRenderer(renderer.sdl); 203 + } 204 + } 205 + 206 + static void renderClear(Renderer renderer) 207 + { 208 + #if defined(CRT_SHADER_SUPPORT) 209 + if(!platform.studio->config()->soft) 210 + { 211 + GPU_Clear(renderer.gpu); 212 + } 213 + else 214 + #endif 215 + { 216 + SDL_RenderClear(renderer.sdl); 217 + } 218 + } 219 + 220 + static void renderPresent(Renderer renderer) 221 + { 222 + #if defined(CRT_SHADER_SUPPORT) 223 + if(!platform.studio->config()->soft) 224 + { 225 + GPU_Flip(renderer.gpu); 226 + } 227 + else 228 + #endif 229 + { 230 + SDL_RenderPresent(renderer.sdl); 231 + } 232 + } 233 + 234 + static void renderCopy(Renderer render, Texture tex, SDL_Rect src, SDL_Rect dst) 235 + { 236 + #if defined(CRT_SHADER_SUPPORT) 237 + if(!platform.studio->config()->soft) 238 + { 239 + GPU_Rect gpusrc = {src.x, src.y, src.w, src.h}; 240 + GPU_BlitScale(tex.gpu, &gpusrc, render.gpu, dst.x, dst.y, (float)dst.w / src.w, (float)dst.h / src.h); 241 + } 242 + else 243 + #endif 244 + { 245 + SDL_RenderCopy(render.sdl, tex.sdl, &src, &dst); 246 + } 247 + } 248 + 188 249 static void initSound() 189 250 { 190 251 SDL_AudioSpec want = ··· 233 294 } 234 295 } 235 296 236 - static void updateTextureBytes(Texture* texture, const void* data, s32 width, s32 height) 297 + static void updateTextureBytes(Texture texture, const void* data, s32 width, s32 height) 237 298 { 238 299 #if defined(CRT_SHADER_SUPPORT) 239 - GPU_UpdateImageBytes(texture, NULL, (const u8*)data, width * sizeof(u32)); 240 - #else 241 - void* pixels = NULL; 242 - s32 pitch = 0; 243 - SDL_LockTexture(texture, NULL, &pixels, &pitch); 244 - SDL_memcpy(pixels, data, pitch * height); 245 - SDL_UnlockTexture(texture); 300 + if(!platform.studio->config()->soft) 301 + { 302 + GPU_UpdateImageBytes(texture.gpu, NULL, (const u8*)data, width * sizeof(u32)); 303 + } 304 + else 246 305 #endif 306 + { 307 + void* pixels = NULL; 308 + s32 pitch = 0; 309 + SDL_LockTexture(texture.sdl, NULL, &pixels, &pitch); 310 + SDL_memcpy(pixels, data, pitch * height); 311 + SDL_UnlockTexture(texture.sdl); 312 + } 247 313 } 248 314 249 315 #if defined(TOUCH_INPUT_SUPPORT) ··· 276 342 memcpy(tic->ram.tiles.data, &platform.studio->config()->cart->bank0.tiles, sizeof tic->ram.tiles * TIC_SPRITE_BANKS); 277 343 } 278 344 279 - static void initTouchKeyboardState(Texture** texture, void** pixels, bool down) 345 + static void initTouchKeyboardState(Texture* texture, void** pixels, bool down) 280 346 { 281 347 enum{Cols=KBD_COLS, Rows=KBD_ROWS}; 282 348 ··· 289 355 memcpy(*pixels, tic->screen, TIC80_FULLWIDTH * TIC80_FULLHEIGHT * sizeof(u32)); 290 356 291 357 #if defined(CRT_SHADER_SUPPORT) 292 - *texture = GPU_CreateImage(TIC80_FULLWIDTH, TIC80_FULLHEIGHT, STUDIO_PIXEL_FORMAT); 293 - GPU_SetAnchor(*texture, 0, 0); 294 - GPU_SetImageFilter(*texture, GPU_FILTER_NEAREST); 295 - #else 296 - *texture = SDL_CreateTexture(platform.gpu.renderer, STUDIO_PIXEL_FORMAT, SDL_TEXTUREACCESS_STREAMING, TIC80_FULLWIDTH, TIC80_FULLHEIGHT); 358 + if(!platform.studio->config()->soft) 359 + { 360 + texture->gpu = GPU_CreateImage(TIC80_FULLWIDTH, TIC80_FULLHEIGHT, GPU_FORMAT_RGBA); 361 + GPU_SetAnchor(texture->gpu, 0, 0); 362 + GPU_SetImageFilter(texture->gpu, GPU_FILTER_NEAREST); 363 + } 364 + else 297 365 #endif 366 + { 367 + texture->sdl = SDL_CreateTexture(platform.screen.renderer.sdl, SDL_PIXELFORMAT_ABGR8888, SDL_TEXTUREACCESS_STREAMING, TIC80_FULLWIDTH, TIC80_FULLHEIGHT); 368 + } 369 + 298 370 updateTextureBytes(*texture, *pixels, TIC80_FULLWIDTH, TIC80_FULLHEIGHT); 299 371 } 300 372 ··· 372 444 ZEROMEM(tic->ram.tiles); 373 445 } 374 446 375 - if(!platform.gamepad.touch.texture) 447 + if(!platform.gamepad.touch.texture.sdl) 376 448 { 377 449 #if defined(CRT_SHADER_SUPPORT) 378 - platform.gamepad.touch.texture = GPU_CreateImage(TEXTURE_SIZE, TEXTURE_SIZE, STUDIO_PIXEL_FORMAT); 379 - GPU_SetAnchor(platform.gamepad.touch.texture, 0, 0); 380 - GPU_SetImageFilter(platform.gamepad.touch.texture, GPU_FILTER_NEAREST); 381 - GPU_SetRGBA(platform.gamepad.touch.texture, 0xff, 0xff, 0xff, platform.studio->config()->theme.gamepad.touch.alpha); 382 - #else 383 - platform.gamepad.touch.texture = SDL_CreateTexture(platform.gpu.renderer, STUDIO_PIXEL_FORMAT, SDL_TEXTUREACCESS_STREAMING, TEXTURE_SIZE, TEXTURE_SIZE); 384 - SDL_SetTextureBlendMode(platform.gamepad.touch.texture, SDL_BLENDMODE_BLEND); 385 - SDL_SetTextureAlphaMod(platform.gamepad.touch.texture, platform.studio->config()->theme.gamepad.touch.alpha); 450 + if(!platform.studio->config()->soft) 451 + { 452 + platform.gamepad.touch.texture.gpu = GPU_CreateImage(TEXTURE_SIZE, TEXTURE_SIZE, GPU_FORMAT_RGBA); 453 + GPU_SetAnchor(platform.gamepad.touch.texture.gpu, 0, 0); 454 + GPU_SetImageFilter(platform.gamepad.touch.texture.gpu, GPU_FILTER_NEAREST); 455 + GPU_SetRGBA(platform.gamepad.touch.texture.gpu, 0xff, 0xff, 0xff, platform.studio->config()->theme.gamepad.touch.alpha); 456 + } 457 + else 386 458 #endif 459 + { 460 + platform.gamepad.touch.texture.sdl = SDL_CreateTexture(platform.screen.renderer.sdl, SDL_PIXELFORMAT_ABGR8888, 461 + SDL_TEXTUREACCESS_STREAMING, TEXTURE_SIZE, TEXTURE_SIZE); 462 + SDL_SetTextureBlendMode(platform.gamepad.touch.texture.sdl, SDL_BLENDMODE_BLEND); 463 + SDL_SetTextureAlphaMod(platform.gamepad.touch.texture.sdl, platform.studio->config()->theme.gamepad.touch.alpha); 464 + } 465 + 387 466 updateTextureBytes(platform.gamepad.touch.texture, platform.gamepad.touch.pixels, TEXTURE_SIZE, TEXTURE_SIZE); 388 467 } 389 468 ··· 394 473 static void initGPU() 395 474 { 396 475 #if defined(CRT_SHADER_SUPPORT) 397 - 476 + if(!platform.studio->config()->soft) 398 477 { 399 - s32 w = 0, h = 0; 478 + s32 w, h; 400 479 SDL_GetWindowSize(platform.window, &w, &h); 401 480 402 481 GPU_SetInitWindow(SDL_GetWindowID(platform.window)); 403 482 404 - platform.gpu.renderer = GPU_Init(w, h, GPU_INIT_DISABLE_VSYNC); 483 + platform.screen.renderer.gpu = GPU_Init(w, h, GPU_INIT_DISABLE_VSYNC); 405 484 406 485 GPU_SetWindowResolution(w, h); 407 - GPU_SetVirtualResolution(platform.gpu.renderer, w, h); 408 - } 409 - 410 - platform.gpu.texture = GPU_CreateImage(TIC80_FULLWIDTH, TIC80_FULLHEIGHT, STUDIO_PIXEL_FORMAT); 411 - GPU_SetAnchor(platform.gpu.texture, 0, 0); 412 - GPU_SetImageFilter(platform.gpu.texture, GPU_FILTER_NEAREST); 413 - 414 - #else 415 - 416 - platform.gpu.renderer = SDL_CreateRenderer(platform.window, -1, SDL_RENDERER_ACCELERATED); 417 - platform.gpu.texture = SDL_CreateTexture(platform.gpu.renderer, STUDIO_PIXEL_FORMAT, SDL_TEXTUREACCESS_STREAMING, TIC80_FULLWIDTH, TIC80_FULLHEIGHT); 486 + GPU_SetVirtualResolution(platform.screen.renderer.gpu, w, h); 418 487 488 + platform.screen.texture.gpu = GPU_CreateImage(TIC80_FULLWIDTH, TIC80_FULLHEIGHT, GPU_FORMAT_RGBA); 489 + GPU_SetAnchor(platform.screen.texture.gpu, 0, 0); 490 + GPU_SetImageFilter(platform.screen.texture.gpu, GPU_FILTER_NEAREST); 491 + } 492 + else 419 493 #endif 494 + { 495 + platform.screen.renderer.sdl = SDL_CreateRenderer(platform.window, -1, SDL_RENDERER_SOFTWARE); 496 + platform.screen.texture.sdl = SDL_CreateTexture(platform.screen.renderer.sdl, SDL_PIXELFORMAT_ABGR8888, 497 + SDL_TEXTUREACCESS_STREAMING, TIC80_FULLWIDTH, TIC80_FULLHEIGHT); 498 + } 420 499 421 500 #if defined(TOUCH_INPUT_SUPPORT) 422 501 initTouchGamepad(); ··· 427 506 428 507 static void destroyGPU() 429 508 { 430 - destoryTexture(platform.gpu.texture); 509 + destoryTexture(platform.screen.texture); 431 510 432 511 #if defined(TOUCH_INPUT_SUPPORT) 433 512 434 - if(platform.gamepad.touch.texture) 513 + if(platform.gamepad.touch.texture.sdl) 435 514 destoryTexture(platform.gamepad.touch.texture); 436 515 437 - if(platform.keyboard.touch.texture.up) 516 + if(platform.keyboard.touch.texture.up.sdl) 438 517 destoryTexture(platform.keyboard.touch.texture.up); 439 518 440 - if(platform.keyboard.touch.texture.down) 519 + if(platform.keyboard.touch.texture.down.sdl) 441 520 destoryTexture(platform.keyboard.touch.texture.down); 442 521 443 522 #endif 444 523 445 - destoryRenderer(platform.gpu.renderer); 524 + destoryRenderer(platform.screen.renderer); 446 525 447 526 #if defined(CRT_SHADER_SUPPORT) 448 527 449 - if(platform.gpu.shader) 528 + if(!platform.studio->config()->soft) 450 529 { 451 - GPU_FreeShaderProgram(platform.gpu.shader); 452 - platform.gpu.shader = 0; 453 - } 530 + if(platform.screen.shader) 531 + { 532 + GPU_FreeShaderProgram(platform.screen.shader); 533 + platform.screen.shader = 0; 534 + } 454 535 455 - GPU_Quit(); 536 + GPU_Quit(); 537 + } 456 538 457 539 #endif 458 540 } ··· 983 1065 { 984 1066 985 1067 #if defined(CRT_SHADER_SUPPORT) 986 - s32 w = 0, h = 0; 987 - SDL_GetWindowSize(platform.window, &w, &h); 988 - GPU_SetWindowResolution(w, h); 989 - GPU_SetVirtualResolution(platform.gpu.renderer, w, h); 1068 + if(!platform.studio->config()->soft) 1069 + { 1070 + s32 w, h; 1071 + SDL_GetWindowSize(platform.window, &w, &h); 1072 + GPU_SetWindowResolution(w, h); 1073 + GPU_SetVirtualResolution(platform.screen.renderer.gpu, w, h); 1074 + } 990 1075 #endif 991 1076 992 1077 #if defined(TOUCH_INPUT_SUPPORT) ··· 1072 1157 SDL_Rect rect; 1073 1158 SDL_GetWindowSize(platform.window, &rect.w, &rect.h); 1074 1159 1075 - Rect src = {TIC80_OFFSET_LEFT, TIC80_OFFSET_TOP, KBD_COLS*TIC_SPRITESIZE, KBD_ROWS*TIC_SPRITESIZE}; 1076 - Rect dst = {0, rect.h - src.h * rect.w / src.w, rect.w, src.h * rect.w / src.w}; 1160 + SDL_Rect src = {TIC80_OFFSET_LEFT, TIC80_OFFSET_TOP, KBD_COLS*TIC_SPRITESIZE, KBD_ROWS*TIC_SPRITESIZE}; 1161 + SDL_Rect dst = {0, rect.h - src.h * rect.w / src.w, rect.w, src.h * rect.w / src.w}; 1077 1162 1078 - renderCopy(platform.gpu.renderer, platform.keyboard.touch.texture.up, src, dst); 1163 + renderCopy(platform.screen.renderer, platform.keyboard.touch.texture.up, src, dst); 1079 1164 1080 1165 const tic80_input* input = &platform.studio->tic->ram.input; 1081 1166 ··· 1091 1176 { 1092 1177 if(key == KbdLayout[k]) 1093 1178 { 1094 - Rect src2 = 1179 + SDL_Rect src2 = 1095 1180 { 1096 1181 (k % Cols) * TIC_SPRITESIZE + TIC80_OFFSET_LEFT, 1097 1182 (k / Cols) * TIC_SPRITESIZE + TIC80_OFFSET_TOP, ··· 1099 1184 TIC_SPRITESIZE, 1100 1185 }; 1101 1186 1102 - Rect dst2 = 1187 + SDL_Rect dst2 = 1103 1188 { 1104 1189 (src2.x - TIC80_OFFSET_LEFT) * rect.w/src.w, 1105 1190 (src2.y - TIC80_OFFSET_TOP) * rect.w/src.w + dst.y, ··· 1107 1192 TIC_SPRITESIZE * rect.w/src.w, 1108 1193 }; 1109 1194 1110 - renderCopy(platform.gpu.renderer, platform.keyboard.touch.texture.down, src2, dst2); 1195 + renderCopy(platform.screen.renderer, platform.keyboard.touch.texture.down, src2, dst2); 1111 1196 } 1112 1197 } 1113 1198 } ··· 1143 1228 const Tile* tile = Tiles + i; 1144 1229 1145 1230 #if defined(CRT_SHADER_SUPPORT) 1146 - GPU_Rect src = { (float)i * TIC_SPRITESIZE + Left, (float)(tile->press ? TIC_SPRITESIZE : 0) + TIC80_MARGIN_TOP, (float)TIC_SPRITESIZE, (float)TIC_SPRITESIZE}; 1147 - GPU_Rect dest = { (float)tile->x, (float)tile->y, (float)tileSize, (float)tileSize}; 1231 + if(!platform.studio->config()->soft) 1232 + { 1233 + GPU_Rect src = { (float)i * TIC_SPRITESIZE + Left, (float)(tile->press ? TIC_SPRITESIZE : 0) + TIC80_MARGIN_TOP, (float)TIC_SPRITESIZE, (float)TIC_SPRITESIZE}; 1234 + GPU_Rect dest = { (float)tile->x, (float)tile->y, (float)tileSize, (float)tileSize}; 1148 1235 1149 - GPU_BlitScale(platform.gamepad.touch.texture, &src, platform.gpu.renderer, dest.x, dest.y, 1150 - (float)dest.w / TIC_SPRITESIZE, (float)dest.h / TIC_SPRITESIZE); 1236 + GPU_BlitScale(platform.gamepad.touch.texture.gpu, &src, platform.screen.renderer.gpu, dest.x, dest.y, 1237 + (float)dest.w / TIC_SPRITESIZE, (float)dest.h / TIC_SPRITESIZE); 1238 + } 1239 + else 1240 + { 1241 + SDL_Rect src = {i * TIC_SPRITESIZE + Left, (tile->press ? TIC_SPRITESIZE : 0) + TIC80_MARGIN_TOP, TIC_SPRITESIZE, TIC_SPRITESIZE}; 1242 + SDL_Rect dest = {tile->x, tile->y, tileSize, tileSize}; 1243 + SDL_RenderCopy(platform.screen.renderer.sdl, platform.gamepad.touch.texture.sdl, &src, &dest); 1244 + } 1151 1245 #else 1152 - SDL_Rect src = {i * TIC_SPRITESIZE + Left, (tile->press ? TIC_SPRITESIZE : 0) + TIC80_MARGIN_TOP, TIC_SPRITESIZE, TIC_SPRITESIZE}; 1153 - SDL_Rect dest = {tile->x, tile->y, tileSize, tileSize}; 1154 - SDL_RenderCopy(platform.gpu.renderer, platform.gamepad.touch.texture, &src, &dest); 1155 1246 #endif 1156 1247 } 1157 1248 } ··· 1217 1308 void tic_sys_fullscreen() 1218 1309 { 1219 1310 #if defined(CRT_SHADER_SUPPORT) 1220 - GPU_SetFullscreen(GPU_GetFullscreen() ? false : true, true); 1221 - #else 1222 - SDL_SetWindowFullscreen(platform.window, 1223 - SDL_GetWindowFlags(platform.window) & SDL_WINDOW_FULLSCREEN_DESKTOP ? 0 : SDL_WINDOW_FULLSCREEN_DESKTOP); 1311 + if(!platform.studio->config()->soft) 1312 + { 1313 + GPU_SetFullscreen(GPU_GetFullscreen() ? false : true, true); 1314 + } 1315 + else 1224 1316 #endif 1317 + { 1318 + SDL_SetWindowFullscreen(platform.window, 1319 + SDL_GetWindowFlags(platform.window) & SDL_WINDOW_FULLSCREEN_DESKTOP ? 0 : SDL_WINDOW_FULLSCREEN_DESKTOP); 1320 + } 1225 1321 } 1226 1322 1227 1323 void tic_sys_message(const char* title, const char* message) ··· 1309 1405 return; 1310 1406 } 1311 1407 1312 - if(platform.gpu.shader) 1313 - GPU_FreeShaderProgram(platform.gpu.shader); 1408 + if(platform.screen.shader) 1409 + GPU_FreeShaderProgram(platform.screen.shader); 1314 1410 1315 - platform.gpu.shader = GPU_LinkShaders(vertex, pixel); 1411 + platform.screen.shader = GPU_LinkShaders(vertex, pixel); 1316 1412 1317 - if(platform.gpu.shader) 1413 + if(platform.screen.shader) 1318 1414 { 1319 - platform.gpu.block = GPU_LoadShaderBlock(platform.gpu.shader, "gpu_Vertex", "gpu_TexCoord", "gpu_Color", "gpu_ModelViewProjectionMatrix"); 1320 - GPU_ActivateShaderProgram(platform.gpu.shader, &platform.gpu.block); 1415 + platform.screen.block = GPU_LoadShaderBlock(platform.screen.shader, "gpu_Vertex", "gpu_TexCoord", "gpu_Color", "gpu_ModelViewProjectionMatrix"); 1416 + GPU_ActivateShaderProgram(platform.screen.shader, &platform.screen.block); 1321 1417 } 1322 1418 else 1323 1419 { ··· 1329 1425 void tic_sys_update_config() 1330 1426 { 1331 1427 #if defined(TOUCH_INPUT_SUPPORT) 1332 - if(platform.gpu.renderer) 1428 + if(platform.screen.renderer.sdl) 1333 1429 initTouchGamepad(); 1334 1430 #endif 1335 1431 } ··· 1349 1445 } 1350 1446 1351 1447 platform.studio->tick(); 1352 - renderClear(platform.gpu.renderer); 1353 - updateTextureBytes(platform.gpu.texture, tic->screen, TIC80_FULLWIDTH, TIC80_FULLHEIGHT); 1448 + renderClear(platform.screen.renderer); 1449 + updateTextureBytes(platform.screen.texture, tic->screen, TIC80_FULLWIDTH, TIC80_FULLHEIGHT); 1354 1450 1355 1451 #if defined(CRT_SHADER_SUPPORT) 1356 1452 1357 - if(platform.studio->config()->crtMonitor) 1453 + if(!platform.studio->config()->soft && platform.studio->config()->crt) 1358 1454 { 1359 - if(platform.gpu.shader == 0) 1455 + if(platform.screen.shader == 0) 1360 1456 loadCrtShader(); 1361 1457 1362 1458 SDL_Rect rect = {0, 0, 0, 0}; 1363 1459 calcTextureRect(&rect); 1364 1460 1365 - GPU_ActivateShaderProgram(platform.gpu.shader, &platform.gpu.block); 1461 + GPU_ActivateShaderProgram(platform.screen.shader, &platform.screen.block); 1366 1462 1367 - GPU_SetUniformf(GPU_GetUniformLocation(platform.gpu.shader, "trg_x"), (float)rect.x); 1368 - GPU_SetUniformf(GPU_GetUniformLocation(platform.gpu.shader, "trg_y"), (float)rect.y); 1369 - GPU_SetUniformf(GPU_GetUniformLocation(platform.gpu.shader, "trg_w"), (float)rect.w); 1370 - GPU_SetUniformf(GPU_GetUniformLocation(platform.gpu.shader, "trg_h"), (float)rect.h); 1463 + GPU_SetUniformf(GPU_GetUniformLocation(platform.screen.shader, "trg_x"), (float)rect.x); 1464 + GPU_SetUniformf(GPU_GetUniformLocation(platform.screen.shader, "trg_y"), (float)rect.y); 1465 + GPU_SetUniformf(GPU_GetUniformLocation(platform.screen.shader, "trg_w"), (float)rect.w); 1466 + GPU_SetUniformf(GPU_GetUniformLocation(platform.screen.shader, "trg_h"), (float)rect.h); 1371 1467 1372 1468 { 1373 1469 s32 w, h; 1374 1470 SDL_GetWindowSize(platform.window, &w, &h); 1375 - GPU_SetUniformf(GPU_GetUniformLocation(platform.gpu.shader, "scr_w"), (float)w); 1376 - GPU_SetUniformf(GPU_GetUniformLocation(platform.gpu.shader, "scr_h"), (float)h); 1471 + GPU_SetUniformf(GPU_GetUniformLocation(platform.screen.shader, "scr_w"), (float)w); 1472 + GPU_SetUniformf(GPU_GetUniformLocation(platform.screen.shader, "scr_h"), (float)h); 1377 1473 } 1378 1474 1379 - GPU_BlitScale(platform.gpu.texture, NULL, platform.gpu.renderer, (float)rect.x, (float)rect.y, 1475 + GPU_BlitScale(platform.screen.texture.gpu, NULL, platform.screen.renderer.gpu, (float)rect.x, (float)rect.y, 1380 1476 (float)rect.w / TIC80_FULLWIDTH, (float)rect.h / TIC80_FULLHEIGHT); 1381 1477 GPU_DeactivateShaderProgram(); 1382 1478 } ··· 1393 1489 s32 width = 0; 1394 1490 SDL_GetWindowSize(platform.window, &width, NULL); 1395 1491 1396 - Rect src = {0, 0, TIC80_FULLWIDTH, TIC80_FULLHEIGHT}; 1397 - Rect dst = {rect.x, rect.y, rect.w, rect.h}; 1492 + SDL_Rect src = {0, 0, TIC80_FULLWIDTH, TIC80_FULLHEIGHT}; 1493 + SDL_Rect dst = {rect.x, rect.y, rect.w, rect.h}; 1398 1494 1399 - renderCopy(platform.gpu.renderer, platform.gpu.texture, src, dst); 1495 + renderCopy(platform.screen.renderer, platform.screen.texture, src, dst); 1400 1496 } 1401 1497 1402 - # if defined(TOUCH_INPUT_SUPPORT) 1498 + #if defined(TOUCH_INPUT_SUPPORT) 1403 1499 1404 1500 if(isGamepadVisible()) 1405 1501 renderGamepad(); 1406 1502 else 1407 1503 renderKeyboard(); 1408 - # endif 1504 + #endif 1409 1505 1410 - renderPresent(platform.gpu.renderer); 1506 + renderPresent(platform.screen.renderer); 1411 1507 blitSound(); 1412 1508 1413 1509 platform.keyboard.text = '\0'; ··· 1467 1563 const s32 Width = TIC80_FULLWIDTH * platform.studio->config()->uiScale; 1468 1564 const s32 Height = TIC80_FULLHEIGHT * platform.studio->config()->uiScale; 1469 1565 1470 - platform.window = SDL_CreateWindow( TIC_TITLE, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1471 - Width, Height, SDL_WINDOW_SHOWN 1472 - | SDL_WINDOW_RESIZABLE 1473 - #if defined(CRT_SHADER_SUPPORT) 1474 - | SDL_WINDOW_OPENGL 1475 - #endif 1566 + s32 flags = SDL_WINDOW_SHOWN 1476 1567 #if !defined(__EMSCRIPTEN__) && !defined(__MACOSX__) 1477 1568 | SDL_WINDOW_ALLOW_HIGHDPI 1478 1569 #endif 1479 - ); 1570 + | SDL_WINDOW_RESIZABLE; 1571 + 1572 + #if defined(CRT_SHADER_SUPPORT) 1573 + 1574 + if(!platform.studio->config()->soft) 1575 + flags |= SDL_WINDOW_OPENGL; 1576 + #endif 1577 + 1578 + platform.window = SDL_CreateWindow(TIC_TITLE, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, Width, Height, flags); 1480 1579 1481 1580 setWindowIcon(); 1482 1581 initGPU();