diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 870dfde..8a75f96 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -3,7 +3,9 @@ "allow": [ "Bash(pdfdetach:*)", "Bash(python3:*)", - "Bash(xmllint:*)" + "Bash(xmllint:*)", + "Bash(php -r:*)", + "Bash(chmod:*)" ] } } diff --git a/2025-12-15 - Zugferd Rechnung - Witte - 2489252 - 169,50 EUR.pdf b/2025-12-15 - Zugferd Rechnung - Witte - 2489252 - 169,50 EUR.pdf new file mode 100755 index 0000000..898a6fe Binary files /dev/null and b/2025-12-15 - Zugferd Rechnung - Witte - 2489252 - 169,50 EUR.pdf differ diff --git a/2026-01-19 - Auftragsbestätigung - Witte.pdf b/2026-01-19 - Auftragsbestätigung - Witte.pdf deleted file mode 100755 index c6850c5..0000000 Binary files a/2026-01-19 - Auftragsbestätigung - Witte.pdf and /dev/null differ diff --git a/2026-02-04 - Zugferd Rechnung - Sonepar - 9010548449 - 3581,33 EUR.pdf b/2026-02-04 - Zugferd Rechnung - Sonepar - 9010548449 - 3581,33 EUR.pdf deleted file mode 100755 index e72a715..0000000 --- a/2026-02-04 - Zugferd Rechnung - Sonepar - 9010548449 - 3581,33 EUR.pdf +++ /dev/null @@ -1,18971 +0,0 @@ -%PDF-1.6 -% -1 0 obj -<< -/AcroForm 2 0 R -/MarkInfo << -/Marked true ->> -/Metadata 3 0 R -/Pages 4 0 R -/StructTreeRoot 5 0 R -/Type /Catalog -/AF [6 0 R] -/Names 7 0 R ->> -endobj -8 0 obj -<< -/CreationDate (D:20260121225322+01'00') -/Creator (Adobe LiveCycle Designer 11.0) -/ModDate (D:20260121225322+01'00') -/Producer (Adobe XML Form Module Library) ->> -endobj -2 0 obj -<< -/DR << -/Font << -/Arial-BoldMT 9 0 R -/ArialMT 10 0 R ->> ->> ->> -endobj -3 0 obj -<< -/Type /Metadata -/Subtype /XML -/Length 11 0 R ->> -stream - - - - - - - -ZUGFeRD PDFA Extension Schema -urn:ferd:pdfa:CrossIndustryDocument:invoice:1p0# -zf - - - -DocumentFileName -Text -external -The name of the embedded ZUGFeRD XML invoice file - - -DocumentType -Text -external -INVOICE - - -Version -Text -external -The version of the ZUGFeRD data - - -ConformanceLevel -Text -external -The conformance level of the ZUGFeRD data, i.e. BASIC or EXTENDED - - - - - - - - -INVOICE -ZUGFeRD-invoice.xml -1.0 -EXTENDED - - - - -endstream -endobj -4 0 obj -<< -/Count 3 -/Kids [12 0 R 13 0 R 14 0 R] -/Type /Pages ->> -endobj -5 0 obj -<< -/IDTree 15 0 R -/K 16 0 R -/ParentTree 17 0 R -/ParentTreeNextKey 3 -/RoleMap 18 0 R -/Type /StructTreeRoot ->> -endobj -6 0 obj -<< -/Type /Filespec -/F (ZUGFeRD-invoice.xml) -/EF 19 0 R -/AFRelationship /Alternative -/UF (ZUGFeRD-invoice.xml) ->> -endobj -7 0 obj -<< -/EmbeddedFiles 20 0 R ->> -endobj -9 0 obj -<< -/BaseFont /Arial-BoldMT -/Encoding /WinAnsiEncoding -/FirstChar 0 -/FontDescriptor 21 0 R -/LastChar 255 -/Subtype /TrueType -/Type /Font -/Widths [750 750 750 750 750 750 750 750 750 750 -750 750 750 750 750 750 750 750 750 750 -750 750 750 750 750 750 750 750 750 750 -750 750 278 333 474 556 556 889 722 238 -333 333 389 584 278 333 278 278 556 556 -556 556 556 556 556 556 556 556 333 333 -584 584 584 611 975 722 722 722 722 667 -611 778 722 278 556 722 611 833 722 778 -667 778 722 667 611 722 667 944 667 667 -611 333 278 333 584 556 333 556 611 556 -611 556 333 611 611 278 278 556 278 889 -611 611 611 611 389 556 333 611 556 778 -556 556 500 389 280 389 584 350 556 350 -278 556 500 1000 556 556 333 1000 667 333 -1000 350 611 350 350 278 278 500 500 350 -556 1000 333 1000 556 333 944 350 500 667 -278 333 556 556 556 556 280 556 333 737 -370 556 584 333 737 552 400 549 333 333 -333 576 556 333 333 333 365 556 834 834 -834 611 722 722 722 722 722 722 1000 722 -667 667 667 667 278 278 278 278 722 722 -778 778 778 778 778 584 778 722 722 722 -722 667 667 611 556 556 556 556 556 556 -889 556 556 556 556 556 278 278 278 278 -611 611 611 611 611 611 611 549 611 611 -611 611 611 556 611 556] ->> -endobj -10 0 obj -<< -/BaseFont /ArialMT -/Encoding /WinAnsiEncoding -/FirstChar 0 -/FontDescriptor 22 0 R -/LastChar 255 -/Subtype /TrueType -/Type /Font -/Widths [750 750 750 750 750 750 750 750 750 750 -750 750 750 750 750 750 750 750 750 750 -750 750 750 750 750 750 750 750 750 750 -750 750 278 278 355 556 556 889 667 191 -333 333 389 584 278 333 278 278 556 556 -556 556 556 556 556 556 556 556 278 278 -584 584 584 556 1015 667 667 722 722 667 -611 778 722 278 500 667 556 833 722 778 -667 778 722 667 611 722 667 944 667 667 -611 278 278 278 469 556 333 556 556 500 -556 556 278 556 556 222 222 500 222 833 -556 556 556 556 333 500 278 556 500 722 -500 500 500 334 260 334 584 350 750 350 -222 556 333 1000 556 556 333 1000 667 333 -1000 350 750 350 350 222 222 333 333 350 -556 1000 333 1000 500 333 944 350 750 667 -278 333 556 556 556 556 260 556 333 737 -370 556 584 333 737 552 400 549 333 333 -333 576 537 333 333 333 365 556 834 834 -834 611 667 667 667 667 667 667 1000 722 -667 667 667 667 278 278 278 278 722 722 -778 778 778 778 778 584 778 722 722 722 -722 667 667 611 556 556 556 556 556 556 -889 500 556 556 556 556 278 278 278 278 -556 556 556 556 556 556 556 549 611 556 -556 556 556 500 556 500] ->> -endobj -11 0 obj -2412 -endobj -12 0 obj -<< -/Contents 23 0 R -/Group << -/CS /DeviceRGB -/S /Transparency ->> -/MediaBox [0.0 0.0 595.276 841.89] -/Parent 4 0 R -/Resources << -/Font << -/TT0 10 0 R -/TT1 9 0 R ->> -/ProcSet [/PDF /Text /ImageC] -/XObject << -/Im0 24 0 R ->> ->> -/StructParents 0 -/Tabs /S -/Type /Page ->> -endobj -13 0 obj -<< -/Contents 25 0 R -/MediaBox [0.0 0.0 595.276 841.89] -/Parent 4 0 R -/Resources << -/Font << -/TT0 10 0 R -/TT1 9 0 R ->> -/ProcSet [/PDF /Text /ImageC] -/XObject << -/Im0 24 0 R ->> ->> -/StructParents 1 -/Tabs /S -/Type /Page ->> -endobj -14 0 obj -<< -/Contents 26 0 R -/MediaBox [0.0 0.0 595.276 841.89] -/Parent 4 0 R -/Resources << -/Font << -/TT0 10 0 R -/TT1 9 0 R ->> -/ProcSet [/PDF /Text /ImageC] -/XObject << -/Im0 24 0 R ->> ->> -/StructParents 2 -/Tabs /S -/Type /Page ->> -endobj -15 0 obj -<< -/Names [(Page[1].data[0].ItemDetails_Subform[0].ADDRESS_INFO[0].ADDRESS[0].GT_METAL_SUM[0].Kopfzeile[0].Zelle1[0]) 27 0 R] ->> -endobj -16 0 obj -<< -/K [28 0 R 29 0 R 30 0 R] -/Lang (de-DE) -/P 5 0 R -/S /Document ->> -endobj -17 0 obj -<< -/Nums [0 [31 0 R 32 0 R 33 0 R 34 0 R 35 0 R 36 0 R 37 0 R 38 0 R 39 0 R 40 0 R -41 0 R 42 0 R 43 0 R 44 0 R 45 0 R 46 0 R 47 0 R 48 0 R 49 0 R 50 0 R -51 0 R 52 0 R 53 0 R 54 0 R 55 0 R 56 0 R 57 0 R 58 0 R 59 0 R 60 0 R -61 0 R 62 0 R 63 0 R 64 0 R 65 0 R 66 0 R 67 0 R 68 0 R 69 0 R 70 0 R -71 0 R 72 0 R 73 0 R 74 0 R 75 0 R 76 0 R 77 0 R 78 0 R 79 0 R 80 0 R -81 0 R 82 0 R 83 0 R 84 0 R 85 0 R 86 0 R 87 0 R 88 0 R 89 0 R 90 0 R -91 0 R 92 0 R 93 0 R 94 0 R 95 0 R 96 0 R 97 0 R 98 0 R 99 0 R 100 0 R -101 0 R 102 0 R 103 0 R 104 0 R 105 0 R 106 0 R 107 0 R 108 0 R 109 0 R 110 0 R -111 0 R 112 0 R 113 0 R 114 0 R 115 0 R 116 0 R 117 0 R 118 0 R 119 0 R 120 0 R -121 0 R 122 0 R 123 0 R 124 0 R 125 0 R 126 0 R 127 0 R 128 0 R 129 0 R 130 0 R -131 0 R 132 0 R 133 0 R 134 0 R 135 0 R 136 0 R 137 0 R 138 0 R 139 0 R 140 0 R -141 0 R 142 0 R 143 0 R 144 0 R 145 0 R 146 0 R 147 0 R 148 0 R 149 0 R 150 0 R -151 0 R 152 0 R 153 0 R 154 0 R 155 0 R 156 0 R 157 0 R 158 0 R 159 0 R 160 0 R -161 0 R 162 0 R 163 0 R 164 0 R 165 0 R 166 0 R 167 0 R 168 0 R 169 0 R 170 0 R -171 0 R 172 0 R 173 0 R 174 0 R 175 0 R 176 0 R 177 0 R 178 0 R 179 0 R 180 0 R -181 0 R 182 0 R 183 0 R 184 0 R 185 0 R 186 0 R 187 0 R 188 0 R 189 0 R 190 0 R -191 0 R 192 0 R 193 0 R 194 0 R 195 0 R 196 0 R 197 0 R 198 0 R 199 0 R 200 0 R -201 0 R 202 0 R 203 0 R 204 0 R 205 0 R 206 0 R 207 0 R 208 0 R 209 0 R 210 0 R -211 0 R 212 0 R 213 0 R 214 0 R 215 0 R 216 0 R 217 0 R 218 0 R 219 0 R 220 0 R -221 0 R 222 0 R 223 0 R 224 0 R 225 0 R 226 0 R 227 0 R 228 0 R 229 0 R 230 0 R -231 0 R 232 0 R 233 0 R 234 0 R 235 0 R 236 0 R 237 0 R 238 0 R 239 0 R 240 0 R -241 0 R 242 0 R 243 0 R 244 0 R 245 0 R 246 0 R 247 0 R 248 0 R 249 0 R 250 0 R -251 0 R 252 0 R 253 0 R 254 0 R 255 0 R 256 0 R 257 0 R 258 0 R 259 0 R 260 0 R -261 0 R 262 0 R 263 0 R 264 0 R 265 0 R 266 0 R 267 0 R 268 0 R 269 0 R 270 0 R -271 0 R 272 0 R 273 0 R 274 0 R 275 0 R 276 0 R 277 0 R 278 0 R 279 0 R 280 0 R -281 0 R 282 0 R 283 0 R 284 0 R 285 0 R 286 0 R 287 0 R 288 0 R 289 0 R 290 0 R -291 0 R 292 0 R 293 0 R 294 0 R 295 0 R 296 0 R 297 0 R 298 0 R 299 0 R 300 0 R -301 0 R 302 0 R 303 0 R 304 0 R 305 0 R 306 0 R 307 0 R 308 0 R 309 0 R 310 0 R -311 0 R 312 0 R 313 0 R 314 0 R] - 1 [315 0 R 316 0 R 317 0 R 318 0 R 319 0 R 320 0 R 321 0 R 322 0 R 323 0 R 324 0 R -325 0 R 326 0 R 327 0 R 328 0 R 329 0 R 330 0 R 331 0 R 332 0 R 333 0 R 334 0 R -335 0 R 336 0 R 337 0 R 338 0 R 339 0 R 340 0 R 341 0 R 342 0 R 343 0 R 344 0 R -345 0 R 346 0 R 347 0 R 348 0 R 349 0 R 350 0 R 351 0 R 352 0 R 353 0 R 354 0 R -355 0 R 356 0 R 357 0 R 358 0 R 359 0 R 360 0 R 361 0 R 362 0 R 363 0 R 364 0 R -365 0 R 366 0 R 367 0 R 368 0 R 369 0 R 370 0 R 371 0 R 372 0 R 373 0 R 374 0 R -375 0 R 376 0 R 377 0 R 378 0 R 379 0 R 380 0 R 381 0 R 382 0 R 383 0 R 384 0 R -385 0 R 386 0 R 387 0 R 388 0 R 389 0 R 390 0 R 391 0 R 392 0 R 393 0 R 394 0 R -395 0 R 396 0 R 397 0 R 398 0 R 399 0 R 400 0 R 401 0 R 402 0 R 403 0 R 404 0 R -405 0 R 406 0 R 407 0 R 408 0 R 409 0 R 410 0 R 411 0 R 412 0 R 413 0 R 414 0 R -415 0 R 416 0 R 417 0 R 418 0 R 419 0 R 420 0 R 421 0 R 422 0 R 423 0 R 424 0 R -425 0 R 426 0 R 427 0 R 428 0 R 429 0 R 430 0 R 431 0 R 432 0 R 433 0 R 434 0 R -435 0 R 436 0 R 437 0 R 438 0 R 439 0 R 440 0 R 441 0 R 442 0 R 443 0 R 444 0 R -445 0 R 446 0 R 447 0 R 448 0 R 449 0 R 450 0 R 451 0 R 452 0 R 453 0 R 454 0 R -455 0 R 456 0 R 457 0 R 458 0 R 459 0 R 460 0 R 461 0 R 462 0 R 463 0 R 464 0 R -465 0 R 466 0 R 467 0 R 468 0 R 469 0 R 470 0 R 471 0 R 472 0 R 473 0 R 474 0 R -475 0 R 476 0 R 477 0 R 478 0 R 479 0 R 480 0 R 481 0 R 482 0 R 483 0 R 484 0 R -485 0 R 486 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R 492 0 R 493 0 R 494 0 R -495 0 R 496 0 R 497 0 R 498 0 R 499 0 R 500 0 R 501 0 R 502 0 R 503 0 R 504 0 R -505 0 R 506 0 R 507 0 R 508 0 R 509 0 R 510 0 R 511 0 R 512 0 R 513 0 R 514 0 R -515 0 R 516 0 R 517 0 R 518 0 R 519 0 R 520 0 R 521 0 R 522 0 R 523 0 R 524 0 R -525 0 R 526 0 R 527 0 R 528 0 R 529 0 R 530 0 R 531 0 R 532 0 R 533 0 R 534 0 R -535 0 R 536 0 R 537 0 R 538 0 R 539 0 R 540 0 R 541 0 R 542 0 R 543 0 R 544 0 R -545 0 R 546 0 R 547 0 R 548 0 R 549 0 R 550 0 R 551 0 R 552 0 R 553 0 R 554 0 R -555 0 R 556 0 R 557 0 R 558 0 R 559 0 R 560 0 R 561 0 R 562 0 R 563 0 R 564 0 R -565 0 R 566 0 R 567 0 R 568 0 R 569 0 R 570 0 R 571 0 R 572 0 R 573 0 R 574 0 R -575 0 R 576 0 R 577 0 R 578 0 R 579 0 R 580 0 R 581 0 R 582 0 R 583 0 R 584 0 R -585 0 R 586 0 R 587 0 R 588 0 R 589 0 R 590 0 R 591 0 R 592 0 R 593 0 R 594 0 R -595 0 R 596 0 R 597 0 R 598 0 R 599 0 R 600 0 R 601 0 R 602 0 R 603 0 R 604 0 R -605 0 R 606 0 R 607 0 R 608 0 R 609 0 R 610 0 R 611 0 R 612 0 R 613 0 R 614 0 R -615 0 R 616 0 R 617 0 R 618 0 R 619 0 R 620 0 R 621 0 R 622 0 R 623 0 R 624 0 R -625 0 R 626 0 R 627 0 R 628 0 R 629 0 R 630 0 R 631 0 R 632 0 R 633 0 R 634 0 R -635 0 R 636 0 R 637 0 R 638 0 R 639 0 R 640 0 R 641 0 R 642 0 R 643 0 R 644 0 R -645 0 R 646 0 R 647 0 R 648 0 R 649 0 R 650 0 R 651 0 R 652 0 R 653 0 R 654 0 R -655 0 R 656 0 R 657 0 R 658 0 R 659 0 R 660 0 R 661 0 R 662 0 R 663 0 R 664 0 R -665 0 R 666 0 R 667 0 R 668 0 R 669 0 R 670 0 R 671 0 R 672 0 R 673 0 R 674 0 R -675 0 R 676 0 R 677 0 R 678 0 R 679 0 R 680 0 R 681 0 R 682 0 R 683 0 R 684 0 R -685 0 R 686 0 R 687 0 R 688 0 R 689 0 R 690 0 R 691 0 R 692 0 R 693 0 R 694 0 R -695 0 R 696 0 R 697 0 R 698 0 R 699 0 R 700 0 R 701 0 R 702 0 R 703 0 R 704 0 R -705 0 R 706 0 R 707 0 R 708 0 R 709 0 R 710 0 R 711 0 R 712 0 R 713 0 R 714 0 R -715 0 R 716 0 R 717 0 R 718 0 R 719 0 R 720 0 R 721 0 R 722 0 R 723 0 R 724 0 R -725 0 R 726 0 R 727 0 R 728 0 R 729 0 R 730 0 R 731 0 R 732 0 R 733 0 R 734 0 R -735 0 R 736 0 R 737 0 R 738 0 R 739 0 R 740 0 R 741 0 R 742 0 R 743 0 R] - 2 [744 0 R 745 0 R 746 0 R 747 0 R 748 0 R 749 0 R 750 0 R 751 0 R 752 0 R 753 0 R -754 0 R 755 0 R 756 0 R 757 0 R 758 0 R 759 0 R 760 0 R 761 0 R 762 0 R 763 0 R -764 0 R 765 0 R 766 0 R 767 0 R 768 0 R 769 0 R 770 0 R 771 0 R 772 0 R 773 0 R -774 0 R 775 0 R 776 0 R 777 0 R 778 0 R 779 0 R 780 0 R 781 0 R 782 0 R 783 0 R -784 0 R 785 0 R 786 0 R 787 0 R 788 0 R 789 0 R 790 0 R 791 0 R 792 0 R 793 0 R -794 0 R 795 0 R 796 0 R 797 0 R 798 0 R 799 0 R 800 0 R 801 0 R 802 0 R 803 0 R -804 0 R 805 0 R 806 0 R 807 0 R 808 0 R 809 0 R 810 0 R 811 0 R 812 0 R 813 0 R -814 0 R 815 0 R 816 0 R 817 0 R 818 0 R 819 0 R 820 0 R 821 0 R 822 0 R 823 0 R -824 0 R 825 0 R 826 0 R 827 0 R 828 0 R 829 0 R 830 0 R 831 0 R 832 0 R 833 0 R -834 0 R 835 0 R 836 0 R 837 0 R 838 0 R 839 0 R 840 0 R 841 0 R 842 0 R 843 0 R -844 0 R 845 0 R 846 0 R 847 0 R 848 0 R 849 0 R 850 0 R 851 0 R 852 0 R 853 0 R -854 0 R 855 0 R 856 0 R 857 0 R 858 0 R 859 0 R 860 0 R 861 0 R 862 0 R 863 0 R -864 0 R 865 0 R 866 0 R 867 0 R 868 0 R 869 0 R 870 0 R 871 0 R 872 0 R 873 0 R -874 0 R 875 0 R 876 0 R 877 0 R 878 0 R 879 0 R 880 0 R 881 0 R 882 0 R 883 0 R -884 0 R 885 0 R 886 0 R 887 0 R 888 0 R 889 0 R 890 0 R 891 0 R 892 0 R 893 0 R -894 0 R 895 0 R 896 0 R 897 0 R 898 0 R 899 0 R 900 0 R 901 0 R 902 0 R 903 0 R -904 0 R 905 0 R 906 0 R 907 0 R 908 0 R 909 0 R 910 0 R 911 0 R 912 0 R 913 0 R -914 0 R 915 0 R 916 0 R 917 0 R 918 0 R 919 0 R 920 0 R 921 0 R 922 0 R 923 0 R -924 0 R 925 0 R 926 0 R 927 0 R 928 0 R 929 0 R 930 0 R 931 0 R 932 0 R 933 0 R -934 0 R 935 0 R 936 0 R 937 0 R 938 0 R 939 0 R 940 0 R 941 0 R 942 0 R 943 0 R -944 0 R 945 0 R 946 0 R 947 0 R 948 0 R 949 0 R 950 0 R 951 0 R 952 0 R 953 0 R -954 0 R 955 0 R 956 0 R 957 0 R 958 0 R 959 0 R 960 0 R 961 0 R 962 0 R 963 0 R -964 0 R 965 0 R 966 0 R 967 0 R 968 0 R 969 0 R 970 0 R 971 0 R 972 0 R 973 0 R -974 0 R 975 0 R 976 0 R 977 0 R 978 0 R 979 0 R 980 0 R 981 0 R 982 0 R 983 0 R -984 0 R 985 0 R 986 0 R 987 0 R 988 0 R 989 0 R 990 0 R 991 0 R 992 0 R 993 0 R -994 0 R 995 0 R 996 0 R 997 0 R 998 0 R 999 0 R 1000 0 R 1001 0 R 1002 0 R 1003 0 R -1004 0 R 1005 0 R 1006 0 R 1007 0 R 1008 0 R 1009 0 R 1010 0 R 1011 0 R 1012 0 R 1013 0 R -1014 0 R 1015 0 R 1016 0 R 1017 0 R 1018 0 R 1019 0 R 1020 0 R 1021 0 R 1022 0 R 1023 0 R -1024 0 R 1025 0 R 1026 0 R 1027 0 R 1028 0 R 1029 0 R 1030 0 R 1031 0 R 1032 0 R 1033 0 R -1034 0 R 1035 0 R 1036 0 R 1037 0 R 1038 0 R 1039 0 R 1040 0 R 1041 0 R 1042 0 R 1043 0 R -1044 0 R 1045 0 R 1046 0 R 1047 0 R 1048 0 R 1049 0 R 1050 0 R 1051 0 R 1052 0 R 1053 0 R -1054 0 R 1055 0 R 1056 0 R 1057 0 R 1058 0 R 1059 0 R 1060 0 R 1061 0 R 1062 0 R 1063 0 R -1064 0 R 1065 0 R 1066 0 R 1067 0 R 1068 0 R 1069 0 R 1070 0 R 1071 0 R 1072 0 R 1073 0 R -1074 0 R 1075 0 R 1076 0 R 1077 0 R 1078 0 R 1079 0 R 1080 0 R 1081 0 R 1082 0 R 1083 0 R] -] ->> -endobj -18 0 obj -<< -/Draw /Div -/Field /Div -/Page /Part -/Subform /Sect ->> -endobj -19 0 obj -<< -/F 1084 0 R ->> -endobj -20 0 obj -<< -/Names [(ZUGFeRD-invoice.xml) 6 0 R] ->> -endobj -21 0 obj -<< -/Ascent 1056 -/CapHeight 716 -/Descent -376 -/Flags 32 -/FontBBox [-628 -376 2000 1056] -/FontFamily (Arial) -/FontName /Arial-BoldMT -/FontStretch /Normal -/FontWeight 700 -/ItalicAngle 0 -/StemV 136 -/Type /FontDescriptor -/XHeight 519 ->> -endobj -22 0 obj -<< -/Ascent 913 -/CapHeight 716 -/Descent -210 -/Flags 32 -/FontBBox [-222 -210 1000 913] -/FontFamily (Arial MT) -/FontName /ArialMT -/FontStretch /Normal -/FontWeight 400 -/ItalicAngle 0 -/StemV 88 -/Type /FontDescriptor -/XHeight 519 ->> -endobj -23 0 obj -<< -/Filter /FlateDecode -/Length 4129 ->> -stream -HW]o}-~s7(+Y8vs-BYkI7TRYRHK&(кΙ33g"U5"X7qۋmMg{#Z\H ΑT37=}XŽi?'3Mluf n/ӟ7f6mr8AS^RH.{\ f3b38TSj@٦.&[}dv -kA:ë>H&6P;@S*Rq1nPH)FRe zCx : Qx ?$ZA|$R`-U2Bx,IP US@ GZbش/]=(Y@|m"+faa?w}Ppll:hx~-ϰICǻdm}dݦ(@M--bD(WRiyh㺏8`.T5WG & ҄ Fܯ!$=lR_ 68`ޏ$&qll_ DR0* - kA[T $q( PW40C.x4TA7 -44m%&r=9Jy€X{{ U|۝M# z]ml\tN5h(e6^l I, gǀ"{t%;6Rd/jHE+r/ԅ9^\Xʰ}5$U]qr ҰkҬVJQEt-wՍUqO;P<@GwbR7~Z0=O{;NTVB)R*Rm|T룮~3~m7'g==u_W(FE5/Di11s;b^Gf\قCv 63LPֱf~VŤT,m~cVXL*E$H<)ޠ[bm,ȁ>OA߂aTu£]gċ`~c_h|;E`FaYcD 'ýX }fTY2f\g-kIfSk6`Qj]?w5Xj)ڈ*Kx.b_s3'xU-MwKv}8(ʚ bM=(n-h[AM5Co'7a`DuqaXaefnH -ѦyţfK (FTJRRL0"Bo)*ğŦM&!ѪF mČM9}UԏG8#gr~ׂhRC@p3SP)G -}Ö T8y糩#CoI}GJ`ES,},xNg>C~#ΰ KYbX"O sD ݠmKa+1?11JB*g.Yd^olIs^6QAW19:& .+X!(_Zq1Sw駪[[(NqMD?jN6ez=Eԅ3}(+̻⽸|`8ģ~zP%XR>Ct/jX{`<EtiǬ=2Cj\>68:nqI{Ϊ -^1x6.N14#ώ6z`0ɳ45@ Jb.{iA40@&f,fӻ+{%fff_P`(tg.9j_Ѭvo3X܌z{>ж>^Dvp3DM<@1ᵻc?9ނ }UAZU5wi hijO#7 KU,M2@X>+ Dq\3WLbf,ې' d轴4i̠Gz0-Nj}03Z͌3yh"Җ42w$ƻv3 &(&]t;3Or E[5h0s4k{3i(hf Ƣ D4-* Ir{ܛyT8"I g+f& \dގ3s53'prBTM֛F>YЂg -3Gмh%& ]].IM5 zY z.X6s򪙳,xkf -3gkYVܥfZ?YzsKT3F )rwf>dD@W faa1f}gJ bd ¼\|1']cX1/}#%8CTG<ΆeZA{ 767IRMQA/P-IA0V6!Ê6+۠ 8̳}Ӈ_5y2 翝ؼx(g,s\Qlt}]<9Ύ=Fp#^}PԖ>׳g{x8ؽSs=oo? y2gR>Y 3j4) 1Oڰh0 -w܏CmB40FfU5Da(}6^PRlGuSC4 䠿o#wk*AR RFv6}߇mįڈ)Ȗ6B/`(km$yMEŀ%-K E$.xt}89?<|'f 6qL8$/睕066T2莄j4}adsNz 棅/b}ԝXA"D_Qe^gj(wD!h& -`(G@2P8'Xq.6OjХ|t"Cd\AY}|qr4 ;iFy EXoKo :FrS:bjߥ5fRS3,]b@bY tWբl+ 4]@K4'2&g0YSu<+U AIG+H6 Q -endstream -endobj -24 0 obj -<< -/BitsPerComponent 8 -/ColorSpace /DeviceRGB -/Decode [0.0 1.0 0.0 1.0 0.0 1.0] -/Filter /FlateDecode -/Height 413 -/Length 73594 -/SMask 1085 0 R -/Subtype /Image -/Type /XObject -/Width 1004 ->> -stream -H[UՀDR%`BI}i C$^0&$*#<lt{A-R IӪbm;mfgfw.;3;}nmfwh8t|s?'`ab0Ii`L/؆]G!Kn\/-wӨۉNnR%:%Du?E1щ0o)&K~{sOU',=vɓ:]BsGAqnnU^-u_aMR /]l83#Z494EK!χ2Mwτ9TzDSq3_|` ,{5"o'<~{s?HOg_{=*/yq~;慱u- r_Svs.\*S3<# <}X=d' -=_;w,H - 4- -j\<#oV& NҋZǘ?/ܱ;[7ݔ  -LOf",sq3[VnpaJEzB;#oV=^6U6Rёt!* |Rg%x8/ -/FLY9`4>XTWrT/ZG^>`pWQ 4m ?!NgUx*vJW翶?噺 ->k.m*; -,[߯-E Z,.>~\\ixdMY)z<W/w~xi*>gOʹpu_sOql(RיW)VrSBi+u.3+ǦP^q\Z!ߤe+mDYeXn]JkHC/ >H 9^o]=ݕfՙ[fڴVXf9KPv卝f,䝲Wk g qͅXL}{/;2^>$LyË@@9y҃e.iAѷV; R!1;<#縺bIu!}d>;9`{0|l,LWX{r3N2sO[TG֏`WX2914:ȴ}*Wz˞Ή/5R&T!Hzf0]5ᥭJfb!j,6fzn!ؔrAt]b=6SG0(G7n5vT^'h`{V!G1{Jsь; -mwCdJ,ձ}HJkʇ *i~["vF^>Rzpti/ 7ěvSBרx -1{}?a?=Q4>|ҵv1Jnj[y>C{9S줏Do -G9e[d٣N}  -S!$VwأZJ^=}e&Z. -W[%jwK?xڎ3g>B/'O( zITG떂#6iA[^HSow=k -XE7ٳ>S.׻B54]>ݟf\n: #2C"UYUeTTW.g=^12 -FjD'@՛Ҟi\/_+nF7NMA&LX]1);0&A؊8N%:qɚfú5^8:0*-&ݩ;6깚 X!$\TAX]!=quHu`w{VdLg)k6,` X4IR?Q[x ʺ7[2bWFYSSga?,$ zmm]mݩLn:xhZIewPJTn%ABArH$\9}sIZNL^9>y>ЏA"B -b4GPm9]c/UYWlYU2IJļtRR6%-5K,)7^a{ze As HAn}Tg{M9kFc`?apc sIf$tu9%n2zO5,0( ]=:t~|م%3R9k&tkaV铜+Rꎟ>x@Reѻpr,Blӷz-@27vIR`LZ "@,A=<'?eS4^-D?uz[kjrA{4OUJ*?pr4)5i97ow<l4BXmNvfcR?,5y$$CmPaq7D&tH8Tq4TuF:ԃ}SY G?xP|C:il6 :X:J Gk\S)󊚁- '[uDce?YuJ^-,Ri[;M$Vx_;r9)SiOāLhvtOE\Y?@hd]zĢ r)Hs%)'2qLeXذ=Zmk8A:,.r|{ ogSbLYDNft,M!f.Wݒ'.(ji74ͼ4=J8հAg'ؠk?lL 8(h>F}fhJWE͙""Jny -2[7nˁ$9wA[9}>?jh5-Y^?+MD ;2vT.ݘw~P,C[P2?d1[?_|(f;]jFz~Mz=][t(~DWHsy![F69pgӻ+֜E/v23 1&]L<ޠ4KNSY<_QٛhkTMLgDL~S5d1p.WA&܍ cq{wkMлQfͶo12`:7muH¢.=tF3A7 Ӕlwtl1 ' -ܤ!E1sF`y\ݨ}4:2>d"f]'aDgfc2dCƩTոBwFl},3#\BܒZ\:h=hڳ*4RADZQ=tjöT>RĖ Et"_)Tf((>j5ꝟ\9$guh -BU$L#@H/#+OUexZm@ bmtrXXJ->$(lıgξZ7:R8y~VTֳ`IhXPO$w.\֌@dDFdې9 bZ( q01qα{pNUPvy)[Fk_c5x+W {ȷp'7&.]3dx^ 4Ng`*⣷>!ݙ3L2)5g2mcW鬛Wƕp"m1 ̎%B5㐦t:|t:D! mh2)Iڴ!itʔtR0yP0Oㄗ1؎1q0lcɲ, K-iW^P$С1{./ԫDZa|u`s7XԊ|xd=*~{uɚaAG&t"J?uR_O@;h5Q¦ݔzmʌBOf]YdY-޾nsmCk I^UE.Tۨ| tz'NY(QP*b'w΢IiRwɎ89PebVh93  %2)ew@zo4ڱm EJD8 YD[M|OaJmjP~'[?սܓ.u;?dwHO4G݄Х$+[Uԓ6?^Xb.\cOg -,R8ШUf!<S5WXUi@0/=oْ1/pDY:#"&NοӪ0vRzU&+R{SgoN7@XU|75QM`<jMMR?"Rsp9?5v2;:r瀖df/<7 (Bj*OBwwwT+Qjņ4UV_| Bt#Sd9yuӰZ^3j2' *k2Jnlqn7,^^Ie,z޹Nl,,9{Y6$VXc -b%\DQ>x=N-jjqDiO5Ch/|~y=Y(F"Ĩ<`s]rJHC18aLjUfBj9k#`y4>"?peGH:bOlu~;>rpUjW+|z"HO Cb0Gp$7'ŀFD(YQFXdGqFi_M}{z'eg0!OІ}?B&ax9^lm[ kS z#63Z FX7{;,LS$EI"@< FCOĔp pJz$d[V~DG'{n]`T1$ٻdxΤň%/D hJ($ԞeP&YtY k JN^ eĥf$ $ :T^u=lXS~q[%qOi1iK^-;SpZՆ1_f,k9e/aZvv7eDN+:cRXXfߺi9k"Qnj(ɕ<,)w0xԕ7ߩ2kQ"Gg4YLa'[Ku Fx(@aM#'r 0ڰJP/ DLH3!6EÅJo hvkk ^˛Me؉RNMk͖l֟64BS`$+o(d -4$t.PɮgQc-#c<'ӭ9NQU&)]X`axCw6T2Rwصq -t| ?z^Q} P$ G H@űKs1Zg 2bNLxY Nrz#yQ4vFɷ7CefBqx݇9Yis4~tJB{4bZRWw8=V6wvE/DTZT{Ҳ:[<TX* ㄓ5 zZ`fե6LfO:f܃8 (T{7jlq,LlitDVf $ K6X R }% lH<Ng$w7wex@Y(zzl -[ft67:5x0Qf,2<X@aVZs(qCFj Zk ,!O$x w?7o< -o J4f8".dV͖Q2#U\䴚0CŕmAo.w}t2?UG s [Y5$e-*Dq]n!HcƮ VP]ov:o0MlІ/NGw]૖ v 4BI|\Cޣ=q4~޳>rk'ԱCu6HڰngG%`xtv185(⹐ +9;.arod2Ͳ2@;i8TRZ\j(%l< `#i7dE%11D<- po7 -z9JYO;RMf&ӨLE>0%߈omj/^AS6#s2ڜ<)* J ̎[ʛ*9?xګ,2k rkPJ(Z4t );o}Zl1:p>;v }12cBcxAWcx"zgyG7}l_L'mKJa[>N>q\ug0V K;/j_>JlJŸKy/o' q Yk4x/$Q虂U~!aӘY1qyKUv ݍc,b|9*|,_Yt'pVZbx3d9K[ĕ5¡j#Z-!j' ~7,:;qÌ{NxOH3X͹ýsu4u}oSd|c0P/vn&p|T!:e-'zE[?~:ej|=;^;K6q1'9[0Nnvs9uӧO0)`FD`.2?Oѹ`pdwIy P/v˨ԳD}3R/;+rT@88& sZ'QRx>/b h0\4: -ijv%sHri-n0D'Xod` /0><{黻^k;=SUUuIXWW^W|`Ϗݽ.01|;y3焛Gv]u #'π!*U:ifWnx|+~'8\f5QƁyۛW@/gH7Z`8ɔA0~f_TDbu,i|o*:zF@<:a z4Op!.j~0c1THiݚP~44;zJ n .^'/̘Jrt/0Eؐ4CHo>'0@aogm>}KtxIѿԡ?/%+PZ ^-0Ӻ%"qVOU Ǘ۱syZ%&PH[`P'fM0H:y#$qڣsua3cxioyT/;3=6+I$`xRޠi et@tՁA;pkvg+ZBh=-JPÍ-{XKgxC_AQW/0}M3t K&>iRfbtLSj3싗QPqT1²q9{'ou{=w~Ilm=Ю5WO@ɑ=}~bg_4Dob''@ G#q2\b|hQڴm+m>M33}HRijBV kK"Qzyǟ707@ހ5 Gh:R߯KĿv7?w?_ -(eg(̇޷qyC(>),Ѫg#اd/^^򓣟m(_ewvO=%vytـIDwvyE$+yq|9y.=!LEw$j- `'ri<ꯖ25Z@vprC1ҰBaБH [FL-kjVНOQwhZ*֘QISzadg,p YI ` ī^H!o.=pUZ5bQfUve9zx0@kS4ޘ!wF,XIf:qyܹdiɒ{,5-e HkyX@¤c'kq H4H~&L8dyF.8UoLJ E t768tS-q2Y#a0G܆E,$3@;|5%eL:]ժꗬ Vm1LME}*^>%jﶟWZ bꚆǽ>:0&) ̍Q`F@{԰4}cbt5L)UqD ~)֝|=64ƁXɜ11W쎆X\g\^Xګm_ VM9 3ON&TnK*\/wi7?W#8tĞҺ~z7?˥DM䯺a E%ى%5g3|,P7,Ҥ -W)jh/5>Ņ'eh" *(g6'gE'kgQIHFQĮ&52&m$[yKv}+V^amz[`^DAFSBȔV %_MVqFOBc2:3i: vA$LѪ'eX`SY]l$/c7)wﭽJ-5շ/~DlS6NB6Nٝɳ7YnGg?MAH籧+syD x Bb>[G\1<7Tة4SjΟq6/=g]>:s^ҕ֬/fU3NK=tYr&y  ?mY{hQӍINÃRD(%*m[sƂ4"ZCy[tJk U^OɁ]u#!4h k`` fRþfCF$8DaI5΢+SS)λՐ4~zg\kx 0  YZ_[9ȜCUv, -(m){#Br#meղ<ş<wGhu2? r5ٷ^ RAtnQɶsg^D-^'~qvC zrF>36[(hTaٰj1캀!hm^b~@ia3#@߼ѧGswU<}7jvWX\vCYʛM"ެKH%p42!* Ҁ -m?UC2UzC]38- >7z -ԭL -/yΞ{q&Fw839mG מ~N#.bg#fo[R4`cBYOxũ]^Gd5_ DwOu'&i$c4CvQu^ټs[ I+m4r="g[f ք)o]bmyUEWE)-͖܋k֗nQ,p ІՎk)ES_~`}Eq ?nbɊ;MƄ&3n]GKca1~kn`Xs/1Qf^E * g逪c+~Y\>1y#R:bj.!}:9N\;t:,*E ( NtY: E>?DҞ:-?*d᧻Ezr~. L -|#zøz`s@Х b@>1X2*qz[Aw’Q&Z+Q Cei~[-֬/QX)Q0L~q}(~uq2@[dC>-4n+(F9- K^/ -!Kvs'HP4]55ԣ5tA$O'XU'F@!Ivb8%&1Xm\鱋z<^ 2NMdYܸռ!0m3 >,`^X6?HiʏO兺)2ys@i|#RNHzkpc2mi;f=jK&@-)fB <@&$)IҔ$i:G: ^ 6vLxc0L[%[]I޻Z4|g,{t$"X ̋<RP` .}-}k 2wr}VaUt{qUe=*+OPQgdWE+K̶4Ryə8*ǫIrXۛ,Sӥ31_u];'c#kKEjUMGn#h8 GPpE/xiD`J3/,/AͥK[ n0  h -\ ?;kG이D"` %,eII15  $)s$Iu*Ӏ #PVO)u`N -@,Xr{U ;pX@U;f:Uo;bv3=.ܸ3\P/SB?ǝSOX@Q4V7ߩMcZ4̨w$Cz<9#b2'^PޖUj xv˼Oqp`m$Neu˼;R-H1}59ug/ `=Еh̘X!ƍb͐ 8j.X=/&6\',lCҀȓI3tI w\]SoQ͍ ])CX|SܗeVt[%ڜz4yBE)ȅ3 %>36+dc93ȱw0@5:V;&]V4gDPȐ+CB^;N=? G-B˼-i{!L?2춅}а@¨At5^ k#ёxWKӟ!$5vrSI~3YW߮>uKS]tI0Ss- N!`pH) 5[̂ٹ1oH?*\x{ uALxScjL:T-(+)_x+H Iѝ*+ܸM)=A;]?t}<HM$0nq}+蕰-0D8ѝzы2 0"ȣQ%ʝ}q-*V8'(};rtW9Ab wB6;AD@e̖Wh\9ޯLif5|ETTQ}WXL7n? r[XFFD؞!Q4{+шzI&fk<"}*ZVJ}mƇEfPؑ脹K\ݑhD[0u5~vjTaEMˬ9EzrD`L`}~kәNɜ`@ی9vS'YWJ[.;%)L2-y= XW O5:LDŽٷϞ[t3iJiXrK:3K~]|bwh4i6XױC!˓|ߑ/ޝ"q%Jc:,nk$!Jӹu/ u Wnwy0LNQ^w<N~rJN%RqqwWA綔H,fp# NjtB0StX1=G)#t'$R"< -7"2vw7zSWCmް?,Sļ-#Fٍ'~kʼnK͈ -68~( Mp2(s4J>:<Dž`xw+C#|q 轷 ueJG%hk]..,]U:Fbt!3C+,B_p{rTc Inp: =2 -*)aPțު:hH7AV @ p3"K9!5<vsןfHyʞjx%80S456_ 1>2&1;5-cOӜi[xWbXNp]PE5wZ :9G=@i}wā45'u9^GdըcY6ȖUu\o8H{l;I|q_ ` 4hQ]AVL`r. T=1ʥh|A[J~1##jI.`Ɓg](J;@dxcFgZƑ^DAm B$,gꮺm,cn2eψMf9ŗ@89qlQ|۬̚M*9m ^_~K~fKWcx[|v:Lqp{0h KX&@9wU{j:*&J|$|0^u\郴%{z%D*$IQPgG60Hq/ҵt`W)O02bmVX٢\`ۨKB48WxpQ -|$عxEF&h)#ëb$5Hm]A@J} B8,Vڬ3l Kk6ek eUI7ggd=S )mD!XkZKD! CVǦw qBҞbR ρ 0Ƕ†vQ],9NTtEH]H?r/Od2!Ayn񜔃LUbT2rsxcl:\6Xt\ OۑUo.4?}٦"&uoIhX?? -Riiŀ]pi)'y/z"xpM! 2^V)NX C@Ce$al%,>wjWD k r FDByPmǘa?P\${:a4wcaxXd^F)²`wvž p2 -K EvwyY?ۥ71lku:MgV yyNl,?9_ƿJjCƑO{VLQA+ufuW\Ai&@yYRb`&$+A@U㇧ũ|㊘Fwʮ9@DSX,7t>g|% Q>[|s'!K_?+qxrY"YB}s ZAj0Ko$9\4 G|E{E=F؞~_p~ d".E[Ʋyu>AG%,ac7N^zpfE]IEQ|Sh;Yq/RSu$MkZ;ىo{ēH N^@#&jíZ m[GD$`n ;x!kϚ_7lV=d(;]XZq? Z{xEo3Ks J;*iR;a I!=H;l]=@SB'mVtCiN[_z;d䷘~+&}8-3TGcO5(t':u=;k3,?-l@XH5;j^i}__L}rUq0_>3|LB[&nglX>1uqLg$\ >\&nṲRU!1S1A[ b_oF~iEx& u%*]T*dz3{Ԡ]TR?Y%ƐGJH~4(dXbRk-עq1<.3$i!9/L5e@ǁD -K}߸hDG4ÉD|MRD )z}&֬-eS26e}IͮGQH;״HtRhR۹+ -4zbx Ȁ/3=\ &IOtc0⿌ -Ÿ7~qZ lb~C -|\Qz #Iɉa/9Hi1 -d r{/#1hax.u8MŻ{C,M r6_)cpD)px0 -ҫpۏ8UodjQut< ݞmk mSK;;#c`;ao㤙,\rUX8-4P+陀ʡsRU:5JIpMI%8c.Kntu;9cFm2U+pʬH -L9_rͧ \~^,xi[_=H #Rv՛ Mֱб3Ch+̽p8H '}RQה -n3<mj{ÄCTca9*Pvϲ9FuBw}?<%$hllx|!}A&?YqY0'Ó$fWA?R !w_ՙ !dBA$9*Ӡ0Oy>f~Fͅv&h|`-zeGgoͣbDe6qu^e՝6 XB{^/7RHVhV C {>v'M2\7_ /WoAկY]O5mw[PYQGmxzǁ6 SHЈqM܇{DEԐ=< 0NY,Ȕ=5,[4``B8Cx\)E'l)'(J*NKOX0=|~0͢@Pr'(lvcܗFSmԪanqCUHM!P~g7[1om[\bo¢ -wG:< ;Q[[mA$L o<έH*~)5ĦqRV)M )o^MĮbp .}tp ;PG$L.Bz5 S 2;$ -kťY{9aJ6v<(6,`Y&z +r3969 ~ƺgkڦǧc5 + exa` ƒ36=hXn,|NsI\QD٥dc.뿊`wKzWM3֓)J&,#?1)yVx|/Qn׹:tzq7;,Krfъ#'B NA:v^paZZ:].>g> Bq3<џ{0tg_ ϱoerMapG㒊~DG=[f D -aD O#YܙDޱ 4+V1FL"MO,}̧T`FK7E_h n'To k&18n )JvdVn|42t;Dɀ6G(C%7J;Ž%Go*OdxSTҐ4~rp&vL{~Euq2I>fNG&-!(>m4Il-SmmԤIL} RD#*b0DawٕeY@X׽w{sY68ٟgp޽=tGգdxFsr\o=dc;eW}1wdA/t8 &''nG;( %: \3,hhO#ɬVH[nr>>C!T=jn)jz[qdŪw 5aj."Z'$J#v^jyo$ՄٛfϟTfbUj% g:!052שׁ>ORȒis<DD$"1^C`q-E#Ԏ)w&Tu것FrT,84_߂n&h{M&Ugec[=^YMdI4;_b5ܐҍ׋',I*|g5_%Q_rcS#=juhˤ7ɽP{+輟 1q ť'F0_zeo5u pO `DaڪGU ]ߕ՟0aiXx|Si髻 *tv ߯mCǿ*\6Ok38Q2J޹vrz 5y2Q3{_tx>/䧚Ir\_)ß=Ms6=c߲ d, ?ڲ ቝsߪY$R|HD\'v0|1~Vz -Kn H!b|tM.^(~qH:Bq839 jC00KCXkq w8K}}2I]~M:9NA3 '$3Ke"WǰƊ>_-8Fs Tdn}lStss^ /3RH}N-Rw;ކ%Z߭Ey楢o`#fxlROTtCf`ttVxcecؙʡS(9$LM6c Yq*ѝ1vT )g:%vj5d ?D6om^9*?|+-6JޟuQ rg/R&aj6Q'5r&Y2dAF+USA{h(I -U1Pp3|ߕ/-~W%F|#h`^?Ɂ@1..c( -tG[1 ;91]G}3Ƃ^u4((0,86g/eI#ץ|jia-!exH԰whch yx ᅶokU,E[U$tn)$' - -3|ŁTG(Ӟئ)>/\!;ZX*FЈK͚+/.a,OK{O wUp|Zn CQi %fp)0[9 O7(/{+!cxї'cL*Trݼj]Uls 山exxi(@L>maK{LF-^^y=V|>${hk-{IPY_CMUҌ="fx,TxOe,ħfJRI"KtLf޿(1Gz[V,q -r&}2 /}E8DeўKvևAvH|ZO 7vdu@dvw؂a4 uFGl(QQ4,76Zn*L'ÃKC͂f -pIݹ\q !ow2!@G$GuɤvtfM'#`F+>[I&NRM['3NM5:7<Dh}DEPѠ"\`]sz/ Hyf{;WbE0q=ËÓ5[Ic8HӨc5A>-U1!6KFdw-S} tڨF+nīU}fjNѥUK%mwcxo^bxHFD<,!U,^`xFؼdxPXw 8FDe,q*/6!&0B^0HKF{W*^GK7|sNYc$0T&)w9H(O=0:6rRP'^ XĦ E~[MN -o4 -Kk4}EcT^lpV?> Ya(`u^ 2xp~~Ku|(씱?i^\~v,}x% E(T}o+h%ew,|Cn:(`7uYjjF$(HaIF92 fw&jtgݰOASS3d5KE -q UG`'gQYĥze?t#Ybm\~]#/c /JARqFzJJ13 $"M){.xp#DXdxwNՋ'YuzzX՛g𐤼80Cmmuv}(j42BxI ¼>|Ⱎ#w-NK-0vd a<$b؄u1upa{W5g]^x=GGKA;YiVOFYEZkæwh$9cяlQ -R'zoAФՏyIQ} e 9nS @E޵y{F:hN#2`x \KHҥ(#^Q1::hDJx|~nSdx*7o}/9M0~*!r\PDuם{mE7~Ufmih`^G\<L dROv6COJ4yEo6KݜXjs/);bPWT:iL4٢qO>UZ K+W瞿T/RgKO(d5oq-v݆q{p u>?J%Ûg%qU8s];6~y -b[g2j sS4+ēQhu ̓8-`W,,uzKVex<9pqmnm9zw=!vw{\ކƮ;Ϊ Y#M' d1;ĕ i2 c}~ -jq" Pr.FDO)3D,meN/<~^>NPi0^eO?Ai HS -Av}퐓@M/ -Zv>(Fy[=l'v[-WQ'#9z)ǾFO72+H29WcL8.LqڴtLڙP݅jIzLƉZؤm:I@bP1JURE"r, ,z^{ -uþ}C{* @,zzWj̆+;yz fM:YP<ë(gBa8Ә+aü:׆% -v{Mqcx"Q x9%"y4k -m1fx)J6'.RܔY6ATJk ?sN[b2ǸкͣH*i˗h_uvN+ف(x)ILJ9A2SǤ.MlIٍ/zg4uη4x^TT\aʅſjet0Gg5ypZMj\:O P l9U g -l[, ~f{#$?C`cZUх!"`glNg`QU]7 *ͥ:>=l -!/7cxL>c rt82 ;p]gMpNn:{9XjG -a>OU%ií6",pj.ܧVNÐ)׮\[u֏|8Ľl<&-gZPq7 c6-/%4(;aE&T<37ԌS2}ەQ)\W|Z6XqGau^i'I?oBbAkt0 >Vpd%{p, 2!Q ?ڸ9_i 5#xW9{4St.H <=ZЂ&vzJ'ez!:n" IL!sLi[e@s1|<PɹV +,9oFoHPRjeVVؿG*s96y} ã\F)!yFh1^7/3cSÇW\DMA$uY5lVN&0MZe<>\|>'D -hm7yPnDȍ;`h#n@-Nꁻ=LReY-፦ٖN25H~p~R>A\MC_tIAo+Zq:\ÞG>7zt2?"a8i7n+NX5B!ex PXj!ÕzJD0ƴeJWQFP"'i 9^m)dª_3wiɃԪ֤]l 髬j$_J#kjtrǃ>H<,=Ā`Xxc!>.># _2FPmѿp,*clxӢS68wD@RPfniMXaK8hBx;/(nYɡ}z~:T c𗮌G뫿0qZ-hA2`0KPn*BQG!F3I#x'N[$N2w~o _9-;9* - y sN?N3!q5,g=Ԓvfy -%M軹ydu&٦' U.vuMZaCqS~fo{y]G(}TC2y{xD#|[o9? RJ*1nFlJ*ip-IDw/#wuãq"Wo8x>sl0_/K{zd ?+65$-hA{ :r,6.ihV1գ}Nγ8ӡT0W5Yio_ZnhhD{gߢbo{53|JKЂ )?i{~^dh4O4>AxĮc3[4wwxOn=k^L߂w,֩Gm.%1Y&sk|LԈC&WUk;݀Uu׼#gx .8l+6rm:xD41Zl@DŽGBu) :J@]PQXjll@(v@blV#4!P`z歷wJ3fuV-dNНQ=׹;Z}؛Uhb+h%Sp>3.BvrrzwW7HuڽhYD(|&)ݘuNav;= sVa{1<*|2 -3poK0 e$5_Ĝ:c:AhGjYxkחC&g1m&{~Z2bl˖}#zYaE3 H  - U ߃(.^q~m. IHBIЕ2CPY3/:>fk՞`R@O|"⋐[_\~R.~ts]kzZ_eZ @3aUO'-Z^ P#BTR!\u)YɸϚOl%0m͊g&ei\ -V85 x`DVϬFqHhCf?ڣ?K)%-3ٌγiYZy]O ݝNj[9,lS[d9Kn+s-ɫq -ThL@:;oz[!mۈ820Gf$i@7?< cg7P SsH>ioEX')7m*Έfޒت $ϐfZ*=,I! IwBd[p*pL.hKfp>wdKuOCiSASE5:ʀMCw I|V6<n#ޑU]y`WX˴vJ{n sד|BhYI2ycυ2*Zotѹh wŶ_M\w7iә&63d -6 sZJH hK!LH2! %`@h0e\032PrQl|H)dIvキf"x&j~}?o|0v2Rg}_ ᱘bBpȫhׅ375v<9Uyq̏gv8>[C׿~txF4-;$i _VQ}^7 NV7Z2yfr]5ldfxG=uN\+]$Ā$f"_A Gץ++OimUwuGXNHad@ǀ\=?G= -1i"L#4 bAVD!"^ڞ^[-* iPQ%MP- @MjUg[BY'*߮\x X|EEx⨱7VX{ X:FE1 i(m;ac.|n!e|^gAcbB&{(yշbQnD;,F8 9ր~ -d͟- Ƒ,XdmڜRc -/,6@P6-4]G01Qѓ >n0 D$SP@ "#Q# ?Qz޵՚&3u@m`)1 qюP[exFx[_Zxҡ6M&KMio3R0zjg:DGjo^PA86D)K/;1*c R1mNǎ#p5+WvńmV - h7iCgD=#=}x*X"Sc4̖ѧw缴% fd2:,r-POH%R5"v3W&6l:$J+a\ra, +<, W'ب7JKŒ=mkΫ`8W,ՐJp\eĜDs9ZH7YjM?T$};+)U.(:N9uV.9Op[@"o,),E,^xvis%: uE03< Bp!DM[{%MetWHpibnl-UNA"L|zɢg&: zv|;c]ry̪J鈥]?!}Dϖis'~D4çGz|ebuIy^C8Ilu!.ikF9UGS[}@HzJϲgTu*%JPt ;CHgT(& q'[ś=Py G7}7{_p^U RVAQ|T')@\fCo+{ -wt qʴjT)4-~k("YQ6p3ўSP抽@{O/BB+o~Sԙ0''!&ySuO뽽!$%Iuݖ̩MT܃1w5n>;<+Lk}kU N #(=ֹr4?ɰ -ȣli]zҜZx`*7NZ[Oޝ:YPp #zZq`5432+x\ރ[1<] ӚE(|z  n8-BbP;y d9 =>9CA:Xr,s ބxJ,}Xzvu)w -V%~:U/!ѩ8lLMdgLz~P3q2I3|zWi@AdjG2w$2e!r 6ha*Ri+_~{^D!G0|< -/ސ#Q --)9. -I0IRI=qw"4 Cl,؜QwJg#;17۞s9J> ľC3N|&J 3EpMǀyr̚?s >Q䀑r߹=\|W;5-?SI%Sc~PbJ+D2VB9f3WdNE|ϳOUᣳ M0 qyaݜ g߄]tOkYzx -:r3y{BSWȷl/.qb  /v//+` OcdGO !?׎,5uD"ua#RLta!ܸ\6!Yw,:ʱ-mqQF@(6a`o`Ca$'4pŕ -&dH$Ni~}z#@8i2-i?2mg$P Y`QJ@CȐf(9M i!n,q 816ƶd C}v'`s4t:Zv~o߾BDf̞UyU  !LaM ; ̋k;:9R]%Չ3 cQ52|JF%Zo -&0OɄBhp{6W֬f$fY`֧ -;( -ȷ20|vGkZW/y%E4W1o^+8ЋU+c9fDɦ=)lΤq1Hю]u !U5(((Qx%鸺 4-%H%ݬ!4A~"X?f^v|^OP T9Dɶ?2%]K8ɰJLAPG$;sk56: 2=:]=9EOA: 93؄Ԕ;?Xz\ӝA@b2_ dL=ަ殼Wy_\bn剉ib0i0i1sa@axawѧU"Sl?!~%QNV>!1Xxy# 8mv DAJ>z:kڙ} !*\9t=?߽cޣbx^@yv7­"k~e}CWw| ?_Ux'M͠O+Oc -PkKxn)4=2|V?<óc -Kހ (ήH'; - @}CqI3cx}ehhBxd8mrO\{/+V$vS/!?suzk:K͈T5 M|5w|0+>(ʮX# L9D]3)l6x{Y:.'EsKK!; 1`+e{Q'x2߲y&#׋ᅭyfՇG-N|6= չfѱG, g qe~aG2.1ם>H7l-OuΕ:T:ao*:Y3~EK [{|^1oyXmV6I)Q5FM:y(P;s -<.{ Ii)-Ӊ"> Z9LJA iםJ}e`%\l:g'uZ]ta -PV I¬NYb]ʻ% K.~~ޮ *V"ƲDad9[,3]+1Ţ([~G:kՐB (y`v0Yez ` /[3_6~C ~0e<^V5 F5ڼD<5L[% ]tpb0[bYc'-%8i{bealq~-o!ƾeXҧ5#S02Fyd;\+np"| $*$R@ET\%/Pk]RNc[{ u˥$˳#h[[bX[9-?-/(B`)V4imo|sU YL!V@&La (4Y30cF0 7,{T)nm_z6A1VTjТ}ԡmЄ`55 Yb-uI( eȐ@B?y4 Zrx}p>K}HWLH=yɼjSPɉ!6LHNu*L>tyHe:Zج ř\)Sߪ8%$jpFA֏o9۫p݃V[ rfT46<.E>y&l{Tw_c} ucԆtg2y#^Us|ȘH!Tt,i)HMoAJ=spdsER=<ե]P%^}e+^Y}mQL[]P8퐐;6s4tCW̬Ĥ IW(a:@H&ၕ?47}pS֌c:cB HDx!/ԗ_l51-,q 4ށ2NdKU5X(7zةK q [:\CzG8B7*@23QN,97IpC@04B A$vqR)爧:"DMcɞօGkܾt+~;Ctgn{C?x>bdM-xYm>He@n9 E/sٜՑfUwQH!X^ ofS>YPZU/Mm.;bvv -PGW./ C1^3g7rB9gN7ו Mc6K<o^ޤ i+5b=A| (YYl/TgWmV?>ֿ"8 -Pk_S 9`|?3K#O~FȎb{Q+\?++p0˒B[xB+yM7>D XLu`N&WLY8Bo 4s۟Nrt{z\HY - QDL!W<|ҰDм[\*w:Y݉hLh1=Yษo@w -=EdQzu5:ibTd__cO!ny2|RfP<ǎPt&jˢ^6-٩Aو'JO(ky|{PoEЏw”7֞.jwq}dxK'D.cͅKw)ὤe0p0vڲ5od ˳ |06;_5yNTt19὜$T[jY!2Nh^Xh ioz)0|aFaai+:&Bǫ\4,"%әУ==ΚĎ@wŅ[??pcž'k`ߡ#y`@nȯxX =7{Zu'л4סF:c`+.b%irCN(4 ێ|lJ YˆIkm{pWdVe &"}LNa IٲwٿTTB <R~c'±&K* ]x]'3TO3^WⶢO1vC2^?γ 4jk:w9rl(ޣ3Lg%\VgF鬹5_\n{l]q dj͞_G@}rmj ڛM&:pQ@z:Lڷf}ƞuȵIr nx/k%CHI$BimBvLL)Mi!% -l`]0|c'x,[MB@91ph4t ApXC-ۄVpnh\?md%잻uB GҊi(u=.\H?hu1 5-$e IxP0<^lʑеp'5LxPv.1)7C((xA/ݶ{`:% YБ^>*Es-o1eƺ-kzvm:@6rIxLu\F%hzӧWY\6H$@ۼ>G kLVs1ٸ'f t5*9SJ =Z׶~s1{*]^ o0K@JYNJrB `(#GppZ -PJ -@(%IV4oC>,ARR@]F lEF]@艮o8Lj#XLQx*nB}z/P5g[wj -4|E{7F e*%]>r-8*jXqmD(,_|ՇWcqAέzg6`օ|N=MtL Ab7b;A``i3]T_]7c1AТ2%LeIѫ^婳¢c49'J ghGk5ߗQųsV:ף= -+zx<}7RY2gK ,rs<%7J-VɣBj%R|_6_$$I,w;0Ix28~Kw j X-r0;f;2XMV_?*\uiC % (D6lj뷑\kti7`'8lf_`Ӷ1 -Qѫ~38wb<Іe\(DVDBӬ7+ o3%#+@yF%`>9 H20rq1Jzkoԗ̩pˊd:g֔|$ߏO_; n~RT =]dFDx"uv]^9 H ٝfFd`F7?>ktu ēȂ">gѢ15xg_^%O'hz<68bZ/*I#UjhDUF@ۄEJڦ@DKRBmXccl PpL񹻳=3olq徯x~ϯj.LeSC7E%] 7]诬VQ6̨&muKPZIgb  P})xe]#WR҃<usՙ߬ytyU}X|&q%]S9 @*bD°uȇ#26cqOIo<*YZz ޢL -ږҦ~wIwaoA#z?5BJ!R$x.>wH 흞 -c~aCݫW\o ;v7YZ7_jz|DD:-Ӊ>5*@NWuut,+Ƞ]d/nM7XۊE/s=Ԟǟ4eUk*rkO\NwbI\VЃ$:X%cH(zH< * da ~N @\^0oW,R26t '[]ז[4\S䥢=?oѾ'=.;g,_]?[R -I. B h5#0#0[0]`JSa\6{~q͆K_xe\QUk6}lׇMu`@2P3 RUMgylbq@Q|vq}syw_M>h~Ute+UX/:skBP4%+8$y'l)a2'IR66+H&QEp@*, 2jhRqanb-Jy^bŞo宅 =1H) ӤrPYsg\>)%^,>YfsZ㾃җ -S ![.P-t_&m ecˋ4O_ _X*a.AeKOC^8acfO9t}XKVX -֨˟AJ_TT~@V1}`Wv׵vNOgo!1X#-kENMP7(+`y1n~tS2x*g ƾM8l([^Ȱ -lbd vAxݝ]^ȱ 7:<%`gKH4 CC:q$PYex$\,dRxv)g 0Fc HgMIž9On%mY5Կl-ۥPo?<Co 0Ri=44uoO2`vPzs7Jsh?I4nhu M[jӠt˰O5 xe)ǠzD~Ӎ?~Xcg\ɋeٓŽ\tO?u?TJ㋅x*rt!ߖ[h].K -"7e(WBJ*Ќ:%&,U(*DZwJxUCk_d8 ;ː_ 41yM=)Oѓ;2c6Uf4E lhx;p`+pYTw! ) b5)YesdEroZ QYs013a.4FI6@p'?cϜ2=íp3YT.umeSd8s:)$4畊.J˄o6 6ӂ; be+=Y`H*׌ -9r sZpfBKUXs0`R*d Kִve^qH -6Qm\<,5Jk9P1)%j] ,Ѳh#/2:v|s3ܝϪoCI[b+ G;3jZS3|`,vk7n 0Aqۈ`q;NwM ; -p#ߗ:ԡѝ2ȟ7OudTFHeWf& JBBB%@TPoOz3VGB~seb'<ϗz%ܲG '7xs7ׅ{3dh\T1}ѮYfyyT;MF -|Z`+t:Y#|I k<pxB h9s_ۛa@ݫk>&|M>T8q,[|dS8<(ß[rO x/!0MH$9y/m7GsCEfT}.(p~^;ҿ929k_(6!Ku Oot{߼y`/`vr2S^q|gX\YzTZ:KhJE1cIqO;3O9ݑE˩x֥jo >6`t_Y77I׷0O|°Os?5^ymZq2￟wOԭۓKڒ_a.i~uWƚf~5Sϟm?*'Ki;W7eMxae>42}v#aXW`D:px%;7k0J- /˯֜moRNB 9;D b' BXa՚ίoxp&[Gߪ#j -zu+ +PPǡC;?gOg*'**Gӕdg.h4jk&D7N-usxJҕ윈Z&uY0݉2.O6Es)6PBR"d8ʅ f\|=(i'o][w$?jcxHcTQUÝX<*垺Me"gvm_/NdOe{OGt(S6RոHQ+Ҏ$Fp$t߫~j6C=2P|={7$"Q6Wڼ5fFK*jH}Y+[5 jPgį}JB!dm2U!E8D{__TGE-ړ 噶%^!< A'7Yk$dSћ_Ϣ/yj?._L)^ o:tR;m yl;yXu&W{_nKTy#K%#ƹsgOdVvXؗX</ޖx(L\EQ!6LW :5meaF}r[{cS]=Q&.,HxhҨj -bwuw &:3J}b U8hׇ -w"ͭX%~uq%NB)U RiEZcUtYUn $v `*5*;b;&Q4uCIlsc=7=?J[ljỏW<6@Ɠ_{Lw0/%=6d] t ey u3S -} o$0̾tu0 πSٶD*tUfwMH_?VڟZ|e^ u28Ukf !sׯcO* wMUIt r~x}nB9Njj$:H\]$cg#g?(]y@ -~+ZvC o=ֺ(uSՈpϒ Q;2p~y+auШAfWniGT~è#=:  v,qI<囀^G`m,o:ڋeЭgxWWpap7r<tBGeIHj]G}ɼ?յL49Z݂h>p?Z6LHs__L㩉ZX2ןmmm dYd7|7bOsώ[#rmD&,FUy39=۬u#B['|ˠHgKRLtSU a38A!ZE1@5eh13C1@ nUEM\Uzu5ɛz0 F\S 4z%sY7`{=`l[lݟFYsbI$ \jHkr-_(vɜ- kTa"F $(RaĠٛP4`l*AS8b0lI Z;*VڳA&0Z`#+2*) W'rva= i0q' ^OV -.3 -E2`%;K`%ȴYE^08[r"7/0S__5S}fm啯dr 9kxd!s*@@z8_{4Z= %Qآ 2b',\fzDoS‡s^䀖x2Lg\*`<%(ta¨r6 3fъTShvXeH:׎^/ Fkش -z> Vn_8]kqoq/fseẉ _`F|c8_K0 NT1N6,4ӿ4῱U3⮾X+RѲOϨ_8(aN_^C> !ucH?35; V %~v5l;+Y%[Fg~SI3\ƈLt fx7?7½z%,ݴ=9"D KKOKdgGsyZ%KJVQbqVWQb!~73{'t`p e3 olP6^Iyp%##J1PW8k Ofokج!{$?)gA7"=ы4 3{)2\d>_1պC}fݲKXG2 ^au\ڭK.Wc^6׶.bTn)Gsj$n"P]mC E@aO\% -[;,OhC5!&i`) K9R=MX=C)`#U\ RY\ $MH!T -J䶢M+UmMժ͗AmUmS5J&U ( `c .bvvgٝ8J@Ǣy4^<HYXrἾqȅôn9蘔}S Gw{_8\* Ⱥy*_~׽Y`xb, `{'˻37#bH樛sB%Fa|k9?0W5ghS(fU -E#éu`Kj&yri Jv4qk_){an0i<aߵfLE\q8ZҡVqO93$(zbg"I@&_-JHHsys49kv]vKpX2bӋj ZDmó7+\MkmřfɞgN{/}HyyrI_~_(ȭh 1Q@[=/N*z5l]S-0^<fU k 9,Ǭ.v;,12I @/m&5o$5kT_#H`qMlCsjW/,%FPާϚYwTx;ǂk\Kdjx!Dpsb-da~p-r Qʣn.06:~.~L9iaI_S2V>$aE >Xv@I%Fw!KA΅/ Tu#۶H1"4 HA-Ҷ TM%*yeSHҨ0[\qw*lyuz/?Yn^Rʎw~xp%ύxޮj0m {>Mu0jSQU{(F ge0ZntPaOt"iYq#8v}ZZVAJ̞ ]KcEAcM^& CO=G¥ռgWɿI(Hj09'H`ibm1Q o_<f![@=KIڤOm+/;\uT\{1&|;}ʕp[Ou^dՅv5ʝdJASH<5;/&Jtps޺:2e}Hf_]"щ]nd3g/-5kE%̰:g-9ykbkE:o -yT?nҼxbt3;gBS=puBX1`lhDգJ)vM._V-4[wK6ԊUU/w</ _Oft/6&?1wSFQ@[(DA#Dp8QL6ˉ0? /3P(4ym8NҬn]Sɯ@xQГ!ß& 8w# ?9?1Eo\JA~Q~8}Q[Wԇ[A<;͂V%,oj󢝱W׵SaFq 땲0A~}k1}Cqݡ[°7dq!e [[BE6(+dٙ&W2%A=j~{oRltn;1ys8Y̆%AqRl'R`I~G3)97>f'wC(qӟ y<JH.}׷ᔚ4prz%s][x>pNs,DW jqnAɬ.ƌĽ _?:4^˚Qsߒ&M1H𝽨 qs^Mf,oBCr>/W ohFi$i'HO)4Ghc* M|1ļLVw\BL/aIN= =#LĨ8ƶ pOw)iV^ -˪Vq4NAu+Au`p8oR1]^(\\ЬN'OwE:EGb.YX"a~t22B#.\ycHf\\8u!B p_PTvc'jI75.A8j ~Fq]qk;N0)v ڤ@mM&Q6R+5RjQH[TR4T)U ("@  n~bξwggwfsYU=={ιsߝ:ogND27s,H\(٢ ;M ]?:Hgdqn&ḲDh}orHHDoLRC7_U5q."f#\50)>b&$N^ss0<WlUe&5#.OF]aXkSS[EyCX<Wu FL rK4cQcݔ1biC -7APႧɑ*:@5=|jXy8Y%kQ3qRz{"C vn,$EOI*c&! •n~8+2>6)GǸ5=}2؂QTm WQr2{7Zl E ([6[[y/d%+YJnv7?#s~~{@d>OS`zCGL1m0oR͏|'PL{f>,.D(UݼpkJF|־vHtsF&D$d 哑Jمȵ {=+/:#Sh۶kIH K=q('3y!X^EK7 `@ 5Bk7Ĝ;/0$s{cdeAO _tGdc>a G`2MK9:Uѡy1$?|9䇧C1y6 ` jk*M/mv-0 8=,hP q0`h%Dޟ%U:]Ԍi@TL(HByp˸VcD8|phXzτgB3s &k"P⫽՝|6G:Pۨ~:bxct:nIAԆ#}"p龉>%dꯓls#(x,r<%t&Dp:fɜ -(@7xĎ9`% ˁ|/B5 CTmfRXVtS18T.$o)QumA>['M<(I[) 0чRĢ; WS+yݰ濛ܤTcmۃ!d" 1o|c쿞,_tU8 Y5 ql; m*$p;FR;wS  ؏b=HZG*AѰG{AHVh'b8-|} c$HjhwD@ʂT 1aLV/Z+gc^' ^7镝EW>Jzagx=]OSItMjXFo> ~Fۯ෍&$fӹ/pbBNvaVd%+'ր%uY;F`0'U7 <\T]k[g~>rIGW?}b7E$( `Řc"8TG7]cp%i=F~".y^ux mc] 0#?C.j4Gi)@ְ~O鴸%:kj[y0^8FA h1k &%QP#ŎrZ׎njZnЕ(y3q)$CRۙCziK`keN<ɮ PQx4Uf˥LrMV -o^rrXzdJCθlp]E -%4Ǖs -OħKRKF7i鎍pȶTӄs -iEH:\;jmZXm߶\4W5\rJ3?"i>|Ñ$i6I%3مMm⹤n=gxMe|4 ůD銰"V$KSl^Ŀ:\fxJg- -3DP)^%| $nɃrUZ폨:p+9hH[4'BejKfѤ=/Tkإ[{wGV-}IZV|4'F`zZѠYEy(AU?:,QÛ\ C>G|DȚ-$ȭGc[WEȌj^?=٧b~nE[ il%Ϧ5(ݸ/v@u? OxŰspO ?2/=:X$2]ڟ_M/bknnߜZa=zw$b]©VQ:+P_|x/ /n(7>W:9*s1@3tP;vՎs@7ll.g`] H:`$g{0p{0-#y;#9!Bty^xy AџU }X1ݵm'3Тoo6P6YԂ_V -&)+Z5& ttNFU=8;v1mJULl6rD]ZHv[,93kEp6I_~vDyT2/MEdi}-i¾NO23QYb \Jce]v#E޿g"UJ_7ar6U6p6>J⴩O J(Z)s/OeW G/umMn` ⋕~a\f"nE>W`Ɗ ˽1k}N[p\Wy6V4괞ˀ+V42:#8u902dR>i<cE/1ˏJ*JxW"}p܈ۨ:hHg / /np ҽO]OVG/J*}і9@~BȚLj%`]~u'DhJD?TvD:Ħ^Mg "^|3u }Tbq H|d]j/ %gӆMpm1ZCQ>_X>;\Eu @юd-jMu, *3} 1lvp::v(JբUtZ}$7o @ 0<@ $!!@޻w#ݽ=svV:so9|ӹ|[Y/[ex `8O"Nѳ#T7e'"Dz8) 50 |G.9" ݼ;ka|,-=Q?Nd z#z8rZYp {J^ÆuF\A'aeMW=,;V=PhtVuc nplSfD3y!qn6CSvFB: o*MH-XA[R $j8 @TISHÆo -] cуgs[z 6>/~9)Awo6 8L޵CPFBqc`usPc:I)p;smg0??%Ԍ 5n(I..>W޸F8p;>J_&PR+.'VSwC1x yjW(|6J%1ߟR4 :.HdyHLatTZ.,=R*ʵg z3c&)ٸs4Ւ*IgyQYRr43<>NFdݗ\V+8DZX&/[f.PD1 *W7=)))Tr͡ 762ؽU~2]X.=*ӕ3ccnkM1DG (U 0hZǀt,Wſ3'U֛*$x [ޅ5=S?OD7 -gҲ;*D.WuH;~-fI- rB5݉,«tXp BHa];=|~:HjK$WZ(pwrݘ vsm\!z[]Wrc2}| !#g\@F&`z35 o*LwID)U-N:e$)gTq80HcQ -W U zxѽ mWdI(#p26,ykPJh(ix$އ"7ng4P>!D FEsd g:@EnZ7oPHDx~6OcwÑ{+- -][]ǿ{ v .Zgx o -Ù@ߺ#FPƙ^ozKHcίA9IhU u99'Y*oj `CŞD1e8S J:"s+1cgnE5> '3@xlx03"jG0dꅓ|cTTh8NE#r^Ty}G. 34ͨhiIr..>5|6uYET$7Xɩ[ׁ]C<˒Fmg͠խfxH06w*2bqR;#K(0&O@4 Ҫ6EyTEilUJE) 0c]mvgvvgv朙~63XKDa9BcL{59-єȌٯ_?Ǹ6óyMd ϟαS^S%p=1-uHUcx^׎1~s@] -KZ= C,9zI[ K玧60gi t%*uay|4o F6 C14B-B 6~$ex^Xudx k₲x }-ZL.C^[v|TQF\H(ӛp&Wu /:# xw7M*H<;hXә2ç햗$oM>z(}50@ˀ:5US)װO7rT|e#{Ɓ!Et`Ld NZ]Zk{rwsy-ja?5wgGS10UD?k$3//z65bfyaS&YbI)u(.9 cKM3s> 0)CxqCZ@ȯ˵ -p q%F/-fRtMRax?DA=`xrw|^ӕ[qucrQʫvd&uxei<'? ho3ٛԯ 0Cwq6F 52R"`9n\UQʮ N&J KܐX)kѨn}b([d $t.2)^%%e\,x=B -;+0x$o3\=q]!0KOM˟N5QɐbXִn=:m[3;ic3 ܴƥ7$AM -{5rL2K2H1(l)㲅;ƋORt'zZA.aƗ3kKpvԖa @lW&,IøI2&P1/4Pe'Ro 0m -<)#.gO7+DNr'LX]Fß }Y~5Ó} -H|o]`x~9 NL,K(J@nO] /bkdudBLyDx(gmka4ݠ~Hj),!>bh4aX >򓇓]I{V(OnM|KAZ ]@&Vt/,ZB3Đs/hu(+5;ek1h:77Aor!F%(=}8?ߙ0 p1Dj(=},O@̮Tף=KۇZhip*bPvH>{vS9Y67_3R*J۔q;;٪b﹡ Tҩs*nlB4gǪ AhtTӰ+ݹgru?N ؆)[0ʀouC!uǘS-Sd 3G=gr{zhtSl8H6FR?Q8;W: @&?f UJKSAN6L_FΤ > 3e fp@YϝHT+$.ruLҠajis{uKDkŖrϴ#Gó*x>T3Ios/u+#tČl>1M7Ju i8շ)8hPi^S^ή8}+s? @ dlf |9knfَTGԫpɣSw:8ݑub0n {3;3k_ rT]rkT<*&畗{?ʬ|+Z╬E[ϢhB -B 4zv"pƸ.>3sL,5Ddc?Q )1!;! cYX -kAxȒe+93XYq V%4WNu`b8KR2Â]'|r1B吷LT[aSq@9`ccA֔b_ΘPMh^7E03"ʋ,TE[Hb]rV\1 )e!lnOl -.G"kYSˆ˺ -Nc)AQ R* 5.f^Zh tļ iA p+zH!f_GVYh˿@$7_}m rlȷ;0yoj2|*JB*3Xync^~-毵KPfE*C+_B|Ymt9}ٴn[P9LC|* 4~*֙J?-Wkj6fXrA|jLJ+3}))řnܡSthwg^PM?!<]]=m/rS-h9&%SIRL]7w)̯n1?^Y]OQJVS|"lŖ8cƜ2~xї+10ږE퐴88N,O큹5l=|6b| }]W$Um7żmk*4%-g3:w7>wv?͝t4kƝO\nQdNcUsL-{Ӛ]T.:6][&%Ϧn,YN4ܝe^3" t˺Ui,!׭u2l߯'9,ecơ;}Sw"Wsſw]~+w^~n!Qp >Ƈ!u{.=Ow}s/O޽0,y -o_3x֯/+;VĸNiZ%|O•q΅+/\_|}xxZB<1ZpÃ$'q[ -iN*CkhR<Yײ{jAaJ5؟5,W1ObكA_#P`# -endstream -endobj -25 0 obj -<< -/Filter /FlateDecode -/Length 4851 ->> -stream -HW]oH|ׯAO!'NbgY/Mۺ,EekR"MZⰺkjkHܰd*{r/"ɳfKgV \Zv#ύh:+K/U}]i9׃ߎNHp0 -˔nauq0 -%\` -8x`z1zZɷ8/M~K?πPt$EEA`gJ*:s6@B%P"F(`ݗ<3SSt~=R6bEϔyą7A0k6ܫ}r& ԁSJj+Y$uzEvA$^c -Yx#ܦw2eےJ6( N\N7*b':_=U8_,*g_ Uj͖P<Px\,8+~ݼ#yg=*sܽ28MߓEpSqH;.f~ʗ)Kҿ=1ͳV)0).ҶY5Poѧ?4(3!ůe暯㦂V' Ue^1#3y̓$RH>*Z7q@` JKYI)2v2aω4xd`WafaҖ2}hwoPtՓË4n\hR=nEW[L jOO˥K68;aLV+N]=4OQcYcqEO{Bw85p^}1q;@җ@FHD$z0gD5rܶv9s&rԨL [h7*v?yqMZLXGd˄TdF\ YnFva`^I-Nhhm 6M/vp^r<' *;OdǪZPI -Y+ז'g2Kfj*\U.ZGgUXIUWSv?MIT;ZaM)& %5(Y W4{ >~,bхB+3.QT.#,cC1{R}PJP -z(nb)4~ ƀST},7AAxVHYqT1)YE+HuPszMQhԺvWR%4-ݑe[ ( Z SLfEKCwQbmF5Y|m]}zLVM'LV&kC<4M?  - 6-NpH˻H]?'74ƀ=G%i&l}r:6pu)EC>XEʃ -( ό%*,^Uh]jm9u -*U ,u-шV -V2- ۑQ,qha؎0jϵ4]Ķ`p:Ox>FۘǏV9iΘ jeiõm\5AkgBHNxiU:]֡uV1#*Pzt]U5'}7[Q9XS.zIBðYQiz5`֩άE0Wr& iJ2}VM1ySE&PTYK.IRQTVwzRtG)[z%kXzVWV7ώC$n_׻Ҽ2&zS%&wNod 1mfMOx^OCz3`yبh1z[4nsퟞvT`ޏ -LEJBy)o~F\hc)UT/1wlPK -C~k$)J F8q$)R]ؑ`O$!!Ee!Rh|3.фU]& 2 VnV\]U];V!:+~f]ɠ|wGA#ry|*b_xwaq@䟦 2XO/q(Q+}wiz8;.7I?Ir # o㛩:`e2{UVdZ2Zj<%iwS1UǓIQ -Lä;Mc4!W7-2d!\&dpaIȔPD~r.؎Hy̷.܎o> ?fyxܗR~;@l?י B3q[9TCɉ&̜~kl_Y@ Z}yNNp1(BVuq' ɳ C|$,4*D~)HAFJ1Bꒋ ]bK.gJUũblA;LƁ[9,_6No^~?7/YŤ68rŶHFՙwiKӼiE#ܻأm?0@3^[T1(L`yV5q'+p *ȥIMMπO;WPuX;$+FIӰ%cZp= vBX0d2ǢqŲ sOk&uPl0[oUb/ǩ'oBHho:.4)5*\dE =X,QWdpUOBQAVdd*dG.RU$*KT$긏B@h6l -K6v -l\PhӒ1Xlhh克nuiF$)VD׳.uі -ϛa|ux}뷯65|'oitlK[A {:idS8>9Km\бJw9ֆv -ƀ1\OՁ`2d`4OYax2H1JA ;bIH -F1| D%c]Y&B[s%>F]T,\-g]Z*6/W.sc\1쿊OqLp)Y"Ȋ\֔,e)Xk=)Y<fMTUJ&cJd%b4%OQ(*y2H)+(HJ4J -F2#{Z0Kh|1zsl,3ػ~.>h^ m)t`Kz{,"5E wi(t6.dbq`VM -2}dK̀> RRPX}gi|dH1&RXW&SΘtL. ]%;кcIBdKvuxC͋5Mq.RTfb5ɘJV.tXk?\,9Xsq7R)r shbr -R#gE19+REOQLR@&P a猵 k8gc=]a% [k׻-{`uiU)%oe]fd51"><<>cywu5_땸 -endstream -endobj -26 0 obj -<< -/Filter /FlateDecode -/Length 4589 ->> -stream -HWSF}_ֲwoMBtTi'}dKH,mZ{Ϟ=`x3l7o&;6:Hb#=Z/b_ %3\+Ō.-^竑Fhrt93K/U}^Yf׃ӣ)o#62emX~7|tpuUb\ݎB=Z^mY}Wf]~O߮މ$eeA`gJ*:s6@Jy#C5dTEwG`)Y);Hﳇ-26t)I nFa:/mWaҏWL!mmTKj+Y"&͒A$^cYxCܦΘ_n嶢Ң yÃ[iPlUp`oV_ߖ Uj͎P<Px^yMޔnߑՁھ3o(Kܽ:/y9KdUlR}qD;.f ~}fϗ7eϿ(R&3%f}WڶF?e&ա\uTjɛ̋CfDp:ezD -H0'B^C&w[jɽ'6Er2DƦ3HG6] Ap]prVBX]Bvbb׍ 4׶&H<{(>^,_klՁt!E6~Wl:E<қEi}[l*Dt=K4O[vEYU+~[]WK7u:Qobyv/řn8]nw\wwy>E -?wʎ[,xz![(tΈ:91UV2AU"L.fɣ'9 # d5ЌdWvX <3c F-`)X(Am&yTWLԋ4%UGS8hF8br&%PZXZxk1SLpu0PARp O}'|$ ]>/( I@/ ӕ[J%VTz -a͋"alu98pƔ`tSfQ18{ xV @zJZ@ HmS}x:av9EC2y[Τ۴>1BVH[ q^:jG| ygD/-ЭR2L-e|Sjz -, kgm0z -ޮL*P`LL$v(56lz;Ha`ieHڀq Y`*pEke/cj%^mz5HOWڈow謟g_tL1^뜝[3Ì*65xMM:Mg.g XJaj㜠梤#+(XCѪrs@u\s[X:Z#.҈ O -z,=N|u;h-H˅5/Z>Gxa ^M^]\ΫHzzBy HZ[ߝ\Svޣ.W\^??щs6& &cyJqq#_JU}@)(:(䷰[ v[[ TXmt"}5sZ[,FZ0r=*Ic=#XjPD@7ڈCoH@D*i4A|ފǭKڋDBqF%_<4Zh ^93M6G -zDxK4@㻤jQVF:1x%tn[u8'=HOvX%iigm4~H-Zz)"x`vہ#)DW@U_0I"QHj]қ} *׾|c8R6_IW /zVijUa5ߣD2 pzə%V2 *;s?58 (ܷvI8PNG+v=@b:XmVa#y~BXPq3e!xc"~!2Tb a/n D1 >?7zB?6fkϕQ+Rf5_˭q#,$RafG'J_hK@L2>EӦ<taU~u*R;aӨ$ai^7}ʸv0~Mb/s>~}>žB*~gݩ% m $T`λ -#:$"5eQ7Kx6xaDs^&p61\K縫@gK0M9Rnq[Z:Ǖ 9sqa:wP)K\66tx4I\bJ0)):+3):Kά 5^G7Ejl)!kx[Ociyo/y7C>udFv*8Nf)Fj2r( E$vi-MgGpHS+IIMd#J˸5ߖ -=6ILlҠY9üqlhVqwf6RB5Lqנ}}q-V&pB%>jfS@C -|y37G*u\--&T'UGjX;%z_q//&_x; V?¢WfZ L.{}|MJc:B8@B=8S۽|)6lY>XvMcu:eA&RPliZxO- -Tz3?Z>E2a5c " ,R SRYYeeܚneƉG1Ki-%ز|.TυƋ֕r.Cny\b(e٤E=)k0D~Yl]^>ǯbUqqYu.S -_JVc"(& -Ev,M_l^Vs!?EU}񜗕BVb ^{_}_ͽ%NP -endstream -endobj -27 0 obj -<< -/ID (Page[1].data[0].ItemDetails_Subform[0].ADDRESS_INFO[0].ADDRESS[0].GT_METAL_SUM[0].Kopfzeile[0].Zelle1[0]) -/K 50 0 R -/P 1086 0 R -/S /TH ->> -endobj -28 0 obj -<< -/K [1087 0 R 1088 0 R 1089 0 R 1090 0 R 1091 0 R 1092 0 R] -/P 16 0 R -/S /Page -/T (Page 1) ->> -endobj -29 0 obj -<< -/K [1093 0 R 1094 0 R 1095 0 R 1096 0 R] -/P 16 0 R -/S /Page -/T (Page 2) ->> -endobj -30 0 obj -<< -/K [1097 0 R 1098 0 R 1099 0 R 1100 0 R] -/P 16 0 R -/S /Page -/T (Page 3) ->> -endobj -31 0 obj -<< -/Alt (BILL_LOG_NOTE) -/K 0 -/P 1088 0 R -/Pg 12 0 R -/S /P ->> -endobj -32 0 obj -<< -/K 1 -/P 1101 0 R -/Pg 12 0 R -/S /P ->> -endobj -33 0 obj -<< -/Alt (sonepar_text) -/K 2 -/P 1101 0 R -/Pg 12 0 R -/S /P ->> -endobj -34 0 obj -<< -/Alt (IDES LOGO) -/K 3 -/P 1102 0 R -/Pg 12 0 R -/S /Figure ->> -endobj -35 0 obj -<< -/K 4 -/P 1103 0 R -/Pg 12 0 R -/S /P ->> -endobj -36 0 obj -<< -/Alt (Sender Text) -/K 5 -/P 1103 0 R -/Pg 12 0 R -/S /P ->> -endobj -37 0 obj -<< -/K 6 -/P 1104 0 R -/Pg 12 0 R -/S /P ->> -endobj -38 0 obj -<< -/K 7 -/P 1105 0 R -/Pg 12 0 R -/S /P ->> -endobj -39 0 obj -<< -/Alt (SUBSIDIARY_INFO) -/K 8 -/P 1105 0 R -/Pg 12 0 R -/S /P ->> -endobj -40 0 obj -<< -/K 9 -/P 1106 0 R -/Pg 12 0 R -/S /P ->> -endobj -41 0 obj -<< -/Alt (Sender Text) -/K 10 -/P 1106 0 R -/Pg 12 0 R -/S /P ->> -endobj -42 0 obj -<< -/K 11 -/P 1107 0 R -/Pg 12 0 R -/S /P ->> -endobj -43 0 obj -<< -/Alt (Anschrift) -/K 12 -/P 1107 0 R -/Pg 12 0 R -/S /P ->> -endobj -44 0 obj -<< -/K 13 -/P 1108 0 R -/Pg 12 0 R -/S /P ->> -endobj -45 0 obj -<< -/K 14 -/P 1109 0 R -/Pg 12 0 R -/S /P ->> -endobj -46 0 obj -<< -/Alt (Zahlungsbedingungen Text 1) -/K 15 -/P 1109 0 R -/Pg 12 0 R -/S /P ->> -endobj -47 0 obj -<< -/K 16 -/P 1110 0 R -/Pg 12 0 R -/S /P ->> -endobj -48 0 obj -<< -/K 17 -/P 1111 0 R -/Pg 12 0 R -/S /P ->> -endobj -49 0 obj -<< -/K 18 -/P 1112 0 R -/Pg 12 0 R -/S /P ->> -endobj -50 0 obj -<< -/K 19 -/P 27 0 R -/Pg 12 0 R -/S /P ->> -endobj -51 0 obj -<< -/K 20 -/P 1113 0 R -/Pg 12 0 R -/S /P ->> -endobj -52 0 obj -<< -/K 21 -/P 1114 0 R -/Pg 12 0 R -/S /P ->> -endobj -53 0 obj -<< -/K 22 -/P 1115 0 R -/Pg 12 0 R -/S /P ->> -endobj -54 0 obj -<< -/K 23 -/P 1116 0 R -/Pg 12 0 R -/S /P ->> -endobj -55 0 obj -<< -/K 24 -/P 1117 0 R -/Pg 12 0 R -/S /P ->> -endobj -56 0 obj -<< -/K 25 -/P 1118 0 R -/Pg 12 0 R -/S /P ->> -endobj -57 0 obj -<< -/K 26 -/P 1119 0 R -/Pg 12 0 R -/S /P ->> -endobj -58 0 obj -<< -/K 27 -/P 1120 0 R -/Pg 12 0 R -/S /P ->> -endobj -59 0 obj -<< -/K 28 -/P 1121 0 R -/Pg 12 0 R -/S /P ->> -endobj -60 0 obj -<< -/Alt (VBELN) -/K 29 -/P 1121 0 R -/Pg 12 0 R -/S /P ->> -endobj -61 0 obj -<< -/K 30 -/P 1122 0 R -/Pg 12 0 R -/S /P ->> -endobj -62 0 obj -<< -/K 31 -/P 1123 0 R -/Pg 12 0 R -/S /P ->> -endobj -63 0 obj -<< -/Alt (FKDAT) -/K 32 -/P 1123 0 R -/Pg 12 0 R -/S /P ->> -endobj -64 0 obj -<< -/K 33 -/P 1124 0 R -/Pg 12 0 R -/S /P ->> -endobj -65 0 obj -<< -/K 34 -/P 1125 0 R -/Pg 12 0 R -/S /P ->> -endobj -66 0 obj -<< -/K 35 -/P 1126 0 R -/Pg 12 0 R -/S /P ->> -endobj -67 0 obj -<< -/K 36 -/P 1127 0 R -/Pg 12 0 R -/S /P ->> -endobj -68 0 obj -<< -/Alt (KUNAG) -/K 37 -/P 1127 0 R -/Pg 12 0 R -/S /P ->> -endobj -69 0 obj -<< -/K 38 -/P 1128 0 R -/Pg 12 0 R -/S /P ->> -endobj -70 0 obj -<< -/Alt (Niederlassung:) -/K 39 -/P 1128 0 R -/Pg 12 0 R -/S /P ->> -endobj -71 0 obj -<< -/K 40 -/P 1129 0 R -/Pg 12 0 R -/S /P ->> -endobj -72 0 obj -<< -/K 41 -/P 1130 0 R -/Pg 12 0 R -/S /P ->> -endobj -73 0 obj -<< -/Alt (NAME_TEXT) -/K 42 -/P 1130 0 R -/Pg 12 0 R -/S /P ->> -endobj -74 0 obj -<< -/K 43 -/P 1131 0 R -/Pg 12 0 R -/S /P ->> -endobj -75 0 obj -<< -/Alt (Mail:) -/K 44 -/P 1131 0 R -/Pg 12 0 R -/S /P ->> -endobj -76 0 obj -<< -/K 45 -/P 1132 0 R -/Pg 12 0 R -/S /P ->> -endobj -77 0 obj -<< -/Alt (POSNR_TXT_1) -/K 46 -/P 1132 0 R -/Pg 12 0 R -/S /P ->> -endobj -78 0 obj -<< -/K 47 -/P 1133 0 R -/Pg 12 0 R -/S /P ->> -endobj -79 0 obj -<< -/K 48 -/P 1134 0 R -/Pg 12 0 R -/S /P ->> -endobj -80 0 obj -<< -/K 49 -/P 1135 0 R -/Pg 12 0 R -/S /P ->> -endobj -81 0 obj -<< -/Alt (POSNR_TXT_2) -/K 50 -/P 1135 0 R -/Pg 12 0 R -/S /P ->> -endobj -82 0 obj -<< -/K 51 -/P 1136 0 R -/Pg 12 0 R -/S /P ->> -endobj -83 0 obj -<< -/K 52 -/P 1137 0 R -/Pg 12 0 R -/S /P ->> -endobj -84 0 obj -<< -/K 53 -/P 1138 0 R -/Pg 12 0 R -/S /P ->> -endobj -85 0 obj -<< -/K 54 -/P 1139 0 R -/Pg 12 0 R -/S /P ->> -endobj -86 0 obj -<< -/K 55 -/P 1140 0 R -/Pg 12 0 R -/S /P ->> -endobj -87 0 obj -<< -/K 56 -/P 1141 0 R -/Pg 12 0 R -/S /P ->> -endobj -88 0 obj -<< -/K 57 -/P 1142 0 R -/Pg 12 0 R -/S /P ->> -endobj -89 0 obj -<< -/K 58 -/P 1143 0 R -/Pg 12 0 R -/S /P ->> -endobj -90 0 obj -<< -/Alt (Lieferung) -/K 59 -/P 1143 0 R -/Pg 12 0 R -/S /P ->> -endobj -91 0 obj -<< -/K 60 -/P 1144 0 R -/Pg 12 0 R -/S /P ->> -endobj -92 0 obj -<< -/Alt (vom) -/K 61 -/P 1144 0 R -/Pg 12 0 R -/S /P ->> -endobj -93 0 obj -<< -/K 62 -/P 1145 0 R -/Pg 12 0 R -/S /P ->> -endobj -94 0 obj -<< -/Alt (ab) -/K 63 -/P 1145 0 R -/Pg 12 0 R -/S /P ->> -endobj -95 0 obj -<< -/K 64 -/P 1146 0 R -/Pg 12 0 R -/S /P ->> -endobj -96 0 obj -<< -/Alt (Auftrag ) -/K 65 -/P 1146 0 R -/Pg 12 0 R -/S /P ->> -endobj -97 0 obj -<< -/K 66 -/P 1147 0 R -/Pg 12 0 R -/S /P ->> -endobj -98 0 obj -<< -/K 67 -/P 1148 0 R -/Pg 12 0 R -/S /P ->> -endobj -99 0 obj -<< -/Alt (vom:) -/K 68 -/P 1148 0 R -/Pg 12 0 R -/S /P ->> -endobj -100 0 obj -<< -/K 69 -/P 1149 0 R -/Pg 12 0 R -/S /P ->> -endobj -101 0 obj -<< -/Alt (ZZ_ORDER_CODE2) -/K 70 -/P 1149 0 R -/Pg 12 0 R -/S /P ->> -endobj -102 0 obj -<< -/K 71 -/P 1150 0 R -/Pg 12 0 R -/S /P ->> -endobj -103 0 obj -<< -/K 72 -/P 1151 0 R -/Pg 12 0 R -/S /P ->> -endobj -104 0 obj -<< -/Alt (POSNR_VF) -/K 73 -/P 1151 0 R -/Pg 12 0 R -/S /P ->> -endobj -105 0 obj -<< -/K 74 -/P 1152 0 R -/Pg 12 0 R -/S /P ->> -endobj -106 0 obj -<< -/Alt (MATNR) -/K 75 -/P 1152 0 R -/Pg 12 0 R -/S /P ->> -endobj -107 0 obj -<< -/K 76 -/P 1153 0 R -/Pg 12 0 R -/S /P ->> -endobj -108 0 obj -<< -/Alt (ZZMATTEXT) -/K 77 -/P 1153 0 R -/Pg 12 0 R -/S /P ->> -endobj -109 0 obj -<< -/K 78 -/P 1154 0 R -/Pg 12 0 R -/S /P ->> -endobj -110 0 obj -<< -/Alt (POSNR_VL) -/K 79 -/P 1154 0 R -/Pg 12 0 R -/S /P ->> -endobj -111 0 obj -<< -/K 80 -/P 1155 0 R -/Pg 12 0 R -/S /P ->> -endobj -112 0 obj -<< -/Alt (EAN11) -/K 81 -/P 1155 0 R -/Pg 12 0 R -/S /P ->> -endobj -113 0 obj -<< -/K 82 -/P 1156 0 R -/Pg 12 0 R -/S /P ->> -endobj -114 0 obj -<< -/Alt (BISMT) -/K 83 -/P 1156 0 R -/Pg 12 0 R -/S /P ->> -endobj -115 0 obj -<< -/K 84 -/P 1157 0 R -/Pg 12 0 R -/S /P ->> -endobj -116 0 obj -<< -/Alt (FKIMG) -/K 85 -/P 1157 0 R -/Pg 12 0 R -/S /P ->> -endobj -117 0 obj -<< -/K 86 -/P 1158 0 R -/Pg 12 0 R -/S /P ->> -endobj -118 0 obj -<< -/Alt (VRKME) -/K 87 -/P 1158 0 R -/Pg 12 0 R -/S /P ->> -endobj -119 0 obj -<< -/K 88 -/P 1159 0 R -/Pg 12 0 R -/S /P ->> -endobj -120 0 obj -<< -/Alt (PREIS_VF) -/K 89 -/P 1159 0 R -/Pg 12 0 R -/S /P ->> -endobj -121 0 obj -<< -/K 90 -/P 1160 0 R -/Pg 12 0 R -/S /P ->> -endobj -122 0 obj -<< -/Alt (PEINH_VF) -/K 91 -/P 1160 0 R -/Pg 12 0 R -/S /P ->> -endobj -123 0 obj -<< -/K 92 -/P 1161 0 R -/Pg 12 0 R -/S /P ->> -endobj -124 0 obj -<< -/Alt (POSPREIS_VF) -/K 93 -/P 1161 0 R -/Pg 12 0 R -/S /P ->> -endobj -125 0 obj -<< -/K 94 -/P 1162 0 R -/Pg 12 0 R -/S /P ->> -endobj -126 0 obj -<< -/K 95 -/P 1163 0 R -/Pg 12 0 R -/S /P ->> -endobj -127 0 obj -<< -/Alt (POSNR_VF) -/K 96 -/P 1163 0 R -/Pg 12 0 R -/S /P ->> -endobj -128 0 obj -<< -/K 97 -/P 1164 0 R -/Pg 12 0 R -/S /P ->> -endobj -129 0 obj -<< -/Alt (MATNR) -/K 98 -/P 1164 0 R -/Pg 12 0 R -/S /P ->> -endobj -130 0 obj -<< -/K 99 -/P 1165 0 R -/Pg 12 0 R -/S /P ->> -endobj -131 0 obj -<< -/Alt (ZZMATTEXT) -/K 100 -/P 1165 0 R -/Pg 12 0 R -/S /P ->> -endobj -132 0 obj -<< -/K 101 -/P 1166 0 R -/Pg 12 0 R -/S /P ->> -endobj -133 0 obj -<< -/Alt (POSNR_VL) -/K 102 -/P 1166 0 R -/Pg 12 0 R -/S /P ->> -endobj -134 0 obj -<< -/K 103 -/P 1167 0 R -/Pg 12 0 R -/S /P ->> -endobj -135 0 obj -<< -/Alt (EAN11) -/K 104 -/P 1167 0 R -/Pg 12 0 R -/S /P ->> -endobj -136 0 obj -<< -/K 105 -/P 1168 0 R -/Pg 12 0 R -/S /P ->> -endobj -137 0 obj -<< -/Alt (BISMT) -/K 106 -/P 1168 0 R -/Pg 12 0 R -/S /P ->> -endobj -138 0 obj -<< -/K 107 -/P 1169 0 R -/Pg 12 0 R -/S /P ->> -endobj -139 0 obj -<< -/Alt (FKIMG) -/K 108 -/P 1169 0 R -/Pg 12 0 R -/S /P ->> -endobj -140 0 obj -<< -/K 109 -/P 1170 0 R -/Pg 12 0 R -/S /P ->> -endobj -141 0 obj -<< -/Alt (VRKME) -/K 110 -/P 1170 0 R -/Pg 12 0 R -/S /P ->> -endobj -142 0 obj -<< -/K 111 -/P 1171 0 R -/Pg 12 0 R -/S /P ->> -endobj -143 0 obj -<< -/Alt (PREIS_VF) -/K 112 -/P 1171 0 R -/Pg 12 0 R -/S /P ->> -endobj -144 0 obj -<< -/K 113 -/P 1172 0 R -/Pg 12 0 R -/S /P ->> -endobj -145 0 obj -<< -/Alt (PEINH_VF) -/K 114 -/P 1172 0 R -/Pg 12 0 R -/S /P ->> -endobj -146 0 obj -<< -/K 115 -/P 1173 0 R -/Pg 12 0 R -/S /P ->> -endobj -147 0 obj -<< -/Alt (POSPREIS_VF) -/K 116 -/P 1173 0 R -/Pg 12 0 R -/S /P ->> -endobj -148 0 obj -<< -/K 117 -/P 1174 0 R -/Pg 12 0 R -/S /P ->> -endobj -149 0 obj -<< -/K 118 -/P 1175 0 R -/Pg 12 0 R -/S /P ->> -endobj -150 0 obj -<< -/Alt (POSNR_VF) -/K 119 -/P 1175 0 R -/Pg 12 0 R -/S /P ->> -endobj -151 0 obj -<< -/K 120 -/P 1176 0 R -/Pg 12 0 R -/S /P ->> -endobj -152 0 obj -<< -/Alt (MATNR) -/K 121 -/P 1176 0 R -/Pg 12 0 R -/S /P ->> -endobj -153 0 obj -<< -/K 122 -/P 1177 0 R -/Pg 12 0 R -/S /P ->> -endobj -154 0 obj -<< -/Alt (ZZMATTEXT) -/K 123 -/P 1177 0 R -/Pg 12 0 R -/S /P ->> -endobj -155 0 obj -<< -/K 124 -/P 1178 0 R -/Pg 12 0 R -/S /P ->> -endobj -156 0 obj -<< -/Alt (POSNR_VL) -/K 125 -/P 1178 0 R -/Pg 12 0 R -/S /P ->> -endobj -157 0 obj -<< -/K 126 -/P 1179 0 R -/Pg 12 0 R -/S /P ->> -endobj -158 0 obj -<< -/Alt (EAN11) -/K 127 -/P 1179 0 R -/Pg 12 0 R -/S /P ->> -endobj -159 0 obj -<< -/K 128 -/P 1180 0 R -/Pg 12 0 R -/S /P ->> -endobj -160 0 obj -<< -/Alt (BISMT) -/K 129 -/P 1180 0 R -/Pg 12 0 R -/S /P ->> -endobj -161 0 obj -<< -/K 130 -/P 1181 0 R -/Pg 12 0 R -/S /P ->> -endobj -162 0 obj -<< -/Alt (FKIMG) -/K 131 -/P 1181 0 R -/Pg 12 0 R -/S /P ->> -endobj -163 0 obj -<< -/K 132 -/P 1182 0 R -/Pg 12 0 R -/S /P ->> -endobj -164 0 obj -<< -/Alt (VRKME) -/K 133 -/P 1182 0 R -/Pg 12 0 R -/S /P ->> -endobj -165 0 obj -<< -/K 134 -/P 1183 0 R -/Pg 12 0 R -/S /P ->> -endobj -166 0 obj -<< -/Alt (PREIS_VF) -/K 135 -/P 1183 0 R -/Pg 12 0 R -/S /P ->> -endobj -167 0 obj -<< -/K 136 -/P 1184 0 R -/Pg 12 0 R -/S /P ->> -endobj -168 0 obj -<< -/Alt (PEINH_VF) -/K 137 -/P 1184 0 R -/Pg 12 0 R -/S /P ->> -endobj -169 0 obj -<< -/K 138 -/P 1185 0 R -/Pg 12 0 R -/S /P ->> -endobj -170 0 obj -<< -/Alt (POSPREIS_VF) -/K 139 -/P 1185 0 R -/Pg 12 0 R -/S /P ->> -endobj -171 0 obj -<< -/K 140 -/P 1186 0 R -/Pg 12 0 R -/S /P ->> -endobj -172 0 obj -<< -/K 141 -/P 1187 0 R -/Pg 12 0 R -/S /P ->> -endobj -173 0 obj -<< -/Alt (POSNR_VF) -/K 142 -/P 1187 0 R -/Pg 12 0 R -/S /P ->> -endobj -174 0 obj -<< -/K 143 -/P 1188 0 R -/Pg 12 0 R -/S /P ->> -endobj -175 0 obj -<< -/Alt (MATNR) -/K 144 -/P 1188 0 R -/Pg 12 0 R -/S /P ->> -endobj -176 0 obj -<< -/K 145 -/P 1189 0 R -/Pg 12 0 R -/S /P ->> -endobj -177 0 obj -<< -/Alt (ZZMATTEXT) -/K 146 -/P 1189 0 R -/Pg 12 0 R -/S /P ->> -endobj -178 0 obj -<< -/K 147 -/P 1190 0 R -/Pg 12 0 R -/S /P ->> -endobj -179 0 obj -<< -/Alt (POSNR_VL) -/K 148 -/P 1190 0 R -/Pg 12 0 R -/S /P ->> -endobj -180 0 obj -<< -/K 149 -/P 1191 0 R -/Pg 12 0 R -/S /P ->> -endobj -181 0 obj -<< -/Alt (EAN11) -/K 150 -/P 1191 0 R -/Pg 12 0 R -/S /P ->> -endobj -182 0 obj -<< -/K 151 -/P 1192 0 R -/Pg 12 0 R -/S /P ->> -endobj -183 0 obj -<< -/Alt (BISMT) -/K 152 -/P 1192 0 R -/Pg 12 0 R -/S /P ->> -endobj -184 0 obj -<< -/K 153 -/P 1193 0 R -/Pg 12 0 R -/S /P ->> -endobj -185 0 obj -<< -/Alt (FKIMG) -/K 154 -/P 1193 0 R -/Pg 12 0 R -/S /P ->> -endobj -186 0 obj -<< -/K 155 -/P 1194 0 R -/Pg 12 0 R -/S /P ->> -endobj -187 0 obj -<< -/Alt (VRKME) -/K 156 -/P 1194 0 R -/Pg 12 0 R -/S /P ->> -endobj -188 0 obj -<< -/K 157 -/P 1195 0 R -/Pg 12 0 R -/S /P ->> -endobj -189 0 obj -<< -/Alt (PREIS_VF) -/K 158 -/P 1195 0 R -/Pg 12 0 R -/S /P ->> -endobj -190 0 obj -<< -/K 159 -/P 1196 0 R -/Pg 12 0 R -/S /P ->> -endobj -191 0 obj -<< -/Alt (PEINH_VF) -/K 160 -/P 1196 0 R -/Pg 12 0 R -/S /P ->> -endobj -192 0 obj -<< -/K 161 -/P 1197 0 R -/Pg 12 0 R -/S /P ->> -endobj -193 0 obj -<< -/Alt (POSPREIS_VF) -/K 162 -/P 1197 0 R -/Pg 12 0 R -/S /P ->> -endobj -194 0 obj -<< -/K 163 -/P 1198 0 R -/Pg 12 0 R -/S /P ->> -endobj -195 0 obj -<< -/K 164 -/P 1199 0 R -/Pg 12 0 R -/S /P ->> -endobj -196 0 obj -<< -/Alt (POSNR_VF) -/K 165 -/P 1199 0 R -/Pg 12 0 R -/S /P ->> -endobj -197 0 obj -<< -/K 166 -/P 1200 0 R -/Pg 12 0 R -/S /P ->> -endobj -198 0 obj -<< -/Alt (MATNR) -/K 167 -/P 1200 0 R -/Pg 12 0 R -/S /P ->> -endobj -199 0 obj -<< -/K 168 -/P 1201 0 R -/Pg 12 0 R -/S /P ->> -endobj -200 0 obj -<< -/Alt (ZZMATTEXT) -/K 169 -/P 1201 0 R -/Pg 12 0 R -/S /P ->> -endobj -201 0 obj -<< -/K 170 -/P 1202 0 R -/Pg 12 0 R -/S /P ->> -endobj -202 0 obj -<< -/Alt (POSNR_VL) -/K 171 -/P 1202 0 R -/Pg 12 0 R -/S /P ->> -endobj -203 0 obj -<< -/K 172 -/P 1203 0 R -/Pg 12 0 R -/S /P ->> -endobj -204 0 obj -<< -/Alt (EAN11) -/K 173 -/P 1203 0 R -/Pg 12 0 R -/S /P ->> -endobj -205 0 obj -<< -/K 174 -/P 1204 0 R -/Pg 12 0 R -/S /P ->> -endobj -206 0 obj -<< -/Alt (BISMT) -/K 175 -/P 1204 0 R -/Pg 12 0 R -/S /P ->> -endobj -207 0 obj -<< -/K 176 -/P 1205 0 R -/Pg 12 0 R -/S /P ->> -endobj -208 0 obj -<< -/Alt (FKIMG) -/K 177 -/P 1205 0 R -/Pg 12 0 R -/S /P ->> -endobj -209 0 obj -<< -/K 178 -/P 1206 0 R -/Pg 12 0 R -/S /P ->> -endobj -210 0 obj -<< -/Alt (VRKME) -/K 179 -/P 1206 0 R -/Pg 12 0 R -/S /P ->> -endobj -211 0 obj -<< -/K 180 -/P 1207 0 R -/Pg 12 0 R -/S /P ->> -endobj -212 0 obj -<< -/Alt (PREIS_VF) -/K 181 -/P 1207 0 R -/Pg 12 0 R -/S /P ->> -endobj -213 0 obj -<< -/K 182 -/P 1208 0 R -/Pg 12 0 R -/S /P ->> -endobj -214 0 obj -<< -/Alt (PEINH_VF) -/K 183 -/P 1208 0 R -/Pg 12 0 R -/S /P ->> -endobj -215 0 obj -<< -/K 184 -/P 1209 0 R -/Pg 12 0 R -/S /P ->> -endobj -216 0 obj -<< -/Alt (POSPREIS_VF) -/K 185 -/P 1209 0 R -/Pg 12 0 R -/S /P ->> -endobj -217 0 obj -<< -/K 186 -/P 1210 0 R -/Pg 12 0 R -/S /P ->> -endobj -218 0 obj -<< -/K 187 -/P 1211 0 R -/Pg 12 0 R -/S /P ->> -endobj -219 0 obj -<< -/Alt (POSNR_VF) -/K 188 -/P 1211 0 R -/Pg 12 0 R -/S /P ->> -endobj -220 0 obj -<< -/K 189 -/P 1212 0 R -/Pg 12 0 R -/S /P ->> -endobj -221 0 obj -<< -/Alt (MATNR) -/K 190 -/P 1212 0 R -/Pg 12 0 R -/S /P ->> -endobj -222 0 obj -<< -/K 191 -/P 1213 0 R -/Pg 12 0 R -/S /P ->> -endobj -223 0 obj -<< -/Alt (ZZMATTEXT) -/K 192 -/P 1213 0 R -/Pg 12 0 R -/S /P ->> -endobj -224 0 obj -<< -/K 193 -/P 1214 0 R -/Pg 12 0 R -/S /P ->> -endobj -225 0 obj -<< -/Alt (POSNR_VL) -/K 194 -/P 1214 0 R -/Pg 12 0 R -/S /P ->> -endobj -226 0 obj -<< -/Alt (EAN11) -/K 195 -/P 1215 0 R -/Pg 12 0 R -/S /P ->> -endobj -227 0 obj -<< -/K 196 -/P 1216 0 R -/Pg 12 0 R -/S /P ->> -endobj -228 0 obj -<< -/Alt (BISMT) -/K 197 -/P 1216 0 R -/Pg 12 0 R -/S /P ->> -endobj -229 0 obj -<< -/K 198 -/P 1217 0 R -/Pg 12 0 R -/S /P ->> -endobj -230 0 obj -<< -/Alt (FKIMG) -/K 199 -/P 1217 0 R -/Pg 12 0 R -/S /P ->> -endobj -231 0 obj -<< -/K 200 -/P 1218 0 R -/Pg 12 0 R -/S /P ->> -endobj -232 0 obj -<< -/Alt (VRKME) -/K 201 -/P 1218 0 R -/Pg 12 0 R -/S /P ->> -endobj -233 0 obj -<< -/K 202 -/P 1219 0 R -/Pg 12 0 R -/S /P ->> -endobj -234 0 obj -<< -/Alt (PREIS_VF) -/K 203 -/P 1219 0 R -/Pg 12 0 R -/S /P ->> -endobj -235 0 obj -<< -/K 204 -/P 1220 0 R -/Pg 12 0 R -/S /P ->> -endobj -236 0 obj -<< -/Alt (PEINH_VF) -/K 205 -/P 1220 0 R -/Pg 12 0 R -/S /P ->> -endobj -237 0 obj -<< -/K 206 -/P 1221 0 R -/Pg 12 0 R -/S /P ->> -endobj -238 0 obj -<< -/Alt (POSPREIS_VF) -/K 207 -/P 1221 0 R -/Pg 12 0 R -/S /P ->> -endobj -239 0 obj -<< -/K 208 -/P 1222 0 R -/Pg 12 0 R -/S /P ->> -endobj -240 0 obj -<< -/K 209 -/P 1223 0 R -/Pg 12 0 R -/S /P ->> -endobj -241 0 obj -<< -/K 210 -/P 1224 0 R -/Pg 12 0 R -/S /P ->> -endobj -242 0 obj -<< -/Alt (ZUSCHLAGSWERT) -/K 211 -/P 1224 0 R -/Pg 12 0 R -/S /P ->> -endobj -243 0 obj -<< -/K 212 -/P 1225 0 R -/Pg 12 0 R -/S /P ->> -endobj -244 0 obj -<< -/Alt (POSNR_VF) -/K 213 -/P 1225 0 R -/Pg 12 0 R -/S /P ->> -endobj -245 0 obj -<< -/K 214 -/P 1226 0 R -/Pg 12 0 R -/S /P ->> -endobj -246 0 obj -<< -/Alt (MATNR) -/K 215 -/P 1226 0 R -/Pg 12 0 R -/S /P ->> -endobj -247 0 obj -<< -/K 216 -/P 1227 0 R -/Pg 12 0 R -/S /P ->> -endobj -248 0 obj -<< -/Alt (ZZMATTEXT) -/K 217 -/P 1227 0 R -/Pg 12 0 R -/S /P ->> -endobj -249 0 obj -<< -/K 218 -/P 1228 0 R -/Pg 12 0 R -/S /P ->> -endobj -250 0 obj -<< -/Alt (POSNR_VL) -/K 219 -/P 1228 0 R -/Pg 12 0 R -/S /P ->> -endobj -251 0 obj -<< -/K 220 -/P 1229 0 R -/Pg 12 0 R -/S /P ->> -endobj -252 0 obj -<< -/Alt (EAN11) -/K 221 -/P 1229 0 R -/Pg 12 0 R -/S /P ->> -endobj -253 0 obj -<< -/K 222 -/P 1230 0 R -/Pg 12 0 R -/S /P ->> -endobj -254 0 obj -<< -/Alt (BISMT) -/K 223 -/P 1230 0 R -/Pg 12 0 R -/S /P ->> -endobj -255 0 obj -<< -/K 224 -/P 1231 0 R -/Pg 12 0 R -/S /P ->> -endobj -256 0 obj -<< -/Alt (FKIMG) -/K 225 -/P 1231 0 R -/Pg 12 0 R -/S /P ->> -endobj -257 0 obj -<< -/K 226 -/P 1232 0 R -/Pg 12 0 R -/S /P ->> -endobj -258 0 obj -<< -/Alt (VRKME) -/K 227 -/P 1232 0 R -/Pg 12 0 R -/S /P ->> -endobj -259 0 obj -<< -/K 228 -/P 1233 0 R -/Pg 12 0 R -/S /P ->> -endobj -260 0 obj -<< -/Alt (PREIS_VF) -/K 229 -/P 1233 0 R -/Pg 12 0 R -/S /P ->> -endobj -261 0 obj -<< -/K 230 -/P 1234 0 R -/Pg 12 0 R -/S /P ->> -endobj -262 0 obj -<< -/Alt (PEINH_VF) -/K 231 -/P 1234 0 R -/Pg 12 0 R -/S /P ->> -endobj -263 0 obj -<< -/K 232 -/P 1235 0 R -/Pg 12 0 R -/S /P ->> -endobj -264 0 obj -<< -/Alt (POSPREIS_VF) -/K 233 -/P 1235 0 R -/Pg 12 0 R -/S /P ->> -endobj -265 0 obj -<< -/K 234 -/P 1236 0 R -/Pg 12 0 R -/S /P ->> -endobj -266 0 obj -<< -/K 235 -/P 1237 0 R -/Pg 12 0 R -/S /P ->> -endobj -267 0 obj -<< -/K 236 -/P 1238 0 R -/Pg 12 0 R -/S /P ->> -endobj -268 0 obj -<< -/Alt (ZUSCHLAGSWERT) -/K 237 -/P 1238 0 R -/Pg 12 0 R -/S /P ->> -endobj -269 0 obj -<< -/K 238 -/P 1239 0 R -/Pg 12 0 R -/S /P ->> -endobj -270 0 obj -<< -/Alt (POSNR_VF) -/K 239 -/P 1239 0 R -/Pg 12 0 R -/S /P ->> -endobj -271 0 obj -<< -/K 240 -/P 1240 0 R -/Pg 12 0 R -/S /P ->> -endobj -272 0 obj -<< -/Alt (MATNR) -/K 241 -/P 1240 0 R -/Pg 12 0 R -/S /P ->> -endobj -273 0 obj -<< -/K 242 -/P 1241 0 R -/Pg 12 0 R -/S /P ->> -endobj -274 0 obj -<< -/Alt (ZZMATTEXT) -/K 243 -/P 1241 0 R -/Pg 12 0 R -/S /P ->> -endobj -275 0 obj -<< -/K 244 -/P 1242 0 R -/Pg 12 0 R -/S /P ->> -endobj -276 0 obj -<< -/Alt (POSNR_VL) -/K 245 -/P 1242 0 R -/Pg 12 0 R -/S /P ->> -endobj -277 0 obj -<< -/K 246 -/P 1243 0 R -/Pg 12 0 R -/S /P ->> -endobj -278 0 obj -<< -/Alt (EAN11) -/K 247 -/P 1243 0 R -/Pg 12 0 R -/S /P ->> -endobj -279 0 obj -<< -/K 248 -/P 1244 0 R -/Pg 12 0 R -/S /P ->> -endobj -280 0 obj -<< -/Alt (BISMT) -/K 249 -/P 1244 0 R -/Pg 12 0 R -/S /P ->> -endobj -281 0 obj -<< -/K 250 -/P 1245 0 R -/Pg 12 0 R -/S /P ->> -endobj -282 0 obj -<< -/Alt (FKIMG) -/K 251 -/P 1245 0 R -/Pg 12 0 R -/S /P ->> -endobj -283 0 obj -<< -/K 252 -/P 1246 0 R -/Pg 12 0 R -/S /P ->> -endobj -284 0 obj -<< -/Alt (VRKME) -/K 253 -/P 1246 0 R -/Pg 12 0 R -/S /P ->> -endobj -285 0 obj -<< -/K 254 -/P 1247 0 R -/Pg 12 0 R -/S /P ->> -endobj -286 0 obj -<< -/Alt (PREIS_VF) -/K 255 -/P 1247 0 R -/Pg 12 0 R -/S /P ->> -endobj -287 0 obj -<< -/K 256 -/P 1248 0 R -/Pg 12 0 R -/S /P ->> -endobj -288 0 obj -<< -/Alt (PEINH_VF) -/K 257 -/P 1248 0 R -/Pg 12 0 R -/S /P ->> -endobj -289 0 obj -<< -/K 258 -/P 1249 0 R -/Pg 12 0 R -/S /P ->> -endobj -290 0 obj -<< -/Alt (POSPREIS_VF) -/K 259 -/P 1249 0 R -/Pg 12 0 R -/S /P ->> -endobj -291 0 obj -<< -/K 260 -/P 1250 0 R -/Pg 12 0 R -/S /P ->> -endobj -292 0 obj -<< -/K 261 -/P 1251 0 R -/Pg 12 0 R -/S /P ->> -endobj -293 0 obj -<< -/Alt (POSNR_VF) -/K 262 -/P 1251 0 R -/Pg 12 0 R -/S /P ->> -endobj -294 0 obj -<< -/K 263 -/P 1252 0 R -/Pg 12 0 R -/S /P ->> -endobj -295 0 obj -<< -/Alt (MATNR) -/K 264 -/P 1252 0 R -/Pg 12 0 R -/S /P ->> -endobj -296 0 obj -<< -/K 265 -/P 1253 0 R -/Pg 12 0 R -/S /P ->> -endobj -297 0 obj -<< -/Alt (ZZMATTEXT) -/K 266 -/P 1253 0 R -/Pg 12 0 R -/S /P ->> -endobj -298 0 obj -<< -/K 267 -/P 1254 0 R -/Pg 12 0 R -/S /P ->> -endobj -299 0 obj -<< -/Alt (POSNR_VL) -/K 268 -/P 1254 0 R -/Pg 12 0 R -/S /P ->> -endobj -300 0 obj -<< -/K 269 -/P 1255 0 R -/Pg 12 0 R -/S /P ->> -endobj -301 0 obj -<< -/Alt (EAN11) -/K 270 -/P 1255 0 R -/Pg 12 0 R -/S /P ->> -endobj -302 0 obj -<< -/K 271 -/P 1256 0 R -/Pg 12 0 R -/S /P ->> -endobj -303 0 obj -<< -/Alt (BISMT) -/K 272 -/P 1256 0 R -/Pg 12 0 R -/S /P ->> -endobj -304 0 obj -<< -/K 273 -/P 1257 0 R -/Pg 12 0 R -/S /P ->> -endobj -305 0 obj -<< -/Alt (FKIMG) -/K 274 -/P 1257 0 R -/Pg 12 0 R -/S /P ->> -endobj -306 0 obj -<< -/K 275 -/P 1258 0 R -/Pg 12 0 R -/S /P ->> -endobj -307 0 obj -<< -/Alt (VRKME) -/K 276 -/P 1258 0 R -/Pg 12 0 R -/S /P ->> -endobj -308 0 obj -<< -/K 277 -/P 1259 0 R -/Pg 12 0 R -/S /P ->> -endobj -309 0 obj -<< -/Alt (PREIS_VF) -/K 278 -/P 1259 0 R -/Pg 12 0 R -/S /P ->> -endobj -310 0 obj -<< -/K 279 -/P 1260 0 R -/Pg 12 0 R -/S /P ->> -endobj -311 0 obj -<< -/Alt (PEINH_VF) -/K 280 -/P 1260 0 R -/Pg 12 0 R -/S /P ->> -endobj -312 0 obj -<< -/K 281 -/P 1261 0 R -/Pg 12 0 R -/S /P ->> -endobj -313 0 obj -<< -/Alt (POSPREIS_VF) -/K 282 -/P 1261 0 R -/Pg 12 0 R -/S /P ->> -endobj -314 0 obj -<< -/K 283 -/P 1262 0 R -/Pg 12 0 R -/S /P ->> -endobj -315 0 obj -<< -/K 0 -/P 1263 0 R -/Pg 13 0 R -/S /P ->> -endobj -316 0 obj -<< -/Alt (sonepar_text) -/K 1 -/P 1263 0 R -/Pg 13 0 R -/S /P ->> -endobj -317 0 obj -<< -/Alt (IDES LOGO) -/K 2 -/P 1264 0 R -/Pg 13 0 R -/S /Figure ->> -endobj -318 0 obj -<< -/K 3 -/P 1265 0 R -/Pg 13 0 R -/S /P ->> -endobj -319 0 obj -<< -/K 4 -/P 1266 0 R -/Pg 13 0 R -/S /P ->> -endobj -320 0 obj -<< -/K 5 -/P 1267 0 R -/Pg 13 0 R -/S /P ->> -endobj -321 0 obj -<< -/K 6 -/P 1268 0 R -/Pg 13 0 R -/S /P ->> -endobj -322 0 obj -<< -/Alt (Footer Text) -/K 7 -/P 1268 0 R -/Pg 13 0 R -/S /P ->> -endobj -323 0 obj -<< -/K 8 -/P 1269 0 R -/Pg 13 0 R -/S /P ->> -endobj -324 0 obj -<< -/Alt (SUBSIDIARY_INFO) -/K 9 -/P 1269 0 R -/Pg 13 0 R -/S /P ->> -endobj -325 0 obj -<< -/K 10 -/P 1270 0 R -/Pg 13 0 R -/S /P ->> -endobj -326 0 obj -<< -/Alt (POSNR_TXT_1) -/K 11 -/P 1270 0 R -/Pg 13 0 R -/S /P ->> -endobj -327 0 obj -<< -/K 12 -/P 1271 0 R -/Pg 13 0 R -/S /P ->> -endobj -328 0 obj -<< -/K 13 -/P 1272 0 R -/Pg 13 0 R -/S /P ->> -endobj -329 0 obj -<< -/K 14 -/P 1273 0 R -/Pg 13 0 R -/S /P ->> -endobj -330 0 obj -<< -/Alt (POSNR_TXT_2) -/K 15 -/P 1273 0 R -/Pg 13 0 R -/S /P ->> -endobj -331 0 obj -<< -/K 16 -/P 1274 0 R -/Pg 13 0 R -/S /P ->> -endobj -332 0 obj -<< -/K 17 -/P 1275 0 R -/Pg 13 0 R -/S /P ->> -endobj -333 0 obj -<< -/K 18 -/P 1276 0 R -/Pg 13 0 R -/S /P ->> -endobj -334 0 obj -<< -/K 19 -/P 1277 0 R -/Pg 13 0 R -/S /P ->> -endobj -335 0 obj -<< -/K 20 -/P 1278 0 R -/Pg 13 0 R -/S /P ->> -endobj -336 0 obj -<< -/K 21 -/P 1279 0 R -/Pg 13 0 R -/S /P ->> -endobj -337 0 obj -<< -/K 22 -/P 1280 0 R -/Pg 13 0 R -/S /P ->> -endobj -338 0 obj -<< -/K 23 -/P 1281 0 R -/Pg 13 0 R -/S /P ->> -endobj -339 0 obj -<< -/Alt (POSNR_VF) -/K 24 -/P 1281 0 R -/Pg 13 0 R -/S /P ->> -endobj -340 0 obj -<< -/K 25 -/P 1282 0 R -/Pg 13 0 R -/S /P ->> -endobj -341 0 obj -<< -/Alt (MATNR) -/K 26 -/P 1282 0 R -/Pg 13 0 R -/S /P ->> -endobj -342 0 obj -<< -/K 27 -/P 1283 0 R -/Pg 13 0 R -/S /P ->> -endobj -343 0 obj -<< -/Alt (ZZMATTEXT) -/K 28 -/P 1283 0 R -/Pg 13 0 R -/S /P ->> -endobj -344 0 obj -<< -/K 29 -/P 1284 0 R -/Pg 13 0 R -/S /P ->> -endobj -345 0 obj -<< -/Alt (POSNR_VL) -/K 30 -/P 1284 0 R -/Pg 13 0 R -/S /P ->> -endobj -346 0 obj -<< -/K 31 -/P 1285 0 R -/Pg 13 0 R -/S /P ->> -endobj -347 0 obj -<< -/Alt (EAN11) -/K 32 -/P 1285 0 R -/Pg 13 0 R -/S /P ->> -endobj -348 0 obj -<< -/K 33 -/P 1286 0 R -/Pg 13 0 R -/S /P ->> -endobj -349 0 obj -<< -/Alt (BISMT) -/K 34 -/P 1286 0 R -/Pg 13 0 R -/S /P ->> -endobj -350 0 obj -<< -/K 35 -/P 1287 0 R -/Pg 13 0 R -/S /P ->> -endobj -351 0 obj -<< -/Alt (FKIMG) -/K 36 -/P 1287 0 R -/Pg 13 0 R -/S /P ->> -endobj -352 0 obj -<< -/K 37 -/P 1288 0 R -/Pg 13 0 R -/S /P ->> -endobj -353 0 obj -<< -/Alt (VRKME) -/K 38 -/P 1288 0 R -/Pg 13 0 R -/S /P ->> -endobj -354 0 obj -<< -/K 39 -/P 1289 0 R -/Pg 13 0 R -/S /P ->> -endobj -355 0 obj -<< -/Alt (PREIS_VF) -/K 40 -/P 1289 0 R -/Pg 13 0 R -/S /P ->> -endobj -356 0 obj -<< -/K 41 -/P 1290 0 R -/Pg 13 0 R -/S /P ->> -endobj -357 0 obj -<< -/Alt (PEINH_VF) -/K 42 -/P 1290 0 R -/Pg 13 0 R -/S /P ->> -endobj -358 0 obj -<< -/K 43 -/P 1291 0 R -/Pg 13 0 R -/S /P ->> -endobj -359 0 obj -<< -/Alt (POSPREIS_VF) -/K 44 -/P 1291 0 R -/Pg 13 0 R -/S /P ->> -endobj -360 0 obj -<< -/K 45 -/P 1292 0 R -/Pg 13 0 R -/S /P ->> -endobj -361 0 obj -<< -/K 46 -/P 1293 0 R -/Pg 13 0 R -/S /P ->> -endobj -362 0 obj -<< -/Alt (POSNR_VF) -/K 47 -/P 1293 0 R -/Pg 13 0 R -/S /P ->> -endobj -363 0 obj -<< -/K 48 -/P 1294 0 R -/Pg 13 0 R -/S /P ->> -endobj -364 0 obj -<< -/Alt (MATNR) -/K 49 -/P 1294 0 R -/Pg 13 0 R -/S /P ->> -endobj -365 0 obj -<< -/K 50 -/P 1295 0 R -/Pg 13 0 R -/S /P ->> -endobj -366 0 obj -<< -/Alt (ZZMATTEXT) -/K 51 -/P 1295 0 R -/Pg 13 0 R -/S /P ->> -endobj -367 0 obj -<< -/K 52 -/P 1296 0 R -/Pg 13 0 R -/S /P ->> -endobj -368 0 obj -<< -/Alt (POSNR_VL) -/K 53 -/P 1296 0 R -/Pg 13 0 R -/S /P ->> -endobj -369 0 obj -<< -/K 54 -/P 1297 0 R -/Pg 13 0 R -/S /P ->> -endobj -370 0 obj -<< -/Alt (EAN11) -/K 55 -/P 1297 0 R -/Pg 13 0 R -/S /P ->> -endobj -371 0 obj -<< -/K 56 -/P 1298 0 R -/Pg 13 0 R -/S /P ->> -endobj -372 0 obj -<< -/Alt (BISMT) -/K 57 -/P 1298 0 R -/Pg 13 0 R -/S /P ->> -endobj -373 0 obj -<< -/K 58 -/P 1299 0 R -/Pg 13 0 R -/S /P ->> -endobj -374 0 obj -<< -/Alt (FKIMG) -/K 59 -/P 1299 0 R -/Pg 13 0 R -/S /P ->> -endobj -375 0 obj -<< -/K 60 -/P 1300 0 R -/Pg 13 0 R -/S /P ->> -endobj -376 0 obj -<< -/Alt (VRKME) -/K 61 -/P 1300 0 R -/Pg 13 0 R -/S /P ->> -endobj -377 0 obj -<< -/K 62 -/P 1301 0 R -/Pg 13 0 R -/S /P ->> -endobj -378 0 obj -<< -/Alt (PREIS_VF) -/K 63 -/P 1301 0 R -/Pg 13 0 R -/S /P ->> -endobj -379 0 obj -<< -/K 64 -/P 1302 0 R -/Pg 13 0 R -/S /P ->> -endobj -380 0 obj -<< -/Alt (PEINH_VF) -/K 65 -/P 1302 0 R -/Pg 13 0 R -/S /P ->> -endobj -381 0 obj -<< -/K 66 -/P 1303 0 R -/Pg 13 0 R -/S /P ->> -endobj -382 0 obj -<< -/Alt (POSPREIS_VF) -/K 67 -/P 1303 0 R -/Pg 13 0 R -/S /P ->> -endobj -383 0 obj -<< -/K 68 -/P 1304 0 R -/Pg 13 0 R -/S /P ->> -endobj -384 0 obj -<< -/K 69 -/P 1305 0 R -/Pg 13 0 R -/S /P ->> -endobj -385 0 obj -<< -/K 70 -/P 1306 0 R -/Pg 13 0 R -/S /P ->> -endobj -386 0 obj -<< -/Alt (ZUSCHLAGSWERT) -/K 71 -/P 1306 0 R -/Pg 13 0 R -/S /P ->> -endobj -387 0 obj -<< -/K 72 -/P 1307 0 R -/Pg 13 0 R -/S /P ->> -endobj -388 0 obj -<< -/Alt (POSNR_VF) -/K 73 -/P 1307 0 R -/Pg 13 0 R -/S /P ->> -endobj -389 0 obj -<< -/K 74 -/P 1308 0 R -/Pg 13 0 R -/S /P ->> -endobj -390 0 obj -<< -/Alt (MATNR) -/K 75 -/P 1308 0 R -/Pg 13 0 R -/S /P ->> -endobj -391 0 obj -<< -/K 76 -/P 1309 0 R -/Pg 13 0 R -/S /P ->> -endobj -392 0 obj -<< -/Alt (ZZMATTEXT) -/K 77 -/P 1309 0 R -/Pg 13 0 R -/S /P ->> -endobj -393 0 obj -<< -/K 78 -/P 1310 0 R -/Pg 13 0 R -/S /P ->> -endobj -394 0 obj -<< -/Alt (POSNR_VL) -/K 79 -/P 1310 0 R -/Pg 13 0 R -/S /P ->> -endobj -395 0 obj -<< -/K 80 -/P 1311 0 R -/Pg 13 0 R -/S /P ->> -endobj -396 0 obj -<< -/Alt (EAN11) -/K 81 -/P 1311 0 R -/Pg 13 0 R -/S /P ->> -endobj -397 0 obj -<< -/K 82 -/P 1312 0 R -/Pg 13 0 R -/S /P ->> -endobj -398 0 obj -<< -/Alt (BISMT) -/K 83 -/P 1312 0 R -/Pg 13 0 R -/S /P ->> -endobj -399 0 obj -<< -/K 84 -/P 1313 0 R -/Pg 13 0 R -/S /P ->> -endobj -400 0 obj -<< -/Alt (FKIMG) -/K 85 -/P 1313 0 R -/Pg 13 0 R -/S /P ->> -endobj -401 0 obj -<< -/K 86 -/P 1314 0 R -/Pg 13 0 R -/S /P ->> -endobj -402 0 obj -<< -/Alt (VRKME) -/K 87 -/P 1314 0 R -/Pg 13 0 R -/S /P ->> -endobj -403 0 obj -<< -/K 88 -/P 1315 0 R -/Pg 13 0 R -/S /P ->> -endobj -404 0 obj -<< -/Alt (PREIS_VF) -/K 89 -/P 1315 0 R -/Pg 13 0 R -/S /P ->> -endobj -405 0 obj -<< -/K 90 -/P 1316 0 R -/Pg 13 0 R -/S /P ->> -endobj -406 0 obj -<< -/Alt (PEINH_VF) -/K 91 -/P 1316 0 R -/Pg 13 0 R -/S /P ->> -endobj -407 0 obj -<< -/K 92 -/P 1317 0 R -/Pg 13 0 R -/S /P ->> -endobj -408 0 obj -<< -/Alt (POSPREIS_VF) -/K 93 -/P 1317 0 R -/Pg 13 0 R -/S /P ->> -endobj -409 0 obj -<< -/K 94 -/P 1318 0 R -/Pg 13 0 R -/S /P ->> -endobj -410 0 obj -<< -/K 95 -/P 1319 0 R -/Pg 13 0 R -/S /P ->> -endobj -411 0 obj -<< -/Alt (POSNR_VF) -/K 96 -/P 1319 0 R -/Pg 13 0 R -/S /P ->> -endobj -412 0 obj -<< -/K 97 -/P 1320 0 R -/Pg 13 0 R -/S /P ->> -endobj -413 0 obj -<< -/Alt (MATNR) -/K 98 -/P 1320 0 R -/Pg 13 0 R -/S /P ->> -endobj -414 0 obj -<< -/K 99 -/P 1321 0 R -/Pg 13 0 R -/S /P ->> -endobj -415 0 obj -<< -/Alt (ZZMATTEXT) -/K 100 -/P 1321 0 R -/Pg 13 0 R -/S /P ->> -endobj -416 0 obj -<< -/K 101 -/P 1322 0 R -/Pg 13 0 R -/S /P ->> -endobj -417 0 obj -<< -/Alt (POSNR_VL) -/K 102 -/P 1322 0 R -/Pg 13 0 R -/S /P ->> -endobj -418 0 obj -<< -/Alt (EAN11) -/K 103 -/P 1323 0 R -/Pg 13 0 R -/S /P ->> -endobj -419 0 obj -<< -/K 104 -/P 1324 0 R -/Pg 13 0 R -/S /P ->> -endobj -420 0 obj -<< -/Alt (BISMT) -/K 105 -/P 1324 0 R -/Pg 13 0 R -/S /P ->> -endobj -421 0 obj -<< -/K 106 -/P 1325 0 R -/Pg 13 0 R -/S /P ->> -endobj -422 0 obj -<< -/Alt (FKIMG) -/K 107 -/P 1325 0 R -/Pg 13 0 R -/S /P ->> -endobj -423 0 obj -<< -/K 108 -/P 1326 0 R -/Pg 13 0 R -/S /P ->> -endobj -424 0 obj -<< -/Alt (VRKME) -/K 109 -/P 1326 0 R -/Pg 13 0 R -/S /P ->> -endobj -425 0 obj -<< -/K 110 -/P 1327 0 R -/Pg 13 0 R -/S /P ->> -endobj -426 0 obj -<< -/Alt (PREIS_VF) -/K 111 -/P 1327 0 R -/Pg 13 0 R -/S /P ->> -endobj -427 0 obj -<< -/K 112 -/P 1328 0 R -/Pg 13 0 R -/S /P ->> -endobj -428 0 obj -<< -/Alt (PEINH_VF) -/K 113 -/P 1328 0 R -/Pg 13 0 R -/S /P ->> -endobj -429 0 obj -<< -/K 114 -/P 1329 0 R -/Pg 13 0 R -/S /P ->> -endobj -430 0 obj -<< -/Alt (POSPREIS_VF) -/K 115 -/P 1329 0 R -/Pg 13 0 R -/S /P ->> -endobj -431 0 obj -<< -/K 116 -/P 1330 0 R -/Pg 13 0 R -/S /P ->> -endobj -432 0 obj -<< -/K 117 -/P 1331 0 R -/Pg 13 0 R -/S /P ->> -endobj -433 0 obj -<< -/K 118 -/P 1332 0 R -/Pg 13 0 R -/S /P ->> -endobj -434 0 obj -<< -/Alt (ZUSCHLAGSWERT) -/K 119 -/P 1332 0 R -/Pg 13 0 R -/S /P ->> -endobj -435 0 obj -<< -/K 120 -/P 1333 0 R -/Pg 13 0 R -/S /P ->> -endobj -436 0 obj -<< -/Alt (POSNR_VF) -/K 121 -/P 1333 0 R -/Pg 13 0 R -/S /P ->> -endobj -437 0 obj -<< -/K 122 -/P 1334 0 R -/Pg 13 0 R -/S /P ->> -endobj -438 0 obj -<< -/Alt (MATNR) -/K 123 -/P 1334 0 R -/Pg 13 0 R -/S /P ->> -endobj -439 0 obj -<< -/K 124 -/P 1335 0 R -/Pg 13 0 R -/S /P ->> -endobj -440 0 obj -<< -/Alt (ZZMATTEXT) -/K 125 -/P 1335 0 R -/Pg 13 0 R -/S /P ->> -endobj -441 0 obj -<< -/K 126 -/P 1336 0 R -/Pg 13 0 R -/S /P ->> -endobj -442 0 obj -<< -/Alt (POSNR_VL) -/K 127 -/P 1336 0 R -/Pg 13 0 R -/S /P ->> -endobj -443 0 obj -<< -/Alt (EAN11) -/K 128 -/P 1337 0 R -/Pg 13 0 R -/S /P ->> -endobj -444 0 obj -<< -/K 129 -/P 1338 0 R -/Pg 13 0 R -/S /P ->> -endobj -445 0 obj -<< -/Alt (BISMT) -/K 130 -/P 1338 0 R -/Pg 13 0 R -/S /P ->> -endobj -446 0 obj -<< -/K 131 -/P 1339 0 R -/Pg 13 0 R -/S /P ->> -endobj -447 0 obj -<< -/Alt (FKIMG) -/K 132 -/P 1339 0 R -/Pg 13 0 R -/S /P ->> -endobj -448 0 obj -<< -/K 133 -/P 1340 0 R -/Pg 13 0 R -/S /P ->> -endobj -449 0 obj -<< -/Alt (VRKME) -/K 134 -/P 1340 0 R -/Pg 13 0 R -/S /P ->> -endobj -450 0 obj -<< -/K 135 -/P 1341 0 R -/Pg 13 0 R -/S /P ->> -endobj -451 0 obj -<< -/Alt (PREIS_VF) -/K 136 -/P 1341 0 R -/Pg 13 0 R -/S /P ->> -endobj -452 0 obj -<< -/K 137 -/P 1342 0 R -/Pg 13 0 R -/S /P ->> -endobj -453 0 obj -<< -/Alt (PEINH_VF) -/K 138 -/P 1342 0 R -/Pg 13 0 R -/S /P ->> -endobj -454 0 obj -<< -/K 139 -/P 1343 0 R -/Pg 13 0 R -/S /P ->> -endobj -455 0 obj -<< -/Alt (POSPREIS_VF) -/K 140 -/P 1343 0 R -/Pg 13 0 R -/S /P ->> -endobj -456 0 obj -<< -/K 141 -/P 1344 0 R -/Pg 13 0 R -/S /P ->> -endobj -457 0 obj -<< -/K 142 -/P 1345 0 R -/Pg 13 0 R -/S /P ->> -endobj -458 0 obj -<< -/K 143 -/P 1346 0 R -/Pg 13 0 R -/S /P ->> -endobj -459 0 obj -<< -/Alt (ZUSCHLAGSWERT) -/K 144 -/P 1346 0 R -/Pg 13 0 R -/S /P ->> -endobj -460 0 obj -<< -/K 145 -/P 1347 0 R -/Pg 13 0 R -/S /P ->> -endobj -461 0 obj -<< -/Alt (POSNR_VF) -/K 146 -/P 1347 0 R -/Pg 13 0 R -/S /P ->> -endobj -462 0 obj -<< -/K 147 -/P 1348 0 R -/Pg 13 0 R -/S /P ->> -endobj -463 0 obj -<< -/Alt (MATNR) -/K 148 -/P 1348 0 R -/Pg 13 0 R -/S /P ->> -endobj -464 0 obj -<< -/K 149 -/P 1349 0 R -/Pg 13 0 R -/S /P ->> -endobj -465 0 obj -<< -/Alt (ZZMATTEXT) -/K 150 -/P 1349 0 R -/Pg 13 0 R -/S /P ->> -endobj -466 0 obj -<< -/K 151 -/P 1350 0 R -/Pg 13 0 R -/S /P ->> -endobj -467 0 obj -<< -/Alt (POSNR_VL) -/K 152 -/P 1350 0 R -/Pg 13 0 R -/S /P ->> -endobj -468 0 obj -<< -/Alt (EAN11) -/K 153 -/P 1351 0 R -/Pg 13 0 R -/S /P ->> -endobj -469 0 obj -<< -/K 154 -/P 1352 0 R -/Pg 13 0 R -/S /P ->> -endobj -470 0 obj -<< -/Alt (BISMT) -/K 155 -/P 1352 0 R -/Pg 13 0 R -/S /P ->> -endobj -471 0 obj -<< -/K 156 -/P 1353 0 R -/Pg 13 0 R -/S /P ->> -endobj -472 0 obj -<< -/Alt (FKIMG) -/K 157 -/P 1353 0 R -/Pg 13 0 R -/S /P ->> -endobj -473 0 obj -<< -/K 158 -/P 1354 0 R -/Pg 13 0 R -/S /P ->> -endobj -474 0 obj -<< -/Alt (VRKME) -/K 159 -/P 1354 0 R -/Pg 13 0 R -/S /P ->> -endobj -475 0 obj -<< -/K 160 -/P 1355 0 R -/Pg 13 0 R -/S /P ->> -endobj -476 0 obj -<< -/Alt (PREIS_VF) -/K 161 -/P 1355 0 R -/Pg 13 0 R -/S /P ->> -endobj -477 0 obj -<< -/K 162 -/P 1356 0 R -/Pg 13 0 R -/S /P ->> -endobj -478 0 obj -<< -/Alt (PEINH_VF) -/K 163 -/P 1356 0 R -/Pg 13 0 R -/S /P ->> -endobj -479 0 obj -<< -/K 164 -/P 1357 0 R -/Pg 13 0 R -/S /P ->> -endobj -480 0 obj -<< -/Alt (POSPREIS_VF) -/K 165 -/P 1357 0 R -/Pg 13 0 R -/S /P ->> -endobj -481 0 obj -<< -/K 166 -/P 1358 0 R -/Pg 13 0 R -/S /P ->> -endobj -482 0 obj -<< -/K 167 -/P 1359 0 R -/Pg 13 0 R -/S /P ->> -endobj -483 0 obj -<< -/K 168 -/P 1360 0 R -/Pg 13 0 R -/S /P ->> -endobj -484 0 obj -<< -/Alt (ZUSCHLAGSWERT) -/K 169 -/P 1360 0 R -/Pg 13 0 R -/S /P ->> -endobj -485 0 obj -<< -/K 170 -/P 1361 0 R -/Pg 13 0 R -/S /P ->> -endobj -486 0 obj -<< -/Alt (POSNR_VF) -/K 171 -/P 1361 0 R -/Pg 13 0 R -/S /P ->> -endobj -487 0 obj -<< -/K 172 -/P 1362 0 R -/Pg 13 0 R -/S /P ->> -endobj -488 0 obj -<< -/Alt (MATNR) -/K 173 -/P 1362 0 R -/Pg 13 0 R -/S /P ->> -endobj -489 0 obj -<< -/K 174 -/P 1363 0 R -/Pg 13 0 R -/S /P ->> -endobj -490 0 obj -<< -/Alt (ZZMATTEXT) -/K 175 -/P 1363 0 R -/Pg 13 0 R -/S /P ->> -endobj -491 0 obj -<< -/K 176 -/P 1364 0 R -/Pg 13 0 R -/S /P ->> -endobj -492 0 obj -<< -/Alt (POSNR_VL) -/K 177 -/P 1364 0 R -/Pg 13 0 R -/S /P ->> -endobj -493 0 obj -<< -/K 178 -/P 1365 0 R -/Pg 13 0 R -/S /P ->> -endobj -494 0 obj -<< -/Alt (EAN11) -/K 179 -/P 1365 0 R -/Pg 13 0 R -/S /P ->> -endobj -495 0 obj -<< -/K 180 -/P 1366 0 R -/Pg 13 0 R -/S /P ->> -endobj -496 0 obj -<< -/Alt (BISMT) -/K 181 -/P 1366 0 R -/Pg 13 0 R -/S /P ->> -endobj -497 0 obj -<< -/K 182 -/P 1367 0 R -/Pg 13 0 R -/S /P ->> -endobj -498 0 obj -<< -/Alt (FKIMG) -/K 183 -/P 1367 0 R -/Pg 13 0 R -/S /P ->> -endobj -499 0 obj -<< -/K 184 -/P 1368 0 R -/Pg 13 0 R -/S /P ->> -endobj -500 0 obj -<< -/Alt (VRKME) -/K 185 -/P 1368 0 R -/Pg 13 0 R -/S /P ->> -endobj -501 0 obj -<< -/K 186 -/P 1369 0 R -/Pg 13 0 R -/S /P ->> -endobj -502 0 obj -<< -/Alt (PREIS_VF) -/K 187 -/P 1369 0 R -/Pg 13 0 R -/S /P ->> -endobj -503 0 obj -<< -/K 188 -/P 1370 0 R -/Pg 13 0 R -/S /P ->> -endobj -504 0 obj -<< -/Alt (PEINH_VF) -/K 189 -/P 1370 0 R -/Pg 13 0 R -/S /P ->> -endobj -505 0 obj -<< -/K 190 -/P 1371 0 R -/Pg 13 0 R -/S /P ->> -endobj -506 0 obj -<< -/Alt (POSPREIS_VF) -/K 191 -/P 1371 0 R -/Pg 13 0 R -/S /P ->> -endobj -507 0 obj -<< -/K 192 -/P 1372 0 R -/Pg 13 0 R -/S /P ->> -endobj -508 0 obj -<< -/K 193 -/P 1373 0 R -/Pg 13 0 R -/S /P ->> -endobj -509 0 obj -<< -/Alt (POSNR_VF) -/K 194 -/P 1373 0 R -/Pg 13 0 R -/S /P ->> -endobj -510 0 obj -<< -/K 195 -/P 1374 0 R -/Pg 13 0 R -/S /P ->> -endobj -511 0 obj -<< -/Alt (MATNR) -/K 196 -/P 1374 0 R -/Pg 13 0 R -/S /P ->> -endobj -512 0 obj -<< -/K 197 -/P 1375 0 R -/Pg 13 0 R -/S /P ->> -endobj -513 0 obj -<< -/Alt (ZZMATTEXT) -/K 198 -/P 1375 0 R -/Pg 13 0 R -/S /P ->> -endobj -514 0 obj -<< -/K 199 -/P 1376 0 R -/Pg 13 0 R -/S /P ->> -endobj -515 0 obj -<< -/Alt (POSNR_VL) -/K 200 -/P 1376 0 R -/Pg 13 0 R -/S /P ->> -endobj -516 0 obj -<< -/K 201 -/P 1377 0 R -/Pg 13 0 R -/S /P ->> -endobj -517 0 obj -<< -/Alt (EAN11) -/K 202 -/P 1377 0 R -/Pg 13 0 R -/S /P ->> -endobj -518 0 obj -<< -/K 203 -/P 1378 0 R -/Pg 13 0 R -/S /P ->> -endobj -519 0 obj -<< -/Alt (BISMT) -/K 204 -/P 1378 0 R -/Pg 13 0 R -/S /P ->> -endobj -520 0 obj -<< -/K 205 -/P 1379 0 R -/Pg 13 0 R -/S /P ->> -endobj -521 0 obj -<< -/Alt (FKIMG) -/K 206 -/P 1379 0 R -/Pg 13 0 R -/S /P ->> -endobj -522 0 obj -<< -/K 207 -/P 1380 0 R -/Pg 13 0 R -/S /P ->> -endobj -523 0 obj -<< -/Alt (VRKME) -/K 208 -/P 1380 0 R -/Pg 13 0 R -/S /P ->> -endobj -524 0 obj -<< -/K 209 -/P 1381 0 R -/Pg 13 0 R -/S /P ->> -endobj -525 0 obj -<< -/Alt (PREIS_VF) -/K 210 -/P 1381 0 R -/Pg 13 0 R -/S /P ->> -endobj -526 0 obj -<< -/K 211 -/P 1382 0 R -/Pg 13 0 R -/S /P ->> -endobj -527 0 obj -<< -/Alt (PEINH_VF) -/K 212 -/P 1382 0 R -/Pg 13 0 R -/S /P ->> -endobj -528 0 obj -<< -/K 213 -/P 1383 0 R -/Pg 13 0 R -/S /P ->> -endobj -529 0 obj -<< -/Alt (POSPREIS_VF) -/K 214 -/P 1383 0 R -/Pg 13 0 R -/S /P ->> -endobj -530 0 obj -<< -/K 215 -/P 1384 0 R -/Pg 13 0 R -/S /P ->> -endobj -531 0 obj -<< -/K 216 -/P 1385 0 R -/Pg 13 0 R -/S /P ->> -endobj -532 0 obj -<< -/Alt (POSNR_VF) -/K 217 -/P 1385 0 R -/Pg 13 0 R -/S /P ->> -endobj -533 0 obj -<< -/K 218 -/P 1386 0 R -/Pg 13 0 R -/S /P ->> -endobj -534 0 obj -<< -/Alt (MATNR) -/K 219 -/P 1386 0 R -/Pg 13 0 R -/S /P ->> -endobj -535 0 obj -<< -/K 220 -/P 1387 0 R -/Pg 13 0 R -/S /P ->> -endobj -536 0 obj -<< -/Alt (ZZMATTEXT) -/K 221 -/P 1387 0 R -/Pg 13 0 R -/S /P ->> -endobj -537 0 obj -<< -/K 222 -/P 1388 0 R -/Pg 13 0 R -/S /P ->> -endobj -538 0 obj -<< -/Alt (POSNR_VL) -/K 223 -/P 1388 0 R -/Pg 13 0 R -/S /P ->> -endobj -539 0 obj -<< -/K 224 -/P 1389 0 R -/Pg 13 0 R -/S /P ->> -endobj -540 0 obj -<< -/Alt (EAN11) -/K 225 -/P 1389 0 R -/Pg 13 0 R -/S /P ->> -endobj -541 0 obj -<< -/K 226 -/P 1390 0 R -/Pg 13 0 R -/S /P ->> -endobj -542 0 obj -<< -/Alt (BISMT) -/K 227 -/P 1390 0 R -/Pg 13 0 R -/S /P ->> -endobj -543 0 obj -<< -/K 228 -/P 1391 0 R -/Pg 13 0 R -/S /P ->> -endobj -544 0 obj -<< -/Alt (FKIMG) -/K 229 -/P 1391 0 R -/Pg 13 0 R -/S /P ->> -endobj -545 0 obj -<< -/K 230 -/P 1392 0 R -/Pg 13 0 R -/S /P ->> -endobj -546 0 obj -<< -/Alt (VRKME) -/K 231 -/P 1392 0 R -/Pg 13 0 R -/S /P ->> -endobj -547 0 obj -<< -/K 232 -/P 1393 0 R -/Pg 13 0 R -/S /P ->> -endobj -548 0 obj -<< -/Alt (PREIS_VF) -/K 233 -/P 1393 0 R -/Pg 13 0 R -/S /P ->> -endobj -549 0 obj -<< -/K 234 -/P 1394 0 R -/Pg 13 0 R -/S /P ->> -endobj -550 0 obj -<< -/Alt (PEINH_VF) -/K 235 -/P 1394 0 R -/Pg 13 0 R -/S /P ->> -endobj -551 0 obj -<< -/K 236 -/P 1395 0 R -/Pg 13 0 R -/S /P ->> -endobj -552 0 obj -<< -/Alt (POSPREIS_VF) -/K 237 -/P 1395 0 R -/Pg 13 0 R -/S /P ->> -endobj -553 0 obj -<< -/K 238 -/P 1396 0 R -/Pg 13 0 R -/S /P ->> -endobj -554 0 obj -<< -/K 239 -/P 1397 0 R -/Pg 13 0 R -/S /P ->> -endobj -555 0 obj -<< -/Alt (POSNR_VF) -/K 240 -/P 1397 0 R -/Pg 13 0 R -/S /P ->> -endobj -556 0 obj -<< -/K 241 -/P 1398 0 R -/Pg 13 0 R -/S /P ->> -endobj -557 0 obj -<< -/Alt (MATNR) -/K 242 -/P 1398 0 R -/Pg 13 0 R -/S /P ->> -endobj -558 0 obj -<< -/K 243 -/P 1399 0 R -/Pg 13 0 R -/S /P ->> -endobj -559 0 obj -<< -/Alt (ZZMATTEXT) -/K 244 -/P 1399 0 R -/Pg 13 0 R -/S /P ->> -endobj -560 0 obj -<< -/K 245 -/P 1400 0 R -/Pg 13 0 R -/S /P ->> -endobj -561 0 obj -<< -/Alt (POSNR_VL) -/K 246 -/P 1400 0 R -/Pg 13 0 R -/S /P ->> -endobj -562 0 obj -<< -/K 247 -/P 1401 0 R -/Pg 13 0 R -/S /P ->> -endobj -563 0 obj -<< -/Alt (EAN11) -/K 248 -/P 1401 0 R -/Pg 13 0 R -/S /P ->> -endobj -564 0 obj -<< -/K 249 -/P 1402 0 R -/Pg 13 0 R -/S /P ->> -endobj -565 0 obj -<< -/Alt (BISMT) -/K 250 -/P 1402 0 R -/Pg 13 0 R -/S /P ->> -endobj -566 0 obj -<< -/K 251 -/P 1403 0 R -/Pg 13 0 R -/S /P ->> -endobj -567 0 obj -<< -/Alt (FKIMG) -/K 252 -/P 1403 0 R -/Pg 13 0 R -/S /P ->> -endobj -568 0 obj -<< -/K 253 -/P 1404 0 R -/Pg 13 0 R -/S /P ->> -endobj -569 0 obj -<< -/Alt (VRKME) -/K 254 -/P 1404 0 R -/Pg 13 0 R -/S /P ->> -endobj -570 0 obj -<< -/K 255 -/P 1405 0 R -/Pg 13 0 R -/S /P ->> -endobj -571 0 obj -<< -/Alt (PREIS_VF) -/K 256 -/P 1405 0 R -/Pg 13 0 R -/S /P ->> -endobj -572 0 obj -<< -/K 257 -/P 1406 0 R -/Pg 13 0 R -/S /P ->> -endobj -573 0 obj -<< -/Alt (PEINH_VF) -/K 258 -/P 1406 0 R -/Pg 13 0 R -/S /P ->> -endobj -574 0 obj -<< -/K 259 -/P 1407 0 R -/Pg 13 0 R -/S /P ->> -endobj -575 0 obj -<< -/Alt (POSPREIS_VF) -/K 260 -/P 1407 0 R -/Pg 13 0 R -/S /P ->> -endobj -576 0 obj -<< -/K 261 -/P 1408 0 R -/Pg 13 0 R -/S /P ->> -endobj -577 0 obj -<< -/K 262 -/P 1409 0 R -/Pg 13 0 R -/S /P ->> -endobj -578 0 obj -<< -/Alt (POSNR_VF) -/K 263 -/P 1409 0 R -/Pg 13 0 R -/S /P ->> -endobj -579 0 obj -<< -/K 264 -/P 1410 0 R -/Pg 13 0 R -/S /P ->> -endobj -580 0 obj -<< -/Alt (MATNR) -/K 265 -/P 1410 0 R -/Pg 13 0 R -/S /P ->> -endobj -581 0 obj -<< -/K 266 -/P 1411 0 R -/Pg 13 0 R -/S /P ->> -endobj -582 0 obj -<< -/Alt (ZZMATTEXT) -/K 267 -/P 1411 0 R -/Pg 13 0 R -/S /P ->> -endobj -583 0 obj -<< -/K 268 -/P 1412 0 R -/Pg 13 0 R -/S /P ->> -endobj -584 0 obj -<< -/Alt (POSNR_VL) -/K 269 -/P 1412 0 R -/Pg 13 0 R -/S /P ->> -endobj -585 0 obj -<< -/K 270 -/P 1413 0 R -/Pg 13 0 R -/S /P ->> -endobj -586 0 obj -<< -/Alt (EAN11) -/K 271 -/P 1413 0 R -/Pg 13 0 R -/S /P ->> -endobj -587 0 obj -<< -/K 272 -/P 1414 0 R -/Pg 13 0 R -/S /P ->> -endobj -588 0 obj -<< -/Alt (BISMT) -/K 273 -/P 1414 0 R -/Pg 13 0 R -/S /P ->> -endobj -589 0 obj -<< -/K 274 -/P 1415 0 R -/Pg 13 0 R -/S /P ->> -endobj -590 0 obj -<< -/Alt (FKIMG) -/K 275 -/P 1415 0 R -/Pg 13 0 R -/S /P ->> -endobj -591 0 obj -<< -/K 276 -/P 1416 0 R -/Pg 13 0 R -/S /P ->> -endobj -592 0 obj -<< -/Alt (VRKME) -/K 277 -/P 1416 0 R -/Pg 13 0 R -/S /P ->> -endobj -593 0 obj -<< -/K 278 -/P 1417 0 R -/Pg 13 0 R -/S /P ->> -endobj -594 0 obj -<< -/Alt (PREIS_VF) -/K 279 -/P 1417 0 R -/Pg 13 0 R -/S /P ->> -endobj -595 0 obj -<< -/K 280 -/P 1418 0 R -/Pg 13 0 R -/S /P ->> -endobj -596 0 obj -<< -/Alt (PEINH_VF) -/K 281 -/P 1418 0 R -/Pg 13 0 R -/S /P ->> -endobj -597 0 obj -<< -/K 282 -/P 1419 0 R -/Pg 13 0 R -/S /P ->> -endobj -598 0 obj -<< -/Alt (POSPREIS_VF) -/K 283 -/P 1419 0 R -/Pg 13 0 R -/S /P ->> -endobj -599 0 obj -<< -/K 284 -/P 1420 0 R -/Pg 13 0 R -/S /P ->> -endobj -600 0 obj -<< -/K 285 -/P 1421 0 R -/Pg 13 0 R -/S /P ->> -endobj -601 0 obj -<< -/Alt (POSNR_VF) -/K 286 -/P 1421 0 R -/Pg 13 0 R -/S /P ->> -endobj -602 0 obj -<< -/K 287 -/P 1422 0 R -/Pg 13 0 R -/S /P ->> -endobj -603 0 obj -<< -/Alt (MATNR) -/K 288 -/P 1422 0 R -/Pg 13 0 R -/S /P ->> -endobj -604 0 obj -<< -/K 289 -/P 1423 0 R -/Pg 13 0 R -/S /P ->> -endobj -605 0 obj -<< -/Alt (ZZMATTEXT) -/K 290 -/P 1423 0 R -/Pg 13 0 R -/S /P ->> -endobj -606 0 obj -<< -/K 291 -/P 1424 0 R -/Pg 13 0 R -/S /P ->> -endobj -607 0 obj -<< -/Alt (POSNR_VL) -/K 292 -/P 1424 0 R -/Pg 13 0 R -/S /P ->> -endobj -608 0 obj -<< -/K 293 -/P 1425 0 R -/Pg 13 0 R -/S /P ->> -endobj -609 0 obj -<< -/Alt (EAN11) -/K 294 -/P 1425 0 R -/Pg 13 0 R -/S /P ->> -endobj -610 0 obj -<< -/K 295 -/P 1426 0 R -/Pg 13 0 R -/S /P ->> -endobj -611 0 obj -<< -/Alt (BISMT) -/K 296 -/P 1426 0 R -/Pg 13 0 R -/S /P ->> -endobj -612 0 obj -<< -/K 297 -/P 1427 0 R -/Pg 13 0 R -/S /P ->> -endobj -613 0 obj -<< -/Alt (FKIMG) -/K 298 -/P 1427 0 R -/Pg 13 0 R -/S /P ->> -endobj -614 0 obj -<< -/K 299 -/P 1428 0 R -/Pg 13 0 R -/S /P ->> -endobj -615 0 obj -<< -/Alt (VRKME) -/K 300 -/P 1428 0 R -/Pg 13 0 R -/S /P ->> -endobj -616 0 obj -<< -/K 301 -/P 1429 0 R -/Pg 13 0 R -/S /P ->> -endobj -617 0 obj -<< -/Alt (PREIS_VF) -/K 302 -/P 1429 0 R -/Pg 13 0 R -/S /P ->> -endobj -618 0 obj -<< -/K 303 -/P 1430 0 R -/Pg 13 0 R -/S /P ->> -endobj -619 0 obj -<< -/Alt (PEINH_VF) -/K 304 -/P 1430 0 R -/Pg 13 0 R -/S /P ->> -endobj -620 0 obj -<< -/K 305 -/P 1431 0 R -/Pg 13 0 R -/S /P ->> -endobj -621 0 obj -<< -/Alt (POSPREIS_VF) -/K 306 -/P 1431 0 R -/Pg 13 0 R -/S /P ->> -endobj -622 0 obj -<< -/K 307 -/P 1432 0 R -/Pg 13 0 R -/S /P ->> -endobj -623 0 obj -<< -/K 308 -/P 1433 0 R -/Pg 13 0 R -/S /P ->> -endobj -624 0 obj -<< -/Alt (POSNR_VF) -/K 309 -/P 1433 0 R -/Pg 13 0 R -/S /P ->> -endobj -625 0 obj -<< -/K 310 -/P 1434 0 R -/Pg 13 0 R -/S /P ->> -endobj -626 0 obj -<< -/Alt (MATNR) -/K 311 -/P 1434 0 R -/Pg 13 0 R -/S /P ->> -endobj -627 0 obj -<< -/K 312 -/P 1435 0 R -/Pg 13 0 R -/S /P ->> -endobj -628 0 obj -<< -/Alt (ZZMATTEXT) -/K 313 -/P 1435 0 R -/Pg 13 0 R -/S /P ->> -endobj -629 0 obj -<< -/K 314 -/P 1436 0 R -/Pg 13 0 R -/S /P ->> -endobj -630 0 obj -<< -/Alt (POSNR_VL) -/K 315 -/P 1436 0 R -/Pg 13 0 R -/S /P ->> -endobj -631 0 obj -<< -/K 316 -/P 1437 0 R -/Pg 13 0 R -/S /P ->> -endobj -632 0 obj -<< -/Alt (EAN11) -/K 317 -/P 1437 0 R -/Pg 13 0 R -/S /P ->> -endobj -633 0 obj -<< -/K 318 -/P 1438 0 R -/Pg 13 0 R -/S /P ->> -endobj -634 0 obj -<< -/Alt (BISMT) -/K 319 -/P 1438 0 R -/Pg 13 0 R -/S /P ->> -endobj -635 0 obj -<< -/K 320 -/P 1439 0 R -/Pg 13 0 R -/S /P ->> -endobj -636 0 obj -<< -/Alt (FKIMG) -/K 321 -/P 1439 0 R -/Pg 13 0 R -/S /P ->> -endobj -637 0 obj -<< -/K 322 -/P 1440 0 R -/Pg 13 0 R -/S /P ->> -endobj -638 0 obj -<< -/Alt (VRKME) -/K 323 -/P 1440 0 R -/Pg 13 0 R -/S /P ->> -endobj -639 0 obj -<< -/K 324 -/P 1441 0 R -/Pg 13 0 R -/S /P ->> -endobj -640 0 obj -<< -/Alt (PREIS_VF) -/K 325 -/P 1441 0 R -/Pg 13 0 R -/S /P ->> -endobj -641 0 obj -<< -/K 326 -/P 1442 0 R -/Pg 13 0 R -/S /P ->> -endobj -642 0 obj -<< -/Alt (PEINH_VF) -/K 327 -/P 1442 0 R -/Pg 13 0 R -/S /P ->> -endobj -643 0 obj -<< -/K 328 -/P 1443 0 R -/Pg 13 0 R -/S /P ->> -endobj -644 0 obj -<< -/Alt (POSPREIS_VF) -/K 329 -/P 1443 0 R -/Pg 13 0 R -/S /P ->> -endobj -645 0 obj -<< -/K 330 -/P 1444 0 R -/Pg 13 0 R -/S /P ->> -endobj -646 0 obj -<< -/K 331 -/P 1445 0 R -/Pg 13 0 R -/S /P ->> -endobj -647 0 obj -<< -/Alt (POSNR_VF) -/K 332 -/P 1445 0 R -/Pg 13 0 R -/S /P ->> -endobj -648 0 obj -<< -/K 333 -/P 1446 0 R -/Pg 13 0 R -/S /P ->> -endobj -649 0 obj -<< -/Alt (MATNR) -/K 334 -/P 1446 0 R -/Pg 13 0 R -/S /P ->> -endobj -650 0 obj -<< -/K 335 -/P 1447 0 R -/Pg 13 0 R -/S /P ->> -endobj -651 0 obj -<< -/Alt (ZZMATTEXT) -/K 336 -/P 1447 0 R -/Pg 13 0 R -/S /P ->> -endobj -652 0 obj -<< -/K 337 -/P 1448 0 R -/Pg 13 0 R -/S /P ->> -endobj -653 0 obj -<< -/Alt (POSNR_VL) -/K 338 -/P 1448 0 R -/Pg 13 0 R -/S /P ->> -endobj -654 0 obj -<< -/K 339 -/P 1449 0 R -/Pg 13 0 R -/S /P ->> -endobj -655 0 obj -<< -/Alt (EAN11) -/K 340 -/P 1449 0 R -/Pg 13 0 R -/S /P ->> -endobj -656 0 obj -<< -/K 341 -/P 1450 0 R -/Pg 13 0 R -/S /P ->> -endobj -657 0 obj -<< -/Alt (BISMT) -/K 342 -/P 1450 0 R -/Pg 13 0 R -/S /P ->> -endobj -658 0 obj -<< -/K 343 -/P 1451 0 R -/Pg 13 0 R -/S /P ->> -endobj -659 0 obj -<< -/Alt (FKIMG) -/K 344 -/P 1451 0 R -/Pg 13 0 R -/S /P ->> -endobj -660 0 obj -<< -/K 345 -/P 1452 0 R -/Pg 13 0 R -/S /P ->> -endobj -661 0 obj -<< -/Alt (VRKME) -/K 346 -/P 1452 0 R -/Pg 13 0 R -/S /P ->> -endobj -662 0 obj -<< -/K 347 -/P 1453 0 R -/Pg 13 0 R -/S /P ->> -endobj -663 0 obj -<< -/Alt (PREIS_VF) -/K 348 -/P 1453 0 R -/Pg 13 0 R -/S /P ->> -endobj -664 0 obj -<< -/K 349 -/P 1454 0 R -/Pg 13 0 R -/S /P ->> -endobj -665 0 obj -<< -/Alt (PEINH_VF) -/K 350 -/P 1454 0 R -/Pg 13 0 R -/S /P ->> -endobj -666 0 obj -<< -/K 351 -/P 1455 0 R -/Pg 13 0 R -/S /P ->> -endobj -667 0 obj -<< -/Alt (POSPREIS_VF) -/K 352 -/P 1455 0 R -/Pg 13 0 R -/S /P ->> -endobj -668 0 obj -<< -/K 353 -/P 1456 0 R -/Pg 13 0 R -/S /P ->> -endobj -669 0 obj -<< -/K 354 -/P 1457 0 R -/Pg 13 0 R -/S /P ->> -endobj -670 0 obj -<< -/Alt (POSNR_VF) -/K 355 -/P 1457 0 R -/Pg 13 0 R -/S /P ->> -endobj -671 0 obj -<< -/K 356 -/P 1458 0 R -/Pg 13 0 R -/S /P ->> -endobj -672 0 obj -<< -/Alt (MATNR) -/K 357 -/P 1458 0 R -/Pg 13 0 R -/S /P ->> -endobj -673 0 obj -<< -/K 358 -/P 1459 0 R -/Pg 13 0 R -/S /P ->> -endobj -674 0 obj -<< -/Alt (ZZMATTEXT) -/K 359 -/P 1459 0 R -/Pg 13 0 R -/S /P ->> -endobj -675 0 obj -<< -/K 360 -/P 1460 0 R -/Pg 13 0 R -/S /P ->> -endobj -676 0 obj -<< -/Alt (POSNR_VL) -/K 361 -/P 1460 0 R -/Pg 13 0 R -/S /P ->> -endobj -677 0 obj -<< -/K 362 -/P 1461 0 R -/Pg 13 0 R -/S /P ->> -endobj -678 0 obj -<< -/Alt (EAN11) -/K 363 -/P 1461 0 R -/Pg 13 0 R -/S /P ->> -endobj -679 0 obj -<< -/K 364 -/P 1462 0 R -/Pg 13 0 R -/S /P ->> -endobj -680 0 obj -<< -/Alt (BISMT) -/K 365 -/P 1462 0 R -/Pg 13 0 R -/S /P ->> -endobj -681 0 obj -<< -/K 366 -/P 1463 0 R -/Pg 13 0 R -/S /P ->> -endobj -682 0 obj -<< -/Alt (FKIMG) -/K 367 -/P 1463 0 R -/Pg 13 0 R -/S /P ->> -endobj -683 0 obj -<< -/K 368 -/P 1464 0 R -/Pg 13 0 R -/S /P ->> -endobj -684 0 obj -<< -/Alt (VRKME) -/K 369 -/P 1464 0 R -/Pg 13 0 R -/S /P ->> -endobj -685 0 obj -<< -/K 370 -/P 1465 0 R -/Pg 13 0 R -/S /P ->> -endobj -686 0 obj -<< -/Alt (PREIS_VF) -/K 371 -/P 1465 0 R -/Pg 13 0 R -/S /P ->> -endobj -687 0 obj -<< -/K 372 -/P 1466 0 R -/Pg 13 0 R -/S /P ->> -endobj -688 0 obj -<< -/Alt (PEINH_VF) -/K 373 -/P 1466 0 R -/Pg 13 0 R -/S /P ->> -endobj -689 0 obj -<< -/K 374 -/P 1467 0 R -/Pg 13 0 R -/S /P ->> -endobj -690 0 obj -<< -/Alt (POSPREIS_VF) -/K 375 -/P 1467 0 R -/Pg 13 0 R -/S /P ->> -endobj -691 0 obj -<< -/K 376 -/P 1468 0 R -/Pg 13 0 R -/S /P ->> -endobj -692 0 obj -<< -/K 377 -/P 1469 0 R -/Pg 13 0 R -/S /P ->> -endobj -693 0 obj -<< -/Alt (POSNR_VF) -/K 378 -/P 1469 0 R -/Pg 13 0 R -/S /P ->> -endobj -694 0 obj -<< -/K 379 -/P 1470 0 R -/Pg 13 0 R -/S /P ->> -endobj -695 0 obj -<< -/Alt (MATNR) -/K 380 -/P 1470 0 R -/Pg 13 0 R -/S /P ->> -endobj -696 0 obj -<< -/K 381 -/P 1471 0 R -/Pg 13 0 R -/S /P ->> -endobj -697 0 obj -<< -/Alt (ZZMATTEXT) -/K 382 -/P 1471 0 R -/Pg 13 0 R -/S /P ->> -endobj -698 0 obj -<< -/K 383 -/P 1472 0 R -/Pg 13 0 R -/S /P ->> -endobj -699 0 obj -<< -/Alt (POSNR_VL) -/K 384 -/P 1472 0 R -/Pg 13 0 R -/S /P ->> -endobj -700 0 obj -<< -/K 385 -/P 1473 0 R -/Pg 13 0 R -/S /P ->> -endobj -701 0 obj -<< -/Alt (EAN11) -/K 386 -/P 1473 0 R -/Pg 13 0 R -/S /P ->> -endobj -702 0 obj -<< -/K 387 -/P 1474 0 R -/Pg 13 0 R -/S /P ->> -endobj -703 0 obj -<< -/Alt (BISMT) -/K 388 -/P 1474 0 R -/Pg 13 0 R -/S /P ->> -endobj -704 0 obj -<< -/K 389 -/P 1475 0 R -/Pg 13 0 R -/S /P ->> -endobj -705 0 obj -<< -/Alt (FKIMG) -/K 390 -/P 1475 0 R -/Pg 13 0 R -/S /P ->> -endobj -706 0 obj -<< -/K 391 -/P 1476 0 R -/Pg 13 0 R -/S /P ->> -endobj -707 0 obj -<< -/Alt (VRKME) -/K 392 -/P 1476 0 R -/Pg 13 0 R -/S /P ->> -endobj -708 0 obj -<< -/K 393 -/P 1477 0 R -/Pg 13 0 R -/S /P ->> -endobj -709 0 obj -<< -/Alt (PREIS_VF) -/K 394 -/P 1477 0 R -/Pg 13 0 R -/S /P ->> -endobj -710 0 obj -<< -/K 395 -/P 1478 0 R -/Pg 13 0 R -/S /P ->> -endobj -711 0 obj -<< -/Alt (PEINH_VF) -/K 396 -/P 1478 0 R -/Pg 13 0 R -/S /P ->> -endobj -712 0 obj -<< -/K 397 -/P 1479 0 R -/Pg 13 0 R -/S /P ->> -endobj -713 0 obj -<< -/Alt (POSPREIS_VF) -/K 398 -/P 1479 0 R -/Pg 13 0 R -/S /P ->> -endobj -714 0 obj -<< -/K 399 -/P 1480 0 R -/Pg 13 0 R -/S /P ->> -endobj -715 0 obj -<< -/K 400 -/P 1481 0 R -/Pg 13 0 R -/S /P ->> -endobj -716 0 obj -<< -/Alt (POSNR_VF) -/K 401 -/P 1481 0 R -/Pg 13 0 R -/S /P ->> -endobj -717 0 obj -<< -/K 402 -/P 1482 0 R -/Pg 13 0 R -/S /P ->> -endobj -718 0 obj -<< -/Alt (MATNR) -/K 403 -/P 1482 0 R -/Pg 13 0 R -/S /P ->> -endobj -719 0 obj -<< -/K 404 -/P 1483 0 R -/Pg 13 0 R -/S /P ->> -endobj -720 0 obj -<< -/Alt (ZZMATTEXT) -/K 405 -/P 1483 0 R -/Pg 13 0 R -/S /P ->> -endobj -721 0 obj -<< -/K 406 -/P 1484 0 R -/Pg 13 0 R -/S /P ->> -endobj -722 0 obj -<< -/Alt (POSNR_VL) -/K 407 -/P 1484 0 R -/Pg 13 0 R -/S /P ->> -endobj -723 0 obj -<< -/K 408 -/P 1485 0 R -/Pg 13 0 R -/S /P ->> -endobj -724 0 obj -<< -/Alt (EAN11) -/K 409 -/P 1485 0 R -/Pg 13 0 R -/S /P ->> -endobj -725 0 obj -<< -/K 410 -/P 1486 0 R -/Pg 13 0 R -/S /P ->> -endobj -726 0 obj -<< -/Alt (BISMT) -/K 411 -/P 1486 0 R -/Pg 13 0 R -/S /P ->> -endobj -727 0 obj -<< -/K 412 -/P 1487 0 R -/Pg 13 0 R -/S /P ->> -endobj -728 0 obj -<< -/Alt (FKIMG) -/K 413 -/P 1487 0 R -/Pg 13 0 R -/S /P ->> -endobj -729 0 obj -<< -/K 414 -/P 1488 0 R -/Pg 13 0 R -/S /P ->> -endobj -730 0 obj -<< -/Alt (VRKME) -/K 415 -/P 1488 0 R -/Pg 13 0 R -/S /P ->> -endobj -731 0 obj -<< -/K 416 -/P 1489 0 R -/Pg 13 0 R -/S /P ->> -endobj -732 0 obj -<< -/Alt (PREIS_VF) -/K 417 -/P 1489 0 R -/Pg 13 0 R -/S /P ->> -endobj -733 0 obj -<< -/K 418 -/P 1490 0 R -/Pg 13 0 R -/S /P ->> -endobj -734 0 obj -<< -/Alt (PEINH_VF) -/K 419 -/P 1490 0 R -/Pg 13 0 R -/S /P ->> -endobj -735 0 obj -<< -/K 420 -/P 1491 0 R -/Pg 13 0 R -/S /P ->> -endobj -736 0 obj -<< -/Alt (POSPREIS_VF) -/K 421 -/P 1491 0 R -/Pg 13 0 R -/S /P ->> -endobj -737 0 obj -<< -/K 422 -/P 1492 0 R -/Pg 13 0 R -/S /P ->> -endobj -738 0 obj -<< -/K 423 -/P 1493 0 R -/Pg 13 0 R -/S /P ->> -endobj -739 0 obj -<< -/Alt (POSNR_VF) -/K 424 -/P 1493 0 R -/Pg 13 0 R -/S /P ->> -endobj -740 0 obj -<< -/K 425 -/P 1494 0 R -/Pg 13 0 R -/S /P ->> -endobj -741 0 obj -<< -/Alt (MATNR) -/K 426 -/P 1494 0 R -/Pg 13 0 R -/S /P ->> -endobj -742 0 obj -<< -/K 427 -/P 1495 0 R -/Pg 13 0 R -/S /P ->> -endobj -743 0 obj -<< -/Alt (ZZMATTEXT) -/K 428 -/P 1495 0 R -/Pg 13 0 R -/S /P ->> -endobj -744 0 obj -<< -/K 0 -/P 1496 0 R -/Pg 14 0 R -/S /P ->> -endobj -745 0 obj -<< -/Alt (sonepar_text) -/K 1 -/P 1496 0 R -/Pg 14 0 R -/S /P ->> -endobj -746 0 obj -<< -/Alt (IDES LOGO) -/K 2 -/P 1497 0 R -/Pg 14 0 R -/S /Figure ->> -endobj -747 0 obj -<< -/K 3 -/P 1498 0 R -/Pg 14 0 R -/S /P ->> -endobj -748 0 obj -<< -/K 4 -/P 1499 0 R -/Pg 14 0 R -/S /P ->> -endobj -749 0 obj -<< -/K 5 -/P 1500 0 R -/Pg 14 0 R -/S /P ->> -endobj -750 0 obj -<< -/K 6 -/P 1501 0 R -/Pg 14 0 R -/S /P ->> -endobj -751 0 obj -<< -/Alt (Footer Text) -/K 7 -/P 1501 0 R -/Pg 14 0 R -/S /P ->> -endobj -752 0 obj -<< -/K 8 -/P 1502 0 R -/Pg 14 0 R -/S /P ->> -endobj -753 0 obj -<< -/Alt (SUBSIDIARY_INFO) -/K 9 -/P 1502 0 R -/Pg 14 0 R -/S /P ->> -endobj -754 0 obj -<< -/K 10 -/P 1503 0 R -/Pg 14 0 R -/S /P ->> -endobj -755 0 obj -<< -/Alt (POSNR_TXT_1) -/K 11 -/P 1503 0 R -/Pg 14 0 R -/S /P ->> -endobj -756 0 obj -<< -/K 12 -/P 1504 0 R -/Pg 14 0 R -/S /P ->> -endobj -757 0 obj -<< -/K 13 -/P 1505 0 R -/Pg 14 0 R -/S /P ->> -endobj -758 0 obj -<< -/K 14 -/P 1506 0 R -/Pg 14 0 R -/S /P ->> -endobj -759 0 obj -<< -/Alt (POSNR_TXT_2) -/K 15 -/P 1506 0 R -/Pg 14 0 R -/S /P ->> -endobj -760 0 obj -<< -/K 16 -/P 1507 0 R -/Pg 14 0 R -/S /P ->> -endobj -761 0 obj -<< -/K 17 -/P 1508 0 R -/Pg 14 0 R -/S /P ->> -endobj -762 0 obj -<< -/K 18 -/P 1509 0 R -/Pg 14 0 R -/S /P ->> -endobj -763 0 obj -<< -/K 19 -/P 1510 0 R -/Pg 14 0 R -/S /P ->> -endobj -764 0 obj -<< -/K 20 -/P 1511 0 R -/Pg 14 0 R -/S /P ->> -endobj -765 0 obj -<< -/K 21 -/P 1512 0 R -/Pg 14 0 R -/S /P ->> -endobj -766 0 obj -<< -/K 22 -/P 1513 0 R -/Pg 14 0 R -/S /P ->> -endobj -767 0 obj -<< -/K 23 -/P 1514 0 R -/Pg 14 0 R -/S /P ->> -endobj -768 0 obj -<< -/Alt (POSNR_VL) -/K 24 -/P 1514 0 R -/Pg 14 0 R -/S /P ->> -endobj -769 0 obj -<< -/K 25 -/P 1515 0 R -/Pg 14 0 R -/S /P ->> -endobj -770 0 obj -<< -/Alt (EAN11) -/K 26 -/P 1515 0 R -/Pg 14 0 R -/S /P ->> -endobj -771 0 obj -<< -/K 27 -/P 1516 0 R -/Pg 14 0 R -/S /P ->> -endobj -772 0 obj -<< -/Alt (BISMT) -/K 28 -/P 1516 0 R -/Pg 14 0 R -/S /P ->> -endobj -773 0 obj -<< -/K 29 -/P 1517 0 R -/Pg 14 0 R -/S /P ->> -endobj -774 0 obj -<< -/Alt (FKIMG) -/K 30 -/P 1517 0 R -/Pg 14 0 R -/S /P ->> -endobj -775 0 obj -<< -/K 31 -/P 1518 0 R -/Pg 14 0 R -/S /P ->> -endobj -776 0 obj -<< -/Alt (VRKME) -/K 32 -/P 1518 0 R -/Pg 14 0 R -/S /P ->> -endobj -777 0 obj -<< -/K 33 -/P 1519 0 R -/Pg 14 0 R -/S /P ->> -endobj -778 0 obj -<< -/Alt (PREIS_VF) -/K 34 -/P 1519 0 R -/Pg 14 0 R -/S /P ->> -endobj -779 0 obj -<< -/K 35 -/P 1520 0 R -/Pg 14 0 R -/S /P ->> -endobj -780 0 obj -<< -/Alt (PEINH_VF) -/K 36 -/P 1520 0 R -/Pg 14 0 R -/S /P ->> -endobj -781 0 obj -<< -/K 37 -/P 1521 0 R -/Pg 14 0 R -/S /P ->> -endobj -782 0 obj -<< -/Alt (POSPREIS_VF) -/K 38 -/P 1521 0 R -/Pg 14 0 R -/S /P ->> -endobj -783 0 obj -<< -/K 39 -/P 1522 0 R -/Pg 14 0 R -/S /P ->> -endobj -784 0 obj -<< -/K 40 -/P 1523 0 R -/Pg 14 0 R -/S /P ->> -endobj -785 0 obj -<< -/Alt (POSNR_VF) -/K 41 -/P 1523 0 R -/Pg 14 0 R -/S /P ->> -endobj -786 0 obj -<< -/K 42 -/P 1524 0 R -/Pg 14 0 R -/S /P ->> -endobj -787 0 obj -<< -/Alt (MATNR) -/K 43 -/P 1524 0 R -/Pg 14 0 R -/S /P ->> -endobj -788 0 obj -<< -/K 44 -/P 1525 0 R -/Pg 14 0 R -/S /P ->> -endobj -789 0 obj -<< -/Alt (ZZMATTEXT) -/K 45 -/P 1525 0 R -/Pg 14 0 R -/S /P ->> -endobj -790 0 obj -<< -/K 46 -/P 1526 0 R -/Pg 14 0 R -/S /P ->> -endobj -791 0 obj -<< -/Alt (POSNR_VL) -/K 47 -/P 1526 0 R -/Pg 14 0 R -/S /P ->> -endobj -792 0 obj -<< -/K 48 -/P 1527 0 R -/Pg 14 0 R -/S /P ->> -endobj -793 0 obj -<< -/Alt (EAN11) -/K 49 -/P 1527 0 R -/Pg 14 0 R -/S /P ->> -endobj -794 0 obj -<< -/K 50 -/P 1528 0 R -/Pg 14 0 R -/S /P ->> -endobj -795 0 obj -<< -/Alt (BISMT) -/K 51 -/P 1528 0 R -/Pg 14 0 R -/S /P ->> -endobj -796 0 obj -<< -/K 52 -/P 1529 0 R -/Pg 14 0 R -/S /P ->> -endobj -797 0 obj -<< -/Alt (FKIMG) -/K 53 -/P 1529 0 R -/Pg 14 0 R -/S /P ->> -endobj -798 0 obj -<< -/K 54 -/P 1530 0 R -/Pg 14 0 R -/S /P ->> -endobj -799 0 obj -<< -/Alt (VRKME) -/K 55 -/P 1530 0 R -/Pg 14 0 R -/S /P ->> -endobj -800 0 obj -<< -/K 56 -/P 1531 0 R -/Pg 14 0 R -/S /P ->> -endobj -801 0 obj -<< -/Alt (PREIS_VF) -/K 57 -/P 1531 0 R -/Pg 14 0 R -/S /P ->> -endobj -802 0 obj -<< -/K 58 -/P 1532 0 R -/Pg 14 0 R -/S /P ->> -endobj -803 0 obj -<< -/Alt (PEINH_VF) -/K 59 -/P 1532 0 R -/Pg 14 0 R -/S /P ->> -endobj -804 0 obj -<< -/K 60 -/P 1533 0 R -/Pg 14 0 R -/S /P ->> -endobj -805 0 obj -<< -/Alt (POSPREIS_VF) -/K 61 -/P 1533 0 R -/Pg 14 0 R -/S /P ->> -endobj -806 0 obj -<< -/K 62 -/P 1534 0 R -/Pg 14 0 R -/S /P ->> -endobj -807 0 obj -<< -/K 63 -/P 1535 0 R -/Pg 14 0 R -/S /P ->> -endobj -808 0 obj -<< -/Alt (POSNR_VF) -/K 64 -/P 1535 0 R -/Pg 14 0 R -/S /P ->> -endobj -809 0 obj -<< -/K 65 -/P 1536 0 R -/Pg 14 0 R -/S /P ->> -endobj -810 0 obj -<< -/Alt (MATNR) -/K 66 -/P 1536 0 R -/Pg 14 0 R -/S /P ->> -endobj -811 0 obj -<< -/K 67 -/P 1537 0 R -/Pg 14 0 R -/S /P ->> -endobj -812 0 obj -<< -/Alt (ZZMATTEXT) -/K 68 -/P 1537 0 R -/Pg 14 0 R -/S /P ->> -endobj -813 0 obj -<< -/K 69 -/P 1538 0 R -/Pg 14 0 R -/S /P ->> -endobj -814 0 obj -<< -/Alt (POSNR_VL) -/K 70 -/P 1538 0 R -/Pg 14 0 R -/S /P ->> -endobj -815 0 obj -<< -/K 71 -/P 1539 0 R -/Pg 14 0 R -/S /P ->> -endobj -816 0 obj -<< -/Alt (EAN11) -/K 72 -/P 1539 0 R -/Pg 14 0 R -/S /P ->> -endobj -817 0 obj -<< -/K 73 -/P 1540 0 R -/Pg 14 0 R -/S /P ->> -endobj -818 0 obj -<< -/Alt (BISMT) -/K 74 -/P 1540 0 R -/Pg 14 0 R -/S /P ->> -endobj -819 0 obj -<< -/K 75 -/P 1541 0 R -/Pg 14 0 R -/S /P ->> -endobj -820 0 obj -<< -/Alt (FKIMG) -/K 76 -/P 1541 0 R -/Pg 14 0 R -/S /P ->> -endobj -821 0 obj -<< -/K 77 -/P 1542 0 R -/Pg 14 0 R -/S /P ->> -endobj -822 0 obj -<< -/Alt (VRKME) -/K 78 -/P 1542 0 R -/Pg 14 0 R -/S /P ->> -endobj -823 0 obj -<< -/K 79 -/P 1543 0 R -/Pg 14 0 R -/S /P ->> -endobj -824 0 obj -<< -/Alt (PREIS_VF) -/K 80 -/P 1543 0 R -/Pg 14 0 R -/S /P ->> -endobj -825 0 obj -<< -/K 81 -/P 1544 0 R -/Pg 14 0 R -/S /P ->> -endobj -826 0 obj -<< -/Alt (PEINH_VF) -/K 82 -/P 1544 0 R -/Pg 14 0 R -/S /P ->> -endobj -827 0 obj -<< -/K 83 -/P 1545 0 R -/Pg 14 0 R -/S /P ->> -endobj -828 0 obj -<< -/Alt (POSPREIS_VF) -/K 84 -/P 1545 0 R -/Pg 14 0 R -/S /P ->> -endobj -829 0 obj -<< -/K 85 -/P 1546 0 R -/Pg 14 0 R -/S /P ->> -endobj -830 0 obj -<< -/K 86 -/P 1547 0 R -/Pg 14 0 R -/S /P ->> -endobj -831 0 obj -<< -/Alt (POSNR_VF) -/K 87 -/P 1547 0 R -/Pg 14 0 R -/S /P ->> -endobj -832 0 obj -<< -/K 88 -/P 1548 0 R -/Pg 14 0 R -/S /P ->> -endobj -833 0 obj -<< -/Alt (MATNR) -/K 89 -/P 1548 0 R -/Pg 14 0 R -/S /P ->> -endobj -834 0 obj -<< -/K 90 -/P 1549 0 R -/Pg 14 0 R -/S /P ->> -endobj -835 0 obj -<< -/Alt (ZZMATTEXT) -/K 91 -/P 1549 0 R -/Pg 14 0 R -/S /P ->> -endobj -836 0 obj -<< -/K 92 -/P 1550 0 R -/Pg 14 0 R -/S /P ->> -endobj -837 0 obj -<< -/Alt (POSNR_VL) -/K 93 -/P 1550 0 R -/Pg 14 0 R -/S /P ->> -endobj -838 0 obj -<< -/K 94 -/P 1551 0 R -/Pg 14 0 R -/S /P ->> -endobj -839 0 obj -<< -/Alt (EAN11) -/K 95 -/P 1551 0 R -/Pg 14 0 R -/S /P ->> -endobj -840 0 obj -<< -/K 96 -/P 1552 0 R -/Pg 14 0 R -/S /P ->> -endobj -841 0 obj -<< -/Alt (BISMT) -/K 97 -/P 1552 0 R -/Pg 14 0 R -/S /P ->> -endobj -842 0 obj -<< -/K 98 -/P 1553 0 R -/Pg 14 0 R -/S /P ->> -endobj -843 0 obj -<< -/Alt (FKIMG) -/K 99 -/P 1553 0 R -/Pg 14 0 R -/S /P ->> -endobj -844 0 obj -<< -/K 100 -/P 1554 0 R -/Pg 14 0 R -/S /P ->> -endobj -845 0 obj -<< -/Alt (VRKME) -/K 101 -/P 1554 0 R -/Pg 14 0 R -/S /P ->> -endobj -846 0 obj -<< -/K 102 -/P 1555 0 R -/Pg 14 0 R -/S /P ->> -endobj -847 0 obj -<< -/Alt (PREIS_VF) -/K 103 -/P 1555 0 R -/Pg 14 0 R -/S /P ->> -endobj -848 0 obj -<< -/K 104 -/P 1556 0 R -/Pg 14 0 R -/S /P ->> -endobj -849 0 obj -<< -/Alt (PEINH_VF) -/K 105 -/P 1556 0 R -/Pg 14 0 R -/S /P ->> -endobj -850 0 obj -<< -/K 106 -/P 1557 0 R -/Pg 14 0 R -/S /P ->> -endobj -851 0 obj -<< -/Alt (POSPREIS_VF) -/K 107 -/P 1557 0 R -/Pg 14 0 R -/S /P ->> -endobj -852 0 obj -<< -/K 108 -/P 1558 0 R -/Pg 14 0 R -/S /P ->> -endobj -853 0 obj -<< -/K 109 -/P 1559 0 R -/Pg 14 0 R -/S /P ->> -endobj -854 0 obj -<< -/Alt (POSNR_VF) -/K 110 -/P 1559 0 R -/Pg 14 0 R -/S /P ->> -endobj -855 0 obj -<< -/K 111 -/P 1560 0 R -/Pg 14 0 R -/S /P ->> -endobj -856 0 obj -<< -/Alt (MATNR) -/K 112 -/P 1560 0 R -/Pg 14 0 R -/S /P ->> -endobj -857 0 obj -<< -/K 113 -/P 1561 0 R -/Pg 14 0 R -/S /P ->> -endobj -858 0 obj -<< -/Alt (ZZMATTEXT) -/K 114 -/P 1561 0 R -/Pg 14 0 R -/S /P ->> -endobj -859 0 obj -<< -/K 115 -/P 1562 0 R -/Pg 14 0 R -/S /P ->> -endobj -860 0 obj -<< -/Alt (POSNR_VL) -/K 116 -/P 1562 0 R -/Pg 14 0 R -/S /P ->> -endobj -861 0 obj -<< -/K 117 -/P 1563 0 R -/Pg 14 0 R -/S /P ->> -endobj -862 0 obj -<< -/Alt (EAN11) -/K 118 -/P 1563 0 R -/Pg 14 0 R -/S /P ->> -endobj -863 0 obj -<< -/K 119 -/P 1564 0 R -/Pg 14 0 R -/S /P ->> -endobj -864 0 obj -<< -/Alt (BISMT) -/K 120 -/P 1564 0 R -/Pg 14 0 R -/S /P ->> -endobj -865 0 obj -<< -/K 121 -/P 1565 0 R -/Pg 14 0 R -/S /P ->> -endobj -866 0 obj -<< -/Alt (FKIMG) -/K 122 -/P 1565 0 R -/Pg 14 0 R -/S /P ->> -endobj -867 0 obj -<< -/K 123 -/P 1566 0 R -/Pg 14 0 R -/S /P ->> -endobj -868 0 obj -<< -/Alt (VRKME) -/K 124 -/P 1566 0 R -/Pg 14 0 R -/S /P ->> -endobj -869 0 obj -<< -/K 125 -/P 1567 0 R -/Pg 14 0 R -/S /P ->> -endobj -870 0 obj -<< -/Alt (PREIS_VF) -/K 126 -/P 1567 0 R -/Pg 14 0 R -/S /P ->> -endobj -871 0 obj -<< -/K 127 -/P 1568 0 R -/Pg 14 0 R -/S /P ->> -endobj -872 0 obj -<< -/Alt (PEINH_VF) -/K 128 -/P 1568 0 R -/Pg 14 0 R -/S /P ->> -endobj -873 0 obj -<< -/K 129 -/P 1569 0 R -/Pg 14 0 R -/S /P ->> -endobj -874 0 obj -<< -/Alt (POSPREIS_VF) -/K 130 -/P 1569 0 R -/Pg 14 0 R -/S /P ->> -endobj -875 0 obj -<< -/K 131 -/P 1570 0 R -/Pg 14 0 R -/S /P ->> -endobj -876 0 obj -<< -/K 132 -/P 1571 0 R -/Pg 14 0 R -/S /P ->> -endobj -877 0 obj -<< -/Alt (POSNR_VF) -/K 133 -/P 1571 0 R -/Pg 14 0 R -/S /P ->> -endobj -878 0 obj -<< -/K 134 -/P 1572 0 R -/Pg 14 0 R -/S /P ->> -endobj -879 0 obj -<< -/Alt (MATNR) -/K 135 -/P 1572 0 R -/Pg 14 0 R -/S /P ->> -endobj -880 0 obj -<< -/K 136 -/P 1573 0 R -/Pg 14 0 R -/S /P ->> -endobj -881 0 obj -<< -/Alt (ZZMATTEXT) -/K 137 -/P 1573 0 R -/Pg 14 0 R -/S /P ->> -endobj -882 0 obj -<< -/K 138 -/P 1574 0 R -/Pg 14 0 R -/S /P ->> -endobj -883 0 obj -<< -/Alt (POSNR_VL) -/K 139 -/P 1574 0 R -/Pg 14 0 R -/S /P ->> -endobj -884 0 obj -<< -/K 140 -/P 1575 0 R -/Pg 14 0 R -/S /P ->> -endobj -885 0 obj -<< -/Alt (EAN11) -/K 141 -/P 1575 0 R -/Pg 14 0 R -/S /P ->> -endobj -886 0 obj -<< -/K 142 -/P 1576 0 R -/Pg 14 0 R -/S /P ->> -endobj -887 0 obj -<< -/Alt (BISMT) -/K 143 -/P 1576 0 R -/Pg 14 0 R -/S /P ->> -endobj -888 0 obj -<< -/K 144 -/P 1577 0 R -/Pg 14 0 R -/S /P ->> -endobj -889 0 obj -<< -/Alt (FKIMG) -/K 145 -/P 1577 0 R -/Pg 14 0 R -/S /P ->> -endobj -890 0 obj -<< -/K 146 -/P 1578 0 R -/Pg 14 0 R -/S /P ->> -endobj -891 0 obj -<< -/Alt (VRKME) -/K 147 -/P 1578 0 R -/Pg 14 0 R -/S /P ->> -endobj -892 0 obj -<< -/K 148 -/P 1579 0 R -/Pg 14 0 R -/S /P ->> -endobj -893 0 obj -<< -/Alt (PREIS_VF) -/K 149 -/P 1579 0 R -/Pg 14 0 R -/S /P ->> -endobj -894 0 obj -<< -/K 150 -/P 1580 0 R -/Pg 14 0 R -/S /P ->> -endobj -895 0 obj -<< -/Alt (PEINH_VF) -/K 151 -/P 1580 0 R -/Pg 14 0 R -/S /P ->> -endobj -896 0 obj -<< -/K 152 -/P 1581 0 R -/Pg 14 0 R -/S /P ->> -endobj -897 0 obj -<< -/Alt (POSPREIS_VF) -/K 153 -/P 1581 0 R -/Pg 14 0 R -/S /P ->> -endobj -898 0 obj -<< -/K 154 -/P 1582 0 R -/Pg 14 0 R -/S /P ->> -endobj -899 0 obj -<< -/K 155 -/P 1583 0 R -/Pg 14 0 R -/S /P ->> -endobj -900 0 obj -<< -/Alt (POSNR_VF) -/K 156 -/P 1583 0 R -/Pg 14 0 R -/S /P ->> -endobj -901 0 obj -<< -/K 157 -/P 1584 0 R -/Pg 14 0 R -/S /P ->> -endobj -902 0 obj -<< -/Alt (MATNR) -/K 158 -/P 1584 0 R -/Pg 14 0 R -/S /P ->> -endobj -903 0 obj -<< -/K 159 -/P 1585 0 R -/Pg 14 0 R -/S /P ->> -endobj -904 0 obj -<< -/Alt (ZZMATTEXT) -/K 160 -/P 1585 0 R -/Pg 14 0 R -/S /P ->> -endobj -905 0 obj -<< -/K 161 -/P 1586 0 R -/Pg 14 0 R -/S /P ->> -endobj -906 0 obj -<< -/Alt (POSNR_VL) -/K 162 -/P 1586 0 R -/Pg 14 0 R -/S /P ->> -endobj -907 0 obj -<< -/K 163 -/P 1587 0 R -/Pg 14 0 R -/S /P ->> -endobj -908 0 obj -<< -/Alt (EAN11) -/K 164 -/P 1587 0 R -/Pg 14 0 R -/S /P ->> -endobj -909 0 obj -<< -/K 165 -/P 1588 0 R -/Pg 14 0 R -/S /P ->> -endobj -910 0 obj -<< -/Alt (BISMT) -/K 166 -/P 1588 0 R -/Pg 14 0 R -/S /P ->> -endobj -911 0 obj -<< -/K 167 -/P 1589 0 R -/Pg 14 0 R -/S /P ->> -endobj -912 0 obj -<< -/Alt (FKIMG) -/K 168 -/P 1589 0 R -/Pg 14 0 R -/S /P ->> -endobj -913 0 obj -<< -/K 169 -/P 1590 0 R -/Pg 14 0 R -/S /P ->> -endobj -914 0 obj -<< -/Alt (VRKME) -/K 170 -/P 1590 0 R -/Pg 14 0 R -/S /P ->> -endobj -915 0 obj -<< -/K 171 -/P 1591 0 R -/Pg 14 0 R -/S /P ->> -endobj -916 0 obj -<< -/Alt (PREIS_VF) -/K 172 -/P 1591 0 R -/Pg 14 0 R -/S /P ->> -endobj -917 0 obj -<< -/K 173 -/P 1592 0 R -/Pg 14 0 R -/S /P ->> -endobj -918 0 obj -<< -/Alt (PEINH_VF) -/K 174 -/P 1592 0 R -/Pg 14 0 R -/S /P ->> -endobj -919 0 obj -<< -/K 175 -/P 1593 0 R -/Pg 14 0 R -/S /P ->> -endobj -920 0 obj -<< -/Alt (POSPREIS_VF) -/K 176 -/P 1593 0 R -/Pg 14 0 R -/S /P ->> -endobj -921 0 obj -<< -/K 177 -/P 1594 0 R -/Pg 14 0 R -/S /P ->> -endobj -922 0 obj -<< -/K 178 -/P 1595 0 R -/Pg 14 0 R -/S /P ->> -endobj -923 0 obj -<< -/Alt (POSNR_VF) -/K 179 -/P 1595 0 R -/Pg 14 0 R -/S /P ->> -endobj -924 0 obj -<< -/K 180 -/P 1596 0 R -/Pg 14 0 R -/S /P ->> -endobj -925 0 obj -<< -/Alt (MATNR) -/K 181 -/P 1596 0 R -/Pg 14 0 R -/S /P ->> -endobj -926 0 obj -<< -/K 182 -/P 1597 0 R -/Pg 14 0 R -/S /P ->> -endobj -927 0 obj -<< -/Alt (ZZMATTEXT) -/K 183 -/P 1597 0 R -/Pg 14 0 R -/S /P ->> -endobj -928 0 obj -<< -/K 184 -/P 1598 0 R -/Pg 14 0 R -/S /P ->> -endobj -929 0 obj -<< -/Alt (POSNR_VL) -/K 185 -/P 1598 0 R -/Pg 14 0 R -/S /P ->> -endobj -930 0 obj -<< -/K 186 -/P 1599 0 R -/Pg 14 0 R -/S /P ->> -endobj -931 0 obj -<< -/Alt (EAN11) -/K 187 -/P 1599 0 R -/Pg 14 0 R -/S /P ->> -endobj -932 0 obj -<< -/K 188 -/P 1600 0 R -/Pg 14 0 R -/S /P ->> -endobj -933 0 obj -<< -/Alt (BISMT) -/K 189 -/P 1600 0 R -/Pg 14 0 R -/S /P ->> -endobj -934 0 obj -<< -/K 190 -/P 1601 0 R -/Pg 14 0 R -/S /P ->> -endobj -935 0 obj -<< -/Alt (FKIMG) -/K 191 -/P 1601 0 R -/Pg 14 0 R -/S /P ->> -endobj -936 0 obj -<< -/K 192 -/P 1602 0 R -/Pg 14 0 R -/S /P ->> -endobj -937 0 obj -<< -/Alt (VRKME) -/K 193 -/P 1602 0 R -/Pg 14 0 R -/S /P ->> -endobj -938 0 obj -<< -/K 194 -/P 1603 0 R -/Pg 14 0 R -/S /P ->> -endobj -939 0 obj -<< -/Alt (PREIS_VF) -/K 195 -/P 1603 0 R -/Pg 14 0 R -/S /P ->> -endobj -940 0 obj -<< -/K 196 -/P 1604 0 R -/Pg 14 0 R -/S /P ->> -endobj -941 0 obj -<< -/Alt (PEINH_VF) -/K 197 -/P 1604 0 R -/Pg 14 0 R -/S /P ->> -endobj -942 0 obj -<< -/K 198 -/P 1605 0 R -/Pg 14 0 R -/S /P ->> -endobj -943 0 obj -<< -/Alt (POSPREIS_VF) -/K 199 -/P 1605 0 R -/Pg 14 0 R -/S /P ->> -endobj -944 0 obj -<< -/K 200 -/P 1606 0 R -/Pg 14 0 R -/S /P ->> -endobj -945 0 obj -<< -/K 201 -/P 1607 0 R -/Pg 14 0 R -/S /P ->> -endobj -946 0 obj -<< -/Alt (POSNR_VF) -/K 202 -/P 1607 0 R -/Pg 14 0 R -/S /P ->> -endobj -947 0 obj -<< -/K 203 -/P 1608 0 R -/Pg 14 0 R -/S /P ->> -endobj -948 0 obj -<< -/Alt (MATNR) -/K 204 -/P 1608 0 R -/Pg 14 0 R -/S /P ->> -endobj -949 0 obj -<< -/K 205 -/P 1609 0 R -/Pg 14 0 R -/S /P ->> -endobj -950 0 obj -<< -/Alt (ZZMATTEXT) -/K 206 -/P 1609 0 R -/Pg 14 0 R -/S /P ->> -endobj -951 0 obj -<< -/K 207 -/P 1610 0 R -/Pg 14 0 R -/S /P ->> -endobj -952 0 obj -<< -/Alt (POSNR_VL) -/K 208 -/P 1610 0 R -/Pg 14 0 R -/S /P ->> -endobj -953 0 obj -<< -/K 209 -/P 1611 0 R -/Pg 14 0 R -/S /P ->> -endobj -954 0 obj -<< -/Alt (EAN11) -/K 210 -/P 1611 0 R -/Pg 14 0 R -/S /P ->> -endobj -955 0 obj -<< -/K 211 -/P 1612 0 R -/Pg 14 0 R -/S /P ->> -endobj -956 0 obj -<< -/Alt (BISMT) -/K 212 -/P 1612 0 R -/Pg 14 0 R -/S /P ->> -endobj -957 0 obj -<< -/K 213 -/P 1613 0 R -/Pg 14 0 R -/S /P ->> -endobj -958 0 obj -<< -/Alt (FKIMG) -/K 214 -/P 1613 0 R -/Pg 14 0 R -/S /P ->> -endobj -959 0 obj -<< -/K 215 -/P 1614 0 R -/Pg 14 0 R -/S /P ->> -endobj -960 0 obj -<< -/Alt (VRKME) -/K 216 -/P 1614 0 R -/Pg 14 0 R -/S /P ->> -endobj -961 0 obj -<< -/K 217 -/P 1615 0 R -/Pg 14 0 R -/S /P ->> -endobj -962 0 obj -<< -/Alt (PREIS_VF) -/K 218 -/P 1615 0 R -/Pg 14 0 R -/S /P ->> -endobj -963 0 obj -<< -/K 219 -/P 1616 0 R -/Pg 14 0 R -/S /P ->> -endobj -964 0 obj -<< -/Alt (PEINH_VF) -/K 220 -/P 1616 0 R -/Pg 14 0 R -/S /P ->> -endobj -965 0 obj -<< -/K 221 -/P 1617 0 R -/Pg 14 0 R -/S /P ->> -endobj -966 0 obj -<< -/Alt (POSPREIS_VF) -/K 222 -/P 1617 0 R -/Pg 14 0 R -/S /P ->> -endobj -967 0 obj -<< -/K 223 -/P 1618 0 R -/Pg 14 0 R -/S /P ->> -endobj -968 0 obj -<< -/K 224 -/P 1619 0 R -/Pg 14 0 R -/S /P ->> -endobj -969 0 obj -<< -/Alt (POSNR_VF) -/K 225 -/P 1619 0 R -/Pg 14 0 R -/S /P ->> -endobj -970 0 obj -<< -/K 226 -/P 1620 0 R -/Pg 14 0 R -/S /P ->> -endobj -971 0 obj -<< -/Alt (MATNR) -/K 227 -/P 1620 0 R -/Pg 14 0 R -/S /P ->> -endobj -972 0 obj -<< -/K 228 -/P 1621 0 R -/Pg 14 0 R -/S /P ->> -endobj -973 0 obj -<< -/Alt (ZZMATTEXT) -/K 229 -/P 1621 0 R -/Pg 14 0 R -/S /P ->> -endobj -974 0 obj -<< -/K 230 -/P 1622 0 R -/Pg 14 0 R -/S /P ->> -endobj -975 0 obj -<< -/Alt (POSNR_VL) -/K 231 -/P 1622 0 R -/Pg 14 0 R -/S /P ->> -endobj -976 0 obj -<< -/K 232 -/P 1623 0 R -/Pg 14 0 R -/S /P ->> -endobj -977 0 obj -<< -/Alt (EAN11) -/K 233 -/P 1623 0 R -/Pg 14 0 R -/S /P ->> -endobj -978 0 obj -<< -/K 234 -/P 1624 0 R -/Pg 14 0 R -/S /P ->> -endobj -979 0 obj -<< -/Alt (BISMT) -/K 235 -/P 1624 0 R -/Pg 14 0 R -/S /P ->> -endobj -980 0 obj -<< -/K 236 -/P 1625 0 R -/Pg 14 0 R -/S /P ->> -endobj -981 0 obj -<< -/Alt (FKIMG) -/K 237 -/P 1625 0 R -/Pg 14 0 R -/S /P ->> -endobj -982 0 obj -<< -/K 238 -/P 1626 0 R -/Pg 14 0 R -/S /P ->> -endobj -983 0 obj -<< -/Alt (VRKME) -/K 239 -/P 1626 0 R -/Pg 14 0 R -/S /P ->> -endobj -984 0 obj -<< -/K 240 -/P 1627 0 R -/Pg 14 0 R -/S /P ->> -endobj -985 0 obj -<< -/Alt (PREIS_VF) -/K 241 -/P 1627 0 R -/Pg 14 0 R -/S /P ->> -endobj -986 0 obj -<< -/K 242 -/P 1628 0 R -/Pg 14 0 R -/S /P ->> -endobj -987 0 obj -<< -/Alt (PEINH_VF) -/K 243 -/P 1628 0 R -/Pg 14 0 R -/S /P ->> -endobj -988 0 obj -<< -/K 244 -/P 1629 0 R -/Pg 14 0 R -/S /P ->> -endobj -989 0 obj -<< -/Alt (POSPREIS_VF) -/K 245 -/P 1629 0 R -/Pg 14 0 R -/S /P ->> -endobj -990 0 obj -<< -/K 246 -/P 1630 0 R -/Pg 14 0 R -/S /P ->> -endobj -991 0 obj -<< -/K 247 -/P 1631 0 R -/Pg 14 0 R -/S /P ->> -endobj -992 0 obj -<< -/Alt (VTEXT) -/K 248 -/P 1631 0 R -/Pg 14 0 R -/S /P ->> -endobj -993 0 obj -<< -/Alt (KBETR) -/K 249 -/P 1632 0 R -/Pg 14 0 R -/S /P ->> -endobj -994 0 obj -<< -/Alt (KOEIN) -/K 250 -/P 1633 0 R -/Pg 14 0 R -/S /P ->> -endobj -995 0 obj -<< -/Alt (KWERT) -/K 251 -/P 1634 0 R -/Pg 14 0 R -/S /P ->> -endobj -996 0 obj -<< -/K 252 -/P 1635 0 R -/Pg 14 0 R -/S /P ->> -endobj -997 0 obj -<< -/Alt (POSNR_VF) -/K 253 -/P 1635 0 R -/Pg 14 0 R -/S /P ->> -endobj -998 0 obj -<< -/K 254 -/P 1636 0 R -/Pg 14 0 R -/S /P ->> -endobj -999 0 obj -<< -/Alt (MATNR) -/K 255 -/P 1636 0 R -/Pg 14 0 R -/S /P ->> -endobj -1000 0 obj -<< -/K 256 -/P 1637 0 R -/Pg 14 0 R -/S /P ->> -endobj -1001 0 obj -<< -/Alt (ZZMATTEXT) -/K 257 -/P 1637 0 R -/Pg 14 0 R -/S /P ->> -endobj -1002 0 obj -<< -/K 258 -/P 1638 0 R -/Pg 14 0 R -/S /P ->> -endobj -1003 0 obj -<< -/Alt (POSNR_VL) -/K 259 -/P 1638 0 R -/Pg 14 0 R -/S /P ->> -endobj -1004 0 obj -<< -/K 260 -/P 1639 0 R -/Pg 14 0 R -/S /P ->> -endobj -1005 0 obj -<< -/Alt (EAN11) -/K 261 -/P 1639 0 R -/Pg 14 0 R -/S /P ->> -endobj -1006 0 obj -<< -/K 262 -/P 1640 0 R -/Pg 14 0 R -/S /P ->> -endobj -1007 0 obj -<< -/Alt (BISMT) -/K 263 -/P 1640 0 R -/Pg 14 0 R -/S /P ->> -endobj -1008 0 obj -<< -/K 264 -/P 1641 0 R -/Pg 14 0 R -/S /P ->> -endobj -1009 0 obj -<< -/Alt (FKIMG) -/K 265 -/P 1641 0 R -/Pg 14 0 R -/S /P ->> -endobj -1010 0 obj -<< -/K 266 -/P 1642 0 R -/Pg 14 0 R -/S /P ->> -endobj -1011 0 obj -<< -/Alt (VRKME) -/K 267 -/P 1642 0 R -/Pg 14 0 R -/S /P ->> -endobj -1012 0 obj -<< -/K 268 -/P 1643 0 R -/Pg 14 0 R -/S /P ->> -endobj -1013 0 obj -<< -/Alt (PREIS_VF) -/K 269 -/P 1643 0 R -/Pg 14 0 R -/S /P ->> -endobj -1014 0 obj -<< -/K 270 -/P 1644 0 R -/Pg 14 0 R -/S /P ->> -endobj -1015 0 obj -<< -/Alt (PEINH_VF) -/K 271 -/P 1644 0 R -/Pg 14 0 R -/S /P ->> -endobj -1016 0 obj -<< -/K 272 -/P 1645 0 R -/Pg 14 0 R -/S /P ->> -endobj -1017 0 obj -<< -/Alt (POSPREIS_VF) -/K 273 -/P 1645 0 R -/Pg 14 0 R -/S /P ->> -endobj -1018 0 obj -<< -/K 274 -/P 1646 0 R -/Pg 14 0 R -/S /P ->> -endobj -1019 0 obj -<< -/K 275 -/P 1647 0 R -/Pg 14 0 R -/S /P ->> -endobj -1020 0 obj -<< -/Alt (POSNR_VF) -/K 276 -/P 1647 0 R -/Pg 14 0 R -/S /P ->> -endobj -1021 0 obj -<< -/K 277 -/P 1648 0 R -/Pg 14 0 R -/S /P ->> -endobj -1022 0 obj -<< -/Alt (MATNR) -/K 278 -/P 1648 0 R -/Pg 14 0 R -/S /P ->> -endobj -1023 0 obj -<< -/K 279 -/P 1649 0 R -/Pg 14 0 R -/S /P ->> -endobj -1024 0 obj -<< -/Alt (ZZMATTEXT) -/K 280 -/P 1649 0 R -/Pg 14 0 R -/S /P ->> -endobj -1025 0 obj -<< -/K 281 -/P 1650 0 R -/Pg 14 0 R -/S /P ->> -endobj -1026 0 obj -<< -/Alt (POSNR_VL) -/K 282 -/P 1650 0 R -/Pg 14 0 R -/S /P ->> -endobj -1027 0 obj -<< -/K 283 -/P 1651 0 R -/Pg 14 0 R -/S /P ->> -endobj -1028 0 obj -<< -/Alt (EAN11) -/K 284 -/P 1651 0 R -/Pg 14 0 R -/S /P ->> -endobj -1029 0 obj -<< -/K 285 -/P 1652 0 R -/Pg 14 0 R -/S /P ->> -endobj -1030 0 obj -<< -/Alt (BISMT) -/K 286 -/P 1652 0 R -/Pg 14 0 R -/S /P ->> -endobj -1031 0 obj -<< -/K 287 -/P 1653 0 R -/Pg 14 0 R -/S /P ->> -endobj -1032 0 obj -<< -/Alt (FKIMG) -/K 288 -/P 1653 0 R -/Pg 14 0 R -/S /P ->> -endobj -1033 0 obj -<< -/K 289 -/P 1654 0 R -/Pg 14 0 R -/S /P ->> -endobj -1034 0 obj -<< -/Alt (VRKME) -/K 290 -/P 1654 0 R -/Pg 14 0 R -/S /P ->> -endobj -1035 0 obj -<< -/K 291 -/P 1655 0 R -/Pg 14 0 R -/S /P ->> -endobj -1036 0 obj -<< -/Alt (PREIS_VF) -/K 292 -/P 1655 0 R -/Pg 14 0 R -/S /P ->> -endobj -1037 0 obj -<< -/K 293 -/P 1656 0 R -/Pg 14 0 R -/S /P ->> -endobj -1038 0 obj -<< -/Alt (PEINH_VF) -/K 294 -/P 1656 0 R -/Pg 14 0 R -/S /P ->> -endobj -1039 0 obj -<< -/K 295 -/P 1657 0 R -/Pg 14 0 R -/S /P ->> -endobj -1040 0 obj -<< -/Alt (POSPREIS_VF) -/K 296 -/P 1657 0 R -/Pg 14 0 R -/S /P ->> -endobj -1041 0 obj -<< -/K 297 -/P 1658 0 R -/Pg 14 0 R -/S /P ->> -endobj -1042 0 obj -<< -/K 298 -/P 1659 0 R -/Pg 14 0 R -/S /P ->> -endobj -1043 0 obj -<< -/Alt (POSNR_VF) -/K 299 -/P 1659 0 R -/Pg 14 0 R -/S /P ->> -endobj -1044 0 obj -<< -/K 300 -/P 1660 0 R -/Pg 14 0 R -/S /P ->> -endobj -1045 0 obj -<< -/Alt (MATNR) -/K 301 -/P 1660 0 R -/Pg 14 0 R -/S /P ->> -endobj -1046 0 obj -<< -/K 302 -/P 1661 0 R -/Pg 14 0 R -/S /P ->> -endobj -1047 0 obj -<< -/Alt (ZZMATTEXT) -/K 303 -/P 1661 0 R -/Pg 14 0 R -/S /P ->> -endobj -1048 0 obj -<< -/K 304 -/P 1662 0 R -/Pg 14 0 R -/S /P ->> -endobj -1049 0 obj -<< -/Alt (POSNR_VL) -/K 305 -/P 1662 0 R -/Pg 14 0 R -/S /P ->> -endobj -1050 0 obj -<< -/K 306 -/P 1663 0 R -/Pg 14 0 R -/S /P ->> -endobj -1051 0 obj -<< -/Alt (EAN11) -/K 307 -/P 1663 0 R -/Pg 14 0 R -/S /P ->> -endobj -1052 0 obj -<< -/K 308 -/P 1664 0 R -/Pg 14 0 R -/S /P ->> -endobj -1053 0 obj -<< -/Alt (BISMT) -/K 309 -/P 1664 0 R -/Pg 14 0 R -/S /P ->> -endobj -1054 0 obj -<< -/K 310 -/P 1665 0 R -/Pg 14 0 R -/S /P ->> -endobj -1055 0 obj -<< -/Alt (FKIMG) -/K 311 -/P 1665 0 R -/Pg 14 0 R -/S /P ->> -endobj -1056 0 obj -<< -/K 312 -/P 1666 0 R -/Pg 14 0 R -/S /P ->> -endobj -1057 0 obj -<< -/Alt (VRKME) -/K 313 -/P 1666 0 R -/Pg 14 0 R -/S /P ->> -endobj -1058 0 obj -<< -/K 314 -/P 1667 0 R -/Pg 14 0 R -/S /P ->> -endobj -1059 0 obj -<< -/Alt (PREIS_VF) -/K 315 -/P 1667 0 R -/Pg 14 0 R -/S /P ->> -endobj -1060 0 obj -<< -/K 316 -/P 1668 0 R -/Pg 14 0 R -/S /P ->> -endobj -1061 0 obj -<< -/Alt (PEINH_VF) -/K 317 -/P 1668 0 R -/Pg 14 0 R -/S /P ->> -endobj -1062 0 obj -<< -/K 318 -/P 1669 0 R -/Pg 14 0 R -/S /P ->> -endobj -1063 0 obj -<< -/Alt (POSPREIS_VF) -/K 319 -/P 1669 0 R -/Pg 14 0 R -/S /P ->> -endobj -1064 0 obj -<< -/K 320 -/P 1670 0 R -/Pg 14 0 R -/S /P ->> -endobj -1065 0 obj -<< -/K 321 -/P 1671 0 R -/Pg 14 0 R -/S /P ->> -endobj -1066 0 obj -<< -/Alt (TAB_UOM) -/K 322 -/P 1671 0 R -/Pg 14 0 R -/S /P ->> -endobj -1067 0 obj -<< -/K 323 -/P 1672 0 R -/Pg 14 0 R -/S /P ->> -endobj -1068 0 obj -<< -/K 324 -/P 1673 0 R -/Pg 14 0 R -/S /P ->> -endobj -1069 0 obj -<< -/Alt (G_WARENWERT) -/K 325 -/P 1673 0 R -/Pg 14 0 R -/S /P ->> -endobj -1070 0 obj -<< -/K 326 -/P 1674 0 R -/Pg 14 0 R -/S /P ->> -endobj -1071 0 obj -<< -/Alt (VTEXT) -/K 327 -/P 1674 0 R -/Pg 14 0 R -/S /P ->> -endobj -1072 0 obj -<< -/K 328 -/P 1675 0 R -/Pg 14 0 R -/S /P ->> -endobj -1073 0 obj -<< -/Alt (KBETR) -/K 329 -/P 1675 0 R -/Pg 14 0 R -/S /P ->> -endobj -1074 0 obj -<< -/K 330 -/P 1676 0 R -/Pg 14 0 R -/S /P ->> -endobj -1075 0 obj -<< -/Alt (KOEIN) -/K 331 -/P 1676 0 R -/Pg 14 0 R -/S /P ->> -endobj -1076 0 obj -<< -/K 332 -/P 1677 0 R -/Pg 14 0 R -/S /P ->> -endobj -1077 0 obj -<< -/Alt (KWERT) -/K 333 -/P 1677 0 R -/Pg 14 0 R -/S /P ->> -endobj -1078 0 obj -<< -/K 334 -/P 1678 0 R -/Pg 14 0 R -/S /P ->> -endobj -1079 0 obj -<< -/K 335 -/P 1679 0 R -/Pg 14 0 R -/S /P ->> -endobj -1080 0 obj -<< -/Alt (GROSS_VALUE) -/K 336 -/P 1679 0 R -/Pg 14 0 R -/S /P ->> -endobj -1081 0 obj -<< -/K 337 -/P 1680 0 R -/Pg 14 0 R -/S /P ->> -endobj -1082 0 obj -<< -/Alt (TXT_NON_DISCOUNT) -/K 338 -/P 1680 0 R -/Pg 14 0 R -/S /P ->> -endobj -1083 0 obj -<< -/K 339 -/P 1681 0 R -/Pg 14 0 R -/S /P ->> -endobj -1084 0 obj -<< -/Type /EmbeddedFile -/Subtype /text#2Fxml -/Params 1682 0 R -/Length 1683 0 R ->> -stream -urn:ferd:CrossIndustryDocument:invoice:1p0:extended9010548449RECHNUNG38020260121false202601211001844017363120012Sonepar Deutschland Region Nord-Ost GmbH30179Vahrenwalder Straße 238HannoverDEDE811251715105/5843/2799100184Eduard Wisch Alles Watt läuft25764Todtenhemmer Weg 116WesselburenDE2026-01-19T00:00:00AER1026285296 WischEduard Wisch Alles Watt läuft25764Todtenhemmer Weg 116WesselburenDE202601202026-01-20T00:00:0072420474EURDE64250800200107008300Sonepar Deutschland Region Nord-Ost GmbHDRESDEFF250Commerzbank AG571.81VAT3009.503009.50S19.00Netto20260204Skonto202602040.003009.500.000.003009.50571.813581.313581.3112026-01-19T00:00:000000011026285296 WischAER0.92001.00000.92001.00008.00002026-01-20T00:00:001724204741.40VATS19.007.3640160323214914582568ASSMANN DK-1644-0025/BL Patchkabel ASSMANN DK-1644-0025/BL Patchkabel CAT 6 S/FTP 0,25m,sw 22026-01-19T00:00:000000021026285296 WischAER1.03001.00001.03001.000010.00002026-01-20T00:00:002724204741.96VATS19.0010.3040160323215764544583ASSMANN DK-1644-005/BL Patchkabel CASSMANN DK-1644-005/BL Patchkabel Cat6 S/FTP LSZH AWG27/7 0,5m sw 32026-01-19T00:00:000000031026285296 WischAER1.24001.00001.24001.00005.00002026-01-20T00:00:003724204741.18VATS19.006.2040160323216444544587ASSMANN DK-1644-010/BL Patchkabel CASSMANN DK-1644-010/BL Patchkabel Cat6 S/FTP LSZH AWG27/7 1m sw 42026-01-19T00:00:000000041026285296 WischAER1.84001.00001.84001.00002.00002026-01-20T00:00:004724204740.70VATS19.003.6840160323217434544592ASSMANN DK-1644-020/BL Patchkabel CASSMANN DK-1644-020/BL Patchkabel Cat6 S/FTP LSZH AWG27/7 2m sw 52026-01-19T00:00:000000051026285296 WischAER3.59001.00003.59001.00001.00002026-01-20T00:00:005724204740.68VATS19.003.5940160323220094544602ASSMANN DK-1644-050/BL Patchkabel CASSMANN DK-1644-050/BL Patchkabel Cat6 S/FTP LSZH AWG27/7 5m sw 62026-01-19T00:00:000000061026285296 WischAER28.5200100.0000true22.5000100.000022.5000Zuschlag Kupfer51.0200100.0000100.00002026-01-20T00:00:006724204749.69VATS19.0051.020140070JY(ST)Y 2x2x0,8Eca Ri100 Fernmelde JY(ST)Y 2x2x0,8Eca Ri100 Fernmelde PVC TRADING_UNITZuschlag Kupfer22.5072026-01-19T00:00:000000071026285296 WischAER45.0500100.0000true20.4300100.000020.4300Zuschlag Kupfer65.4800100.0000100.00002026-01-20T00:00:0077242047412.44VATS19.0065.4840632420027951913719KATHREIN LCL 100/100m Cca NetzwerkkKATHREIN LCL 100/100m Cca Netzwerkkabel Cat7, S/FTP TRADING_UNITZuschlag Kupfer20.4382026-01-19T00:00:000000081026285296 WischAER24.50001.000024.50001.00001.00002026-01-20T00:00:008724204744.66VATS19.0024.5040150823677630658160Eaton PXF-40/4/003-A FI-SchutzschalEaton PXF-40/4/003-A FI-Schutzschalter 40A 4p, 30mA 92026-01-19T00:00:000000091026285296 WischAER28.68001.000028.68001.00001.00002026-01-20T00:00:009724204745.45VATS19.0028.6840150823642740633677Eaton PXL-C20/3 LS-Schalter m.BeschEaton PXL-C20/3 LS-Schalter m.Beschrift. C 20A, 3p 102026-01-19T00:00:000000101026285296 WischAER20.56001.000020.56001.00001.00002026-01-20T00:00:0010724204743.91VATS19.0020.5632506155102285709088Hager SBN363 Ausschalter 3P 63AHager SBN363 Ausschalter 3P 63A 112026-01-19T00:00:000000111026285296 WischAER3.79001.0000true0.44001.00000.4400Zuschlag Kupfer CU14.23001.00001.00002026-01-20T00:00:0011724204740.80VATS19.004.2390102381403180658492Eaton EVG-3PHAS/9MODUL SammelschienEaton EVG-3PHAS/9MODUL Sammelschiene Euro-Vario 63A TRADING_UNITZuschlag Kupfer CU10.44122026-01-19T00:00:000000121026285296 WischAER10.95001.000010.95001.00001.00002026-01-20T00:00:0012724204742.08VATS19.0010.9573307010300004598083Enoc KM 06 (VE50) Muttern und SchraEnoc KM 06 (VE50) Muttern und Schrauben Set 132026-01-19T00:00:000000131026285296 WischAER29.0000100.0000true73.5500100.000073.5500Zuschlag Kupfer102.5500100.0000100.00002026-01-20T00:00:00137242047419.48VATS19.00102.550110328NYM-J 3x2,5 Eca Ri100 Mantelltg FeuNYM-J 3x2,5 Eca Ri100 Mantelltg Feuchtraum TRADING_UNITZuschlag Kupfer73.55142026-01-19T00:00:000000141026285296 WischAER49.2000100.0000true122.5800100.0000122.5800Zuschlag Kupfer171.7800100.0000100.00002026-01-20T00:00:00147242047432.64VATS19.00171.780110358NYM-J 5x2,5 Eca Ri100 Mantelltg FeuNYM-J 5x2,5 Eca Ri100 Mantelltg Feuchtraum TRADING_UNITZuschlag Kupfer122.58152026-01-19T00:00:000000151026285296 WischAER168.5000100.0000true245.160050.0000490.3200Zuschlag Kupfer658.8200100.000050.00002026-01-20T00:00:00157242047462.59VATS19.00329.410110354NYM-J 5x10 Eca Ri.50 Mantelltg FeucNYM-J 5x10 Eca Ri.50 Mantelltg Feuchtraum TRADING_UNITZuschlag Kupfer245.16162026-01-19T00:00:000000161026285296 WischAER10.32001.000010.32001.000036.00002026-01-20T00:00:00167242047470.59VATS19.00371.5240121953908795402293OBO BETT. RKSM 610 FS Kabelrinne m.OBO BETT. RKSM 610 FS Kabelrinne m.Verbinder 60x100mm 172026-01-19T00:00:000000171026285296 WischAER485.26001.0000485.26001.00001.00002026-01-20T00:00:00177242047492.21VATS19.00485.2642605589502955012149KOSTAL 10532947 Wandladestation ENEKOSTAL 10532947 Wandladestation ENECTOR AC 3.7/11 182026-01-19T00:00:000000181026285296 WischAER17.3700100.000017.3700100.0000100.00002026-01-20T00:00:0018724204743.30VATS19.0017.3740121961998150410195OBO BETT. FRSB 6x12 F FlachrundschrOBO BETT. FRSB 6x12 F Flachrundschraube vz 192026-01-19T00:00:000000191026285296 WischAER5.26001.00005.26001.000036.00002026-01-20T00:00:00197242047435.98VATS19.00189.3640121962071900410077OBO BETT. AW 15 21 FT Wandausleger OBO BETT. AW 15 21 FT Wandausleger tauchf.vz 202026-01-19T00:00:000000201026285296 WischAER7.75001.00007.75001.000011.00002026-01-20T00:00:00207242047416.20VATS19.0085.2540121962072510410078OBO BETT. AW 15 31 FT Wandausleger OBO BETT. AW 15 31 FT Wandausleger tauchf.vz 212026-01-19T00:00:000000211026285296 WischAER0.65001.00000.65001.000020.00002026-01-20T00:00:0021724204742.47VATS19.0013.0040018690957900657414Siemens 5SH4362 Neozed-SchraubkappeSiemens 5SH4362 Neozed-Schraubkappe 63A D02 m.Prüfloch 222026-01-19T00:00:000000221026285296 WischAER0.37001.00000.37001.000012.00002026-01-20T00:00:0022724204740.84VATS19.004.4440865000109980630461MERSEN 01706.025000 Passeinsatz NEOMERSEN 01706.025000 Passeinsatz NEOZED D02 25A gelb 232026-01-19T00:00:000000231026285296 WischAER0.37001.00000.37001.000012.00002026-01-20T00:00:0023724204740.84VATS19.004.4440865000110490630462MERSEN 01706.035000 Passeinsatz NEOMERSEN 01706.035000 Passeinsatz NEOZED D02 35A schwarz 242026-01-19T00:00:000000241026285296 WischAER0.37001.00000.37001.000012.00002026-01-20T00:00:0024724204740.84VATS19.004.4440865000110940630463MERSEN 01706.050000 Passeinsatz NEOMERSEN 01706.050000 Passeinsatz NEOZED D02 50A weiss 252026-01-19T00:00:000000251026285296 WischAER0.37001.00000.37001.000012.00002026-01-20T00:00:0025724204740.84VATS19.004.4440865000109980630461MERSEN 01706.025000 Passeinsatz NEOMERSEN 01706.025000 Passeinsatz NEOZED D02 25A gelb 262026-01-19T00:00:000000261026285296 WischAER0.37001.00000.37001.000012.00002026-01-20T00:00:0026724204740.84VATS19.004.4440865000109430630460MERSEN 01706.020000 Passeinsatz NEOMERSEN 01706.020000 Passeinsatz NEOZED D02 20A blau 272026-01-19T00:00:000000271026285296 WischAER6.67001.00006.67001.00001.00002026-01-20T00:00:0027724204741.27VATS19.006.6740865000111860630492MERSEN 01708.000000 PaßeinsatzschlüMERSEN 01708.000000 Paßeinsatzschlüssel NEOZED D01-D03 282026-01-19T00:00:000000281026285296 WischAER0.39001.00000.39001.000024.00002026-01-20T00:00:0028724204741.78VATS19.009.3640865000114070630490MERSEN 01713.000000 Spezial-HaltefeMERSEN 01713.000000 Spezial-Haltefeder NEOZED D01/D02 292026-01-19T00:00:000000291026285296 WischAER194.26001.0000194.26001.00001.00002026-01-20T00:00:00297242047436.91VATS19.00194.2632506164577060626165Hager VE412DN Kleinverteiler, VectoHager VE412DN Kleinverteiler, Vector IP65,48PLE 302026-01-19T00:00:000000301026285296 WischAER116.81001.0000116.81001.00001.00002026-01-20T00:00:00307242047422.19VATS19.00116.8132506110126580646621Hager ARC910D Fehlerlichtb.-SchutzeHager ARC910D Fehlerlichtb.-Schutzeinr. 1P+N,6kA,B-10A,2M 312026-01-19T00:00:000000311026285296 WischAER20.56001.000020.56001.00002.00002026-01-20T00:00:0031724204747.81VATS19.0041.1232506155102285709088Hager SBN363 Ausschalter 3P 63AHager SBN363 Ausschalter 3P 63A 322026-01-19T00:00:000000321026285296 WischAER36.99001.000036.99001.00001.00002026-01-20T00:00:0032724204747.03VATS19.0036.9932506116100760606656Hager CDA440D FI-Schutzschalter 4poHager CDA440D FI-Schutzschalter 4pol. 40A/30mA,6kA 332026-01-19T00:00:000000331026285296 WischAER12.14001.000012.14001.00006.00002026-01-20T00:00:00337242047413.84VATS19.0072.8436053405374375801813MERSEN 04735.000000 SicherungssockeMERSEN 04735.000000 Sicherungssockel NEOZED D02 63A/230/440V 3p. 342026-01-19T00:00:000000341026285296 WischAER26.69001.000026.69001.00001.00002026-01-20T00:00:0034724204745.07VATS19.0026.6940114594417911203829Grothe GONG 569-230V Zweiklang-GongGrothe GONG 569-230V Zweiklang-Gong 352026-01-19T00:00:000000351026285296 WischAER12.43001.000012.43001.000010.00002026-01-20T00:00:00357242047423.62VATS19.00124.3087101633660433709862Signify WT050C 1xTLED L1500 FeuchtrSignify WT050C 1xTLED L1500 Feuchtraumleuchte f. 1 LED-Tube 362026-01-19T00:00:000000361026285296 WischAER9.92001.00009.92001.000010.00002026-01-20T00:00:00367242047418.85VATS19.0099.2087195143166212511528Signify MASLEDtube #31662100 LED-TuSignify MASLEDtube #31662100 LED-Tube T8 f. KVG/VVG 372026-01-19T00:00:000000371026285296 WischAER208.97001.0000208.97001.00001.00002026-01-20T00:00:00377242047439.70VATS19.00208.9732506155149985630665Hager SPA701Z Kombiableiter 4P T1+THager SPA701Z Kombiableiter 4P T1+T2+T3 382026-01-19T00:00:000000381026285296 WischAER22.53001.000022.53001.00001.00002026-01-20T00:00:0038724204744.28VATS19.0022.5332506155116455709097Hager SBT116 Ausschalter 1P 16AHager SBT116 Ausschalter 1P 16A 392026-01-19T00:00:000000391026285296 WischAER25.51001.000025.51001.00001.00002026-01-20T00:00:0039724204744.85VATS19.0025.5140150815037285609476Eaton ZSD-BPKT/T/31 TSG-BestückungsEaton ZSD-BPKT/T/31 TSG-Bestückungspaket 31 -endstream -endobj -1085 0 obj -<< -/BitsPerComponent 8 -/ColorSpace /DeviceGray -/Decode [0.0 1.0] -/Filter /FlateDecode -/Height 413 -/Length 427 -/Name /X -/Subtype /Image -/Type /XObject -/Width 1004 ->> -stream -H1 gQ -endstream -endobj -1086 0 obj -<< -/K 27 0 R -/P 1684 0 R -/S /TR ->> -endobj -1087 0 obj -<< -/K [1102 0 R 1101 0 R] -/P 28 0 R -/S /Sect ->> -endobj -1088 0 obj -<< -/K 31 0 R -/P 28 0 R -/S /Div ->> -endobj -1089 0 obj -<< -/K 1103 0 R -/P 28 0 R -/S /Sect ->> -endobj -1090 0 obj -<< -/K 1685 0 R -/P 28 0 R -/S /Sect ->> -endobj -1091 0 obj -<< -/K 1686 0 R -/P 28 0 R -/S /Sect ->> -endobj -1092 0 obj -<< -/K [1104 0 R 1687 0 R] -/P 28 0 R -/S /Sect ->> -endobj -1093 0 obj -<< -/K [1264 0 R 1263 0 R 1688 0 R] -/P 29 0 R -/S /Sect ->> -endobj -1094 0 obj -<< -/K 1267 0 R -/P 29 0 R -/S /Sect ->> -endobj -1095 0 obj -<< -/K 1689 0 R -/P 29 0 R -/S /Sect ->> -endobj -1096 0 obj -<< -/K [1268 0 R 1690 0 R] -/P 29 0 R -/S /Sect ->> -endobj -1097 0 obj -<< -/K [1497 0 R 1496 0 R 1691 0 R] -/P 30 0 R -/S /Sect ->> -endobj -1098 0 obj -<< -/K 1500 0 R -/P 30 0 R -/S /Sect ->> -endobj -1099 0 obj -<< -/K [1692 0 R 1693 0 R] -/P 30 0 R -/S /Sect ->> -endobj -1100 0 obj -<< -/K [1501 0 R 1694 0 R] -/P 30 0 R -/S /Sect ->> -endobj -1101 0 obj -<< -/K [33 0 R 32 0 R] -/P 1087 0 R -/S /Div ->> -endobj -1102 0 obj -<< -/K 34 0 R -/P 1087 0 R -/S /Div ->> -endobj -1103 0 obj -<< -/K [36 0 R 35 0 R] -/P 1089 0 R -/S /Div ->> -endobj -1104 0 obj -<< -/K 37 0 R -/P 1092 0 R -/S /Div ->> -endobj -1105 0 obj -<< -/K [39 0 R 38 0 R] -/P 1687 0 R -/S /Div ->> -endobj -1106 0 obj -<< -/K [41 0 R 40 0 R] -/P 1695 0 R -/S /Div ->> -endobj -1107 0 obj -<< -/K [43 0 R 42 0 R] -/P 1696 0 R -/S /Div ->> -endobj -1108 0 obj -<< -/K 44 0 R -/P 1697 0 R -/S /Div ->> -endobj -1109 0 obj -<< -/K [46 0 R 45 0 R] -/P 1697 0 R -/S /Div ->> -endobj -1110 0 obj -<< -/K 47 0 R -/P 1698 0 R -/S /Div ->> -endobj -1111 0 obj -<< -/K 48 0 R -/P 1698 0 R -/S /Div ->> -endobj -1112 0 obj -<< -/K 49 0 R -/P 1699 0 R -/S /Div ->> -endobj -1113 0 obj -<< -/K 51 0 R -/P 1700 0 R -/S /TD ->> -endobj -1114 0 obj -<< -/K 52 0 R -/P 1701 0 R -/S /Div ->> -endobj -1115 0 obj -<< -/K 53 0 R -/P 1701 0 R -/S /Div ->> -endobj -1116 0 obj -<< -/K 54 0 R -/P 1702 0 R -/S /Div ->> -endobj -1117 0 obj -<< -/K 55 0 R -/P 1702 0 R -/S /Div ->> -endobj -1118 0 obj -<< -/K 56 0 R -/P 1702 0 R -/S /Div ->> -endobj -1119 0 obj -<< -/K 57 0 R -/P 1702 0 R -/S /Div ->> -endobj -1120 0 obj -<< -/K 58 0 R -/P 1703 0 R -/S /Div ->> -endobj -1121 0 obj -<< -/K [60 0 R 59 0 R] -/P 1704 0 R -/S /Div ->> -endobj -1122 0 obj -<< -/K 61 0 R -/P 1704 0 R -/S /Div ->> -endobj -1123 0 obj -<< -/K [63 0 R 62 0 R] -/P 1704 0 R -/S /Div ->> -endobj -1124 0 obj -<< -/K 64 0 R -/P 1705 0 R -/S /Div ->> -endobj -1125 0 obj -<< -/K 65 0 R -/P 1706 0 R -/S /Div ->> -endobj -1126 0 obj -<< -/K 66 0 R -/P 1706 0 R -/S /Div ->> -endobj -1127 0 obj -<< -/K [68 0 R 67 0 R] -/P 1707 0 R -/S /Div ->> -endobj -1128 0 obj -<< -/K [70 0 R 69 0 R] -/P 1708 0 R -/S /Div ->> -endobj -1129 0 obj -<< -/K 71 0 R -/P 1709 0 R -/S /Div ->> -endobj -1130 0 obj -<< -/K [73 0 R 72 0 R] -/P 1709 0 R -/S /Div ->> -endobj -1131 0 obj -<< -/K [75 0 R 74 0 R] -/P 1709 0 R -/S /Div ->> -endobj -1132 0 obj -<< -/K [77 0 R 76 0 R] -/P 1710 0 R -/S /Div ->> -endobj -1133 0 obj -<< -/K 78 0 R -/P 1710 0 R -/S /Div ->> -endobj -1134 0 obj -<< -/K 79 0 R -/P 1710 0 R -/S /Div ->> -endobj -1135 0 obj -<< -/K [81 0 R 80 0 R] -/P 1711 0 R -/S /Div ->> -endobj -1136 0 obj -<< -/K 82 0 R -/P 1711 0 R -/S /Div ->> -endobj -1137 0 obj -<< -/K 83 0 R -/P 1711 0 R -/S /Div ->> -endobj -1138 0 obj -<< -/K 84 0 R -/P 1711 0 R -/S /Div ->> -endobj -1139 0 obj -<< -/K 85 0 R -/P 1711 0 R -/S /Div ->> -endobj -1140 0 obj -<< -/K 86 0 R -/P 1711 0 R -/S /Div ->> -endobj -1141 0 obj -<< -/K 87 0 R -/P 1711 0 R -/S /Div ->> -endobj -1142 0 obj -<< -/K 88 0 R -/P 1711 0 R -/S /Div ->> -endobj -1143 0 obj -<< -/K [90 0 R 89 0 R] -/P 1712 0 R -/S /Div ->> -endobj -1144 0 obj -<< -/K [92 0 R 91 0 R] -/P 1712 0 R -/S /Div ->> -endobj -1145 0 obj -<< -/K [94 0 R 93 0 R] -/P 1712 0 R -/S /Div ->> -endobj -1146 0 obj -<< -/K [96 0 R 95 0 R] -/P 1713 0 R -/S /Div ->> -endobj -1147 0 obj -<< -/K 97 0 R -/P 1714 0 R -/S /Div ->> -endobj -1148 0 obj -<< -/K [99 0 R 98 0 R] -/P 1714 0 R -/S /Div ->> -endobj -1149 0 obj -<< -/K [101 0 R 100 0 R] -/P 1714 0 R -/S /Div ->> -endobj -1150 0 obj -<< -/K 102 0 R -/P 1715 0 R -/S /Div ->> -endobj -1151 0 obj -<< -/K [104 0 R 103 0 R] -/P 1716 0 R -/S /Div ->> -endobj -1152 0 obj -<< -/K [106 0 R 105 0 R] -/P 1716 0 R -/S /Div ->> -endobj -1153 0 obj -<< -/K [108 0 R 107 0 R] -/P 1717 0 R -/S /Div ->> -endobj -1154 0 obj -<< -/K [110 0 R 109 0 R] -/P 1718 0 R -/S /Div ->> -endobj -1155 0 obj -<< -/K [112 0 R 111 0 R] -/P 1719 0 R -/S /Div ->> -endobj -1156 0 obj -<< -/K [114 0 R 113 0 R] -/P 1720 0 R -/S /Div ->> -endobj -1157 0 obj -<< -/K [116 0 R 115 0 R] -/P 1718 0 R -/S /Div ->> -endobj -1158 0 obj -<< -/K [118 0 R 117 0 R] -/P 1718 0 R -/S /Div ->> -endobj -1159 0 obj -<< -/K [120 0 R 119 0 R] -/P 1718 0 R -/S /Div ->> -endobj -1160 0 obj -<< -/K [122 0 R 121 0 R] -/P 1718 0 R -/S /Div ->> -endobj -1161 0 obj -<< -/K [124 0 R 123 0 R] -/P 1718 0 R -/S /Div ->> -endobj -1162 0 obj -<< -/K 125 0 R -/P 1721 0 R -/S /Div ->> -endobj -1163 0 obj -<< -/K [127 0 R 126 0 R] -/P 1722 0 R -/S /Div ->> -endobj -1164 0 obj -<< -/K [129 0 R 128 0 R] -/P 1722 0 R -/S /Div ->> -endobj -1165 0 obj -<< -/K [131 0 R 130 0 R] -/P 1723 0 R -/S /Div ->> -endobj -1166 0 obj -<< -/K [133 0 R 132 0 R] -/P 1724 0 R -/S /Div ->> -endobj -1167 0 obj -<< -/K [135 0 R 134 0 R] -/P 1725 0 R -/S /Div ->> -endobj -1168 0 obj -<< -/K [137 0 R 136 0 R] -/P 1726 0 R -/S /Div ->> -endobj -1169 0 obj -<< -/K [139 0 R 138 0 R] -/P 1724 0 R -/S /Div ->> -endobj -1170 0 obj -<< -/K [141 0 R 140 0 R] -/P 1724 0 R -/S /Div ->> -endobj -1171 0 obj -<< -/K [143 0 R 142 0 R] -/P 1724 0 R -/S /Div ->> -endobj -1172 0 obj -<< -/K [145 0 R 144 0 R] -/P 1724 0 R -/S /Div ->> -endobj -1173 0 obj -<< -/K [147 0 R 146 0 R] -/P 1724 0 R -/S /Div ->> -endobj -1174 0 obj -<< -/K 148 0 R -/P 1727 0 R -/S /Div ->> -endobj -1175 0 obj -<< -/K [150 0 R 149 0 R] -/P 1728 0 R -/S /Div ->> -endobj -1176 0 obj -<< -/K [152 0 R 151 0 R] -/P 1728 0 R -/S /Div ->> -endobj -1177 0 obj -<< -/K [154 0 R 153 0 R] -/P 1729 0 R -/S /Div ->> -endobj -1178 0 obj -<< -/K [156 0 R 155 0 R] -/P 1730 0 R -/S /Div ->> -endobj -1179 0 obj -<< -/K [158 0 R 157 0 R] -/P 1731 0 R -/S /Div ->> -endobj -1180 0 obj -<< -/K [160 0 R 159 0 R] -/P 1732 0 R -/S /Div ->> -endobj -1181 0 obj -<< -/K [162 0 R 161 0 R] -/P 1730 0 R -/S /Div ->> -endobj -1182 0 obj -<< -/K [164 0 R 163 0 R] -/P 1730 0 R -/S /Div ->> -endobj -1183 0 obj -<< -/K [166 0 R 165 0 R] -/P 1730 0 R -/S /Div ->> -endobj -1184 0 obj -<< -/K [168 0 R 167 0 R] -/P 1730 0 R -/S /Div ->> -endobj -1185 0 obj -<< -/K [170 0 R 169 0 R] -/P 1730 0 R -/S /Div ->> -endobj -1186 0 obj -<< -/K 171 0 R -/P 1733 0 R -/S /Div ->> -endobj -1187 0 obj -<< -/K [173 0 R 172 0 R] -/P 1734 0 R -/S /Div ->> -endobj -1188 0 obj -<< -/K [175 0 R 174 0 R] -/P 1734 0 R -/S /Div ->> -endobj -1189 0 obj -<< -/K [177 0 R 176 0 R] -/P 1735 0 R -/S /Div ->> -endobj -1190 0 obj -<< -/K [179 0 R 178 0 R] -/P 1736 0 R -/S /Div ->> -endobj -1191 0 obj -<< -/K [181 0 R 180 0 R] -/P 1737 0 R -/S /Div ->> -endobj -1192 0 obj -<< -/K [183 0 R 182 0 R] -/P 1738 0 R -/S /Div ->> -endobj -1193 0 obj -<< -/K [185 0 R 184 0 R] -/P 1736 0 R -/S /Div ->> -endobj -1194 0 obj -<< -/K [187 0 R 186 0 R] -/P 1736 0 R -/S /Div ->> -endobj -1195 0 obj -<< -/K [189 0 R 188 0 R] -/P 1736 0 R -/S /Div ->> -endobj -1196 0 obj -<< -/K [191 0 R 190 0 R] -/P 1736 0 R -/S /Div ->> -endobj -1197 0 obj -<< -/K [193 0 R 192 0 R] -/P 1736 0 R -/S /Div ->> -endobj -1198 0 obj -<< -/K 194 0 R -/P 1739 0 R -/S /Div ->> -endobj -1199 0 obj -<< -/K [196 0 R 195 0 R] -/P 1740 0 R -/S /Div ->> -endobj -1200 0 obj -<< -/K [198 0 R 197 0 R] -/P 1740 0 R -/S /Div ->> -endobj -1201 0 obj -<< -/K [200 0 R 199 0 R] -/P 1741 0 R -/S /Div ->> -endobj -1202 0 obj -<< -/K [202 0 R 201 0 R] -/P 1742 0 R -/S /Div ->> -endobj -1203 0 obj -<< -/K [204 0 R 203 0 R] -/P 1743 0 R -/S /Div ->> -endobj -1204 0 obj -<< -/K [206 0 R 205 0 R] -/P 1744 0 R -/S /Div ->> -endobj -1205 0 obj -<< -/K [208 0 R 207 0 R] -/P 1742 0 R -/S /Div ->> -endobj -1206 0 obj -<< -/K [210 0 R 209 0 R] -/P 1742 0 R -/S /Div ->> -endobj -1207 0 obj -<< -/K [212 0 R 211 0 R] -/P 1742 0 R -/S /Div ->> -endobj -1208 0 obj -<< -/K [214 0 R 213 0 R] -/P 1742 0 R -/S /Div ->> -endobj -1209 0 obj -<< -/K [216 0 R 215 0 R] -/P 1742 0 R -/S /Div ->> -endobj -1210 0 obj -<< -/K 217 0 R -/P 1745 0 R -/S /Div ->> -endobj -1211 0 obj -<< -/K [219 0 R 218 0 R] -/P 1746 0 R -/S /Div ->> -endobj -1212 0 obj -<< -/K [221 0 R 220 0 R] -/P 1746 0 R -/S /Div ->> -endobj -1213 0 obj -<< -/K [223 0 R 222 0 R] -/P 1747 0 R -/S /Div ->> -endobj -1214 0 obj -<< -/K [225 0 R 224 0 R] -/P 1748 0 R -/S /Div ->> -endobj -1215 0 obj -<< -/K 226 0 R -/P 1749 0 R -/S /Div ->> -endobj -1216 0 obj -<< -/K [228 0 R 227 0 R] -/P 1750 0 R -/S /Div ->> -endobj -1217 0 obj -<< -/K [230 0 R 229 0 R] -/P 1748 0 R -/S /Div ->> -endobj -1218 0 obj -<< -/K [232 0 R 231 0 R] -/P 1748 0 R -/S /Div ->> -endobj -1219 0 obj -<< -/K [234 0 R 233 0 R] -/P 1748 0 R -/S /Div ->> -endobj -1220 0 obj -<< -/K [236 0 R 235 0 R] -/P 1748 0 R -/S /Div ->> -endobj -1221 0 obj -<< -/K [238 0 R 237 0 R] -/P 1748 0 R -/S /Div ->> -endobj -1222 0 obj -<< -/K 239 0 R -/P 1751 0 R -/S /Div ->> -endobj -1223 0 obj -<< -/K 240 0 R -/P 1752 0 R -/S /Div ->> -endobj -1224 0 obj -<< -/K [242 0 R 241 0 R] -/P 1752 0 R -/S /Div ->> -endobj -1225 0 obj -<< -/K [244 0 R 243 0 R] -/P 1753 0 R -/S /Div ->> -endobj -1226 0 obj -<< -/K [246 0 R 245 0 R] -/P 1753 0 R -/S /Div ->> -endobj -1227 0 obj -<< -/K [248 0 R 247 0 R] -/P 1754 0 R -/S /Div ->> -endobj -1228 0 obj -<< -/K [250 0 R 249 0 R] -/P 1755 0 R -/S /Div ->> -endobj -1229 0 obj -<< -/K [252 0 R 251 0 R] -/P 1756 0 R -/S /Div ->> -endobj -1230 0 obj -<< -/K [254 0 R 253 0 R] -/P 1757 0 R -/S /Div ->> -endobj -1231 0 obj -<< -/K [256 0 R 255 0 R] -/P 1755 0 R -/S /Div ->> -endobj -1232 0 obj -<< -/K [258 0 R 257 0 R] -/P 1755 0 R -/S /Div ->> -endobj -1233 0 obj -<< -/K [260 0 R 259 0 R] -/P 1755 0 R -/S /Div ->> -endobj -1234 0 obj -<< -/K [262 0 R 261 0 R] -/P 1755 0 R -/S /Div ->> -endobj -1235 0 obj -<< -/K [264 0 R 263 0 R] -/P 1755 0 R -/S /Div ->> -endobj -1236 0 obj -<< -/K 265 0 R -/P 1758 0 R -/S /Div ->> -endobj -1237 0 obj -<< -/K 266 0 R -/P 1759 0 R -/S /Div ->> -endobj -1238 0 obj -<< -/K [268 0 R 267 0 R] -/P 1759 0 R -/S /Div ->> -endobj -1239 0 obj -<< -/K [270 0 R 269 0 R] -/P 1760 0 R -/S /Div ->> -endobj -1240 0 obj -<< -/K [272 0 R 271 0 R] -/P 1760 0 R -/S /Div ->> -endobj -1241 0 obj -<< -/K [274 0 R 273 0 R] -/P 1761 0 R -/S /Div ->> -endobj -1242 0 obj -<< -/K [276 0 R 275 0 R] -/P 1762 0 R -/S /Div ->> -endobj -1243 0 obj -<< -/K [278 0 R 277 0 R] -/P 1763 0 R -/S /Div ->> -endobj -1244 0 obj -<< -/K [280 0 R 279 0 R] -/P 1764 0 R -/S /Div ->> -endobj -1245 0 obj -<< -/K [282 0 R 281 0 R] -/P 1762 0 R -/S /Div ->> -endobj -1246 0 obj -<< -/K [284 0 R 283 0 R] -/P 1762 0 R -/S /Div ->> -endobj -1247 0 obj -<< -/K [286 0 R 285 0 R] -/P 1762 0 R -/S /Div ->> -endobj -1248 0 obj -<< -/K [288 0 R 287 0 R] -/P 1762 0 R -/S /Div ->> -endobj -1249 0 obj -<< -/K [290 0 R 289 0 R] -/P 1762 0 R -/S /Div ->> -endobj -1250 0 obj -<< -/K 291 0 R -/P 1765 0 R -/S /Div ->> -endobj -1251 0 obj -<< -/K [293 0 R 292 0 R] -/P 1766 0 R -/S /Div ->> -endobj -1252 0 obj -<< -/K [295 0 R 294 0 R] -/P 1766 0 R -/S /Div ->> -endobj -1253 0 obj -<< -/K [297 0 R 296 0 R] -/P 1767 0 R -/S /Div ->> -endobj -1254 0 obj -<< -/K [299 0 R 298 0 R] -/P 1768 0 R -/S /Div ->> -endobj -1255 0 obj -<< -/K [301 0 R 300 0 R] -/P 1769 0 R -/S /Div ->> -endobj -1256 0 obj -<< -/K [303 0 R 302 0 R] -/P 1770 0 R -/S /Div ->> -endobj -1257 0 obj -<< -/K [305 0 R 304 0 R] -/P 1768 0 R -/S /Div ->> -endobj -1258 0 obj -<< -/K [307 0 R 306 0 R] -/P 1768 0 R -/S /Div ->> -endobj -1259 0 obj -<< -/K [309 0 R 308 0 R] -/P 1768 0 R -/S /Div ->> -endobj -1260 0 obj -<< -/K [311 0 R 310 0 R] -/P 1768 0 R -/S /Div ->> -endobj -1261 0 obj -<< -/K [313 0 R 312 0 R] -/P 1768 0 R -/S /Div ->> -endobj -1262 0 obj -<< -/K 314 0 R -/P 1771 0 R -/S /Div ->> -endobj -1263 0 obj -<< -/K [316 0 R 315 0 R] -/P 1093 0 R -/S /Div ->> -endobj -1264 0 obj -<< -/K 317 0 R -/P 1093 0 R -/S /Div ->> -endobj -1265 0 obj -<< -/K 318 0 R -/P 1688 0 R -/S /Div ->> -endobj -1266 0 obj -<< -/K 319 0 R -/P 1688 0 R -/S /Div ->> -endobj -1267 0 obj -<< -/K 320 0 R -/P 1094 0 R -/S /Div ->> -endobj -1268 0 obj -<< -/K [322 0 R 321 0 R] -/P 1096 0 R -/S /Div ->> -endobj -1269 0 obj -<< -/K [324 0 R 323 0 R] -/P 1690 0 R -/S /Div ->> -endobj -1270 0 obj -<< -/K [326 0 R 325 0 R] -/P 1772 0 R -/S /Div ->> -endobj -1271 0 obj -<< -/K 327 0 R -/P 1772 0 R -/S /Div ->> -endobj -1272 0 obj -<< -/K 328 0 R -/P 1772 0 R -/S /Div ->> -endobj -1273 0 obj -<< -/K [330 0 R 329 0 R] -/P 1773 0 R -/S /Div ->> -endobj -1274 0 obj -<< -/K 331 0 R -/P 1773 0 R -/S /Div ->> -endobj -1275 0 obj -<< -/K 332 0 R -/P 1773 0 R -/S /Div ->> -endobj -1276 0 obj -<< -/K 333 0 R -/P 1773 0 R -/S /Div ->> -endobj -1277 0 obj -<< -/K 334 0 R -/P 1773 0 R -/S /Div ->> -endobj -1278 0 obj -<< -/K 335 0 R -/P 1773 0 R -/S /Div ->> -endobj -1279 0 obj -<< -/K 336 0 R -/P 1773 0 R -/S /Div ->> -endobj -1280 0 obj -<< -/K 337 0 R -/P 1773 0 R -/S /Div ->> -endobj -1281 0 obj -<< -/K [339 0 R 338 0 R] -/P 1774 0 R -/S /Div ->> -endobj -1282 0 obj -<< -/K [341 0 R 340 0 R] -/P 1774 0 R -/S /Div ->> -endobj -1283 0 obj -<< -/K [343 0 R 342 0 R] -/P 1775 0 R -/S /Div ->> -endobj -1284 0 obj -<< -/K [345 0 R 344 0 R] -/P 1776 0 R -/S /Div ->> -endobj -1285 0 obj -<< -/K [347 0 R 346 0 R] -/P 1777 0 R -/S /Div ->> -endobj -1286 0 obj -<< -/K [349 0 R 348 0 R] -/P 1778 0 R -/S /Div ->> -endobj -1287 0 obj -<< -/K [351 0 R 350 0 R] -/P 1776 0 R -/S /Div ->> -endobj -1288 0 obj -<< -/K [353 0 R 352 0 R] -/P 1776 0 R -/S /Div ->> -endobj -1289 0 obj -<< -/K [355 0 R 354 0 R] -/P 1776 0 R -/S /Div ->> -endobj -1290 0 obj -<< -/K [357 0 R 356 0 R] -/P 1776 0 R -/S /Div ->> -endobj -1291 0 obj -<< -/K [359 0 R 358 0 R] -/P 1776 0 R -/S /Div ->> -endobj -1292 0 obj -<< -/K 360 0 R -/P 1779 0 R -/S /Div ->> -endobj -1293 0 obj -<< -/K [362 0 R 361 0 R] -/P 1780 0 R -/S /Div ->> -endobj -1294 0 obj -<< -/K [364 0 R 363 0 R] -/P 1780 0 R -/S /Div ->> -endobj -1295 0 obj -<< -/K [366 0 R 365 0 R] -/P 1781 0 R -/S /Div ->> -endobj -1296 0 obj -<< -/K [368 0 R 367 0 R] -/P 1782 0 R -/S /Div ->> -endobj -1297 0 obj -<< -/K [370 0 R 369 0 R] -/P 1783 0 R -/S /Div ->> -endobj -1298 0 obj -<< -/K [372 0 R 371 0 R] -/P 1784 0 R -/S /Div ->> -endobj -1299 0 obj -<< -/K [374 0 R 373 0 R] -/P 1782 0 R -/S /Div ->> -endobj -1300 0 obj -<< -/K [376 0 R 375 0 R] -/P 1782 0 R -/S /Div ->> -endobj -1301 0 obj -<< -/K [378 0 R 377 0 R] -/P 1782 0 R -/S /Div ->> -endobj -1302 0 obj -<< -/K [380 0 R 379 0 R] -/P 1782 0 R -/S /Div ->> -endobj -1303 0 obj -<< -/K [382 0 R 381 0 R] -/P 1782 0 R -/S /Div ->> -endobj -1304 0 obj -<< -/K 383 0 R -/P 1785 0 R -/S /Div ->> -endobj -1305 0 obj -<< -/K 384 0 R -/P 1786 0 R -/S /Div ->> -endobj -1306 0 obj -<< -/K [386 0 R 385 0 R] -/P 1786 0 R -/S /Div ->> -endobj -1307 0 obj -<< -/K [388 0 R 387 0 R] -/P 1787 0 R -/S /Div ->> -endobj -1308 0 obj -<< -/K [390 0 R 389 0 R] -/P 1787 0 R -/S /Div ->> -endobj -1309 0 obj -<< -/K [392 0 R 391 0 R] -/P 1788 0 R -/S /Div ->> -endobj -1310 0 obj -<< -/K [394 0 R 393 0 R] -/P 1789 0 R -/S /Div ->> -endobj -1311 0 obj -<< -/K [396 0 R 395 0 R] -/P 1790 0 R -/S /Div ->> -endobj -1312 0 obj -<< -/K [398 0 R 397 0 R] -/P 1791 0 R -/S /Div ->> -endobj -1313 0 obj -<< -/K [400 0 R 399 0 R] -/P 1789 0 R -/S /Div ->> -endobj -1314 0 obj -<< -/K [402 0 R 401 0 R] -/P 1789 0 R -/S /Div ->> -endobj -1315 0 obj -<< -/K [404 0 R 403 0 R] -/P 1789 0 R -/S /Div ->> -endobj -1316 0 obj -<< -/K [406 0 R 405 0 R] -/P 1789 0 R -/S /Div ->> -endobj -1317 0 obj -<< -/K [408 0 R 407 0 R] -/P 1789 0 R -/S /Div ->> -endobj -1318 0 obj -<< -/K 409 0 R -/P 1792 0 R -/S /Div ->> -endobj -1319 0 obj -<< -/K [411 0 R 410 0 R] -/P 1793 0 R -/S /Div ->> -endobj -1320 0 obj -<< -/K [413 0 R 412 0 R] -/P 1793 0 R -/S /Div ->> -endobj -1321 0 obj -<< -/K [415 0 R 414 0 R] -/P 1794 0 R -/S /Div ->> -endobj -1322 0 obj -<< -/K [417 0 R 416 0 R] -/P 1795 0 R -/S /Div ->> -endobj -1323 0 obj -<< -/K 418 0 R -/P 1796 0 R -/S /Div ->> -endobj -1324 0 obj -<< -/K [420 0 R 419 0 R] -/P 1797 0 R -/S /Div ->> -endobj -1325 0 obj -<< -/K [422 0 R 421 0 R] -/P 1795 0 R -/S /Div ->> -endobj -1326 0 obj -<< -/K [424 0 R 423 0 R] -/P 1795 0 R -/S /Div ->> -endobj -1327 0 obj -<< -/K [426 0 R 425 0 R] -/P 1795 0 R -/S /Div ->> -endobj -1328 0 obj -<< -/K [428 0 R 427 0 R] -/P 1795 0 R -/S /Div ->> -endobj -1329 0 obj -<< -/K [430 0 R 429 0 R] -/P 1795 0 R -/S /Div ->> -endobj -1330 0 obj -<< -/K 431 0 R -/P 1798 0 R -/S /Div ->> -endobj -1331 0 obj -<< -/K 432 0 R -/P 1799 0 R -/S /Div ->> -endobj -1332 0 obj -<< -/K [434 0 R 433 0 R] -/P 1799 0 R -/S /Div ->> -endobj -1333 0 obj -<< -/K [436 0 R 435 0 R] -/P 1800 0 R -/S /Div ->> -endobj -1334 0 obj -<< -/K [438 0 R 437 0 R] -/P 1800 0 R -/S /Div ->> -endobj -1335 0 obj -<< -/K [440 0 R 439 0 R] -/P 1801 0 R -/S /Div ->> -endobj -1336 0 obj -<< -/K [442 0 R 441 0 R] -/P 1802 0 R -/S /Div ->> -endobj -1337 0 obj -<< -/K 443 0 R -/P 1803 0 R -/S /Div ->> -endobj -1338 0 obj -<< -/K [445 0 R 444 0 R] -/P 1804 0 R -/S /Div ->> -endobj -1339 0 obj -<< -/K [447 0 R 446 0 R] -/P 1802 0 R -/S /Div ->> -endobj -1340 0 obj -<< -/K [449 0 R 448 0 R] -/P 1802 0 R -/S /Div ->> -endobj -1341 0 obj -<< -/K [451 0 R 450 0 R] -/P 1802 0 R -/S /Div ->> -endobj -1342 0 obj -<< -/K [453 0 R 452 0 R] -/P 1802 0 R -/S /Div ->> -endobj -1343 0 obj -<< -/K [455 0 R 454 0 R] -/P 1802 0 R -/S /Div ->> -endobj -1344 0 obj -<< -/K 456 0 R -/P 1805 0 R -/S /Div ->> -endobj -1345 0 obj -<< -/K 457 0 R -/P 1806 0 R -/S /Div ->> -endobj -1346 0 obj -<< -/K [459 0 R 458 0 R] -/P 1806 0 R -/S /Div ->> -endobj -1347 0 obj -<< -/K [461 0 R 460 0 R] -/P 1807 0 R -/S /Div ->> -endobj -1348 0 obj -<< -/K [463 0 R 462 0 R] -/P 1807 0 R -/S /Div ->> -endobj -1349 0 obj -<< -/K [465 0 R 464 0 R] -/P 1808 0 R -/S /Div ->> -endobj -1350 0 obj -<< -/K [467 0 R 466 0 R] -/P 1809 0 R -/S /Div ->> -endobj -1351 0 obj -<< -/K 468 0 R -/P 1810 0 R -/S /Div ->> -endobj -1352 0 obj -<< -/K [470 0 R 469 0 R] -/P 1811 0 R -/S /Div ->> -endobj -1353 0 obj -<< -/K [472 0 R 471 0 R] -/P 1809 0 R -/S /Div ->> -endobj -1354 0 obj -<< -/K [474 0 R 473 0 R] -/P 1809 0 R -/S /Div ->> -endobj -1355 0 obj -<< -/K [476 0 R 475 0 R] -/P 1809 0 R -/S /Div ->> -endobj -1356 0 obj -<< -/K [478 0 R 477 0 R] -/P 1809 0 R -/S /Div ->> -endobj -1357 0 obj -<< -/K [480 0 R 479 0 R] -/P 1809 0 R -/S /Div ->> -endobj -1358 0 obj -<< -/K 481 0 R -/P 1812 0 R -/S /Div ->> -endobj -1359 0 obj -<< -/K 482 0 R -/P 1813 0 R -/S /Div ->> -endobj -1360 0 obj -<< -/K [484 0 R 483 0 R] -/P 1813 0 R -/S /Div ->> -endobj -1361 0 obj -<< -/K [486 0 R 485 0 R] -/P 1814 0 R -/S /Div ->> -endobj -1362 0 obj -<< -/K [488 0 R 487 0 R] -/P 1814 0 R -/S /Div ->> -endobj -1363 0 obj -<< -/K [490 0 R 489 0 R] -/P 1815 0 R -/S /Div ->> -endobj -1364 0 obj -<< -/K [492 0 R 491 0 R] -/P 1816 0 R -/S /Div ->> -endobj -1365 0 obj -<< -/K [494 0 R 493 0 R] -/P 1817 0 R -/S /Div ->> -endobj -1366 0 obj -<< -/K [496 0 R 495 0 R] -/P 1818 0 R -/S /Div ->> -endobj -1367 0 obj -<< -/K [498 0 R 497 0 R] -/P 1816 0 R -/S /Div ->> -endobj -1368 0 obj -<< -/K [500 0 R 499 0 R] -/P 1816 0 R -/S /Div ->> -endobj -1369 0 obj -<< -/K [502 0 R 501 0 R] -/P 1816 0 R -/S /Div ->> -endobj -1370 0 obj -<< -/K [504 0 R 503 0 R] -/P 1816 0 R -/S /Div ->> -endobj -1371 0 obj -<< -/K [506 0 R 505 0 R] -/P 1816 0 R -/S /Div ->> -endobj -1372 0 obj -<< -/K 507 0 R -/P 1819 0 R -/S /Div ->> -endobj -1373 0 obj -<< -/K [509 0 R 508 0 R] -/P 1820 0 R -/S /Div ->> -endobj -1374 0 obj -<< -/K [511 0 R 510 0 R] -/P 1820 0 R -/S /Div ->> -endobj -1375 0 obj -<< -/K [513 0 R 512 0 R] -/P 1821 0 R -/S /Div ->> -endobj -1376 0 obj -<< -/K [515 0 R 514 0 R] -/P 1822 0 R -/S /Div ->> -endobj -1377 0 obj -<< -/K [517 0 R 516 0 R] -/P 1823 0 R -/S /Div ->> -endobj -1378 0 obj -<< -/K [519 0 R 518 0 R] -/P 1824 0 R -/S /Div ->> -endobj -1379 0 obj -<< -/K [521 0 R 520 0 R] -/P 1822 0 R -/S /Div ->> -endobj -1380 0 obj -<< -/K [523 0 R 522 0 R] -/P 1822 0 R -/S /Div ->> -endobj -1381 0 obj -<< -/K [525 0 R 524 0 R] -/P 1822 0 R -/S /Div ->> -endobj -1382 0 obj -<< -/K [527 0 R 526 0 R] -/P 1822 0 R -/S /Div ->> -endobj -1383 0 obj -<< -/K [529 0 R 528 0 R] -/P 1822 0 R -/S /Div ->> -endobj -1384 0 obj -<< -/K 530 0 R -/P 1825 0 R -/S /Div ->> -endobj -1385 0 obj -<< -/K [532 0 R 531 0 R] -/P 1826 0 R -/S /Div ->> -endobj -1386 0 obj -<< -/K [534 0 R 533 0 R] -/P 1826 0 R -/S /Div ->> -endobj -1387 0 obj -<< -/K [536 0 R 535 0 R] -/P 1827 0 R -/S /Div ->> -endobj -1388 0 obj -<< -/K [538 0 R 537 0 R] -/P 1828 0 R -/S /Div ->> -endobj -1389 0 obj -<< -/K [540 0 R 539 0 R] -/P 1829 0 R -/S /Div ->> -endobj -1390 0 obj -<< -/K [542 0 R 541 0 R] -/P 1830 0 R -/S /Div ->> -endobj -1391 0 obj -<< -/K [544 0 R 543 0 R] -/P 1828 0 R -/S /Div ->> -endobj -1392 0 obj -<< -/K [546 0 R 545 0 R] -/P 1828 0 R -/S /Div ->> -endobj -1393 0 obj -<< -/K [548 0 R 547 0 R] -/P 1828 0 R -/S /Div ->> -endobj -1394 0 obj -<< -/K [550 0 R 549 0 R] -/P 1828 0 R -/S /Div ->> -endobj -1395 0 obj -<< -/K [552 0 R 551 0 R] -/P 1828 0 R -/S /Div ->> -endobj -1396 0 obj -<< -/K 553 0 R -/P 1831 0 R -/S /Div ->> -endobj -1397 0 obj -<< -/K [555 0 R 554 0 R] -/P 1832 0 R -/S /Div ->> -endobj -1398 0 obj -<< -/K [557 0 R 556 0 R] -/P 1832 0 R -/S /Div ->> -endobj -1399 0 obj -<< -/K [559 0 R 558 0 R] -/P 1833 0 R -/S /Div ->> -endobj -1400 0 obj -<< -/K [561 0 R 560 0 R] -/P 1834 0 R -/S /Div ->> -endobj -1401 0 obj -<< -/K [563 0 R 562 0 R] -/P 1835 0 R -/S /Div ->> -endobj -1402 0 obj -<< -/K [565 0 R 564 0 R] -/P 1836 0 R -/S /Div ->> -endobj -1403 0 obj -<< -/K [567 0 R 566 0 R] -/P 1834 0 R -/S /Div ->> -endobj -1404 0 obj -<< -/K [569 0 R 568 0 R] -/P 1834 0 R -/S /Div ->> -endobj -1405 0 obj -<< -/K [571 0 R 570 0 R] -/P 1834 0 R -/S /Div ->> -endobj -1406 0 obj -<< -/K [573 0 R 572 0 R] -/P 1834 0 R -/S /Div ->> -endobj -1407 0 obj -<< -/K [575 0 R 574 0 R] -/P 1834 0 R -/S /Div ->> -endobj -1408 0 obj -<< -/K 576 0 R -/P 1837 0 R -/S /Div ->> -endobj -1409 0 obj -<< -/K [578 0 R 577 0 R] -/P 1838 0 R -/S /Div ->> -endobj -1410 0 obj -<< -/K [580 0 R 579 0 R] -/P 1838 0 R -/S /Div ->> -endobj -1411 0 obj -<< -/K [582 0 R 581 0 R] -/P 1839 0 R -/S /Div ->> -endobj -1412 0 obj -<< -/K [584 0 R 583 0 R] -/P 1840 0 R -/S /Div ->> -endobj -1413 0 obj -<< -/K [586 0 R 585 0 R] -/P 1841 0 R -/S /Div ->> -endobj -1414 0 obj -<< -/K [588 0 R 587 0 R] -/P 1842 0 R -/S /Div ->> -endobj -1415 0 obj -<< -/K [590 0 R 589 0 R] -/P 1840 0 R -/S /Div ->> -endobj -1416 0 obj -<< -/K [592 0 R 591 0 R] -/P 1840 0 R -/S /Div ->> -endobj -1417 0 obj -<< -/K [594 0 R 593 0 R] -/P 1840 0 R -/S /Div ->> -endobj -1418 0 obj -<< -/K [596 0 R 595 0 R] -/P 1840 0 R -/S /Div ->> -endobj -1419 0 obj -<< -/K [598 0 R 597 0 R] -/P 1840 0 R -/S /Div ->> -endobj -1420 0 obj -<< -/K 599 0 R -/P 1843 0 R -/S /Div ->> -endobj -1421 0 obj -<< -/K [601 0 R 600 0 R] -/P 1844 0 R -/S /Div ->> -endobj -1422 0 obj -<< -/K [603 0 R 602 0 R] -/P 1844 0 R -/S /Div ->> -endobj -1423 0 obj -<< -/K [605 0 R 604 0 R] -/P 1845 0 R -/S /Div ->> -endobj -1424 0 obj -<< -/K [607 0 R 606 0 R] -/P 1846 0 R -/S /Div ->> -endobj -1425 0 obj -<< -/K [609 0 R 608 0 R] -/P 1847 0 R -/S /Div ->> -endobj -1426 0 obj -<< -/K [611 0 R 610 0 R] -/P 1848 0 R -/S /Div ->> -endobj -1427 0 obj -<< -/K [613 0 R 612 0 R] -/P 1846 0 R -/S /Div ->> -endobj -1428 0 obj -<< -/K [615 0 R 614 0 R] -/P 1846 0 R -/S /Div ->> -endobj -1429 0 obj -<< -/K [617 0 R 616 0 R] -/P 1846 0 R -/S /Div ->> -endobj -1430 0 obj -<< -/K [619 0 R 618 0 R] -/P 1846 0 R -/S /Div ->> -endobj -1431 0 obj -<< -/K [621 0 R 620 0 R] -/P 1846 0 R -/S /Div ->> -endobj -1432 0 obj -<< -/K 622 0 R -/P 1849 0 R -/S /Div ->> -endobj -1433 0 obj -<< -/K [624 0 R 623 0 R] -/P 1850 0 R -/S /Div ->> -endobj -1434 0 obj -<< -/K [626 0 R 625 0 R] -/P 1850 0 R -/S /Div ->> -endobj -1435 0 obj -<< -/K [628 0 R 627 0 R] -/P 1851 0 R -/S /Div ->> -endobj -1436 0 obj -<< -/K [630 0 R 629 0 R] -/P 1852 0 R -/S /Div ->> -endobj -1437 0 obj -<< -/K [632 0 R 631 0 R] -/P 1853 0 R -/S /Div ->> -endobj -1438 0 obj -<< -/K [634 0 R 633 0 R] -/P 1854 0 R -/S /Div ->> -endobj -1439 0 obj -<< -/K [636 0 R 635 0 R] -/P 1852 0 R -/S /Div ->> -endobj -1440 0 obj -<< -/K [638 0 R 637 0 R] -/P 1852 0 R -/S /Div ->> -endobj -1441 0 obj -<< -/K [640 0 R 639 0 R] -/P 1852 0 R -/S /Div ->> -endobj -1442 0 obj -<< -/K [642 0 R 641 0 R] -/P 1852 0 R -/S /Div ->> -endobj -1443 0 obj -<< -/K [644 0 R 643 0 R] -/P 1852 0 R -/S /Div ->> -endobj -1444 0 obj -<< -/K 645 0 R -/P 1855 0 R -/S /Div ->> -endobj -1445 0 obj -<< -/K [647 0 R 646 0 R] -/P 1856 0 R -/S /Div ->> -endobj -1446 0 obj -<< -/K [649 0 R 648 0 R] -/P 1856 0 R -/S /Div ->> -endobj -1447 0 obj -<< -/K [651 0 R 650 0 R] -/P 1857 0 R -/S /Div ->> -endobj -1448 0 obj -<< -/K [653 0 R 652 0 R] -/P 1858 0 R -/S /Div ->> -endobj -1449 0 obj -<< -/K [655 0 R 654 0 R] -/P 1859 0 R -/S /Div ->> -endobj -1450 0 obj -<< -/K [657 0 R 656 0 R] -/P 1860 0 R -/S /Div ->> -endobj -1451 0 obj -<< -/K [659 0 R 658 0 R] -/P 1858 0 R -/S /Div ->> -endobj -1452 0 obj -<< -/K [661 0 R 660 0 R] -/P 1858 0 R -/S /Div ->> -endobj -1453 0 obj -<< -/K [663 0 R 662 0 R] -/P 1858 0 R -/S /Div ->> -endobj -1454 0 obj -<< -/K [665 0 R 664 0 R] -/P 1858 0 R -/S /Div ->> -endobj -1455 0 obj -<< -/K [667 0 R 666 0 R] -/P 1858 0 R -/S /Div ->> -endobj -1456 0 obj -<< -/K 668 0 R -/P 1861 0 R -/S /Div ->> -endobj -1457 0 obj -<< -/K [670 0 R 669 0 R] -/P 1862 0 R -/S /Div ->> -endobj -1458 0 obj -<< -/K [672 0 R 671 0 R] -/P 1862 0 R -/S /Div ->> -endobj -1459 0 obj -<< -/K [674 0 R 673 0 R] -/P 1863 0 R -/S /Div ->> -endobj -1460 0 obj -<< -/K [676 0 R 675 0 R] -/P 1864 0 R -/S /Div ->> -endobj -1461 0 obj -<< -/K [678 0 R 677 0 R] -/P 1865 0 R -/S /Div ->> -endobj -1462 0 obj -<< -/K [680 0 R 679 0 R] -/P 1866 0 R -/S /Div ->> -endobj -1463 0 obj -<< -/K [682 0 R 681 0 R] -/P 1864 0 R -/S /Div ->> -endobj -1464 0 obj -<< -/K [684 0 R 683 0 R] -/P 1864 0 R -/S /Div ->> -endobj -1465 0 obj -<< -/K [686 0 R 685 0 R] -/P 1864 0 R -/S /Div ->> -endobj -1466 0 obj -<< -/K [688 0 R 687 0 R] -/P 1864 0 R -/S /Div ->> -endobj -1467 0 obj -<< -/K [690 0 R 689 0 R] -/P 1864 0 R -/S /Div ->> -endobj -1468 0 obj -<< -/K 691 0 R -/P 1867 0 R -/S /Div ->> -endobj -1469 0 obj -<< -/K [693 0 R 692 0 R] -/P 1868 0 R -/S /Div ->> -endobj -1470 0 obj -<< -/K [695 0 R 694 0 R] -/P 1868 0 R -/S /Div ->> -endobj -1471 0 obj -<< -/K [697 0 R 696 0 R] -/P 1869 0 R -/S /Div ->> -endobj -1472 0 obj -<< -/K [699 0 R 698 0 R] -/P 1870 0 R -/S /Div ->> -endobj -1473 0 obj -<< -/K [701 0 R 700 0 R] -/P 1871 0 R -/S /Div ->> -endobj -1474 0 obj -<< -/K [703 0 R 702 0 R] -/P 1872 0 R -/S /Div ->> -endobj -1475 0 obj -<< -/K [705 0 R 704 0 R] -/P 1870 0 R -/S /Div ->> -endobj -1476 0 obj -<< -/K [707 0 R 706 0 R] -/P 1870 0 R -/S /Div ->> -endobj -1477 0 obj -<< -/K [709 0 R 708 0 R] -/P 1870 0 R -/S /Div ->> -endobj -1478 0 obj -<< -/K [711 0 R 710 0 R] -/P 1870 0 R -/S /Div ->> -endobj -1479 0 obj -<< -/K [713 0 R 712 0 R] -/P 1870 0 R -/S /Div ->> -endobj -1480 0 obj -<< -/K 714 0 R -/P 1873 0 R -/S /Div ->> -endobj -1481 0 obj -<< -/K [716 0 R 715 0 R] -/P 1874 0 R -/S /Div ->> -endobj -1482 0 obj -<< -/K [718 0 R 717 0 R] -/P 1874 0 R -/S /Div ->> -endobj -1483 0 obj -<< -/K [720 0 R 719 0 R] -/P 1875 0 R -/S /Div ->> -endobj -1484 0 obj -<< -/K [722 0 R 721 0 R] -/P 1876 0 R -/S /Div ->> -endobj -1485 0 obj -<< -/K [724 0 R 723 0 R] -/P 1877 0 R -/S /Div ->> -endobj -1486 0 obj -<< -/K [726 0 R 725 0 R] -/P 1878 0 R -/S /Div ->> -endobj -1487 0 obj -<< -/K [728 0 R 727 0 R] -/P 1876 0 R -/S /Div ->> -endobj -1488 0 obj -<< -/K [730 0 R 729 0 R] -/P 1876 0 R -/S /Div ->> -endobj -1489 0 obj -<< -/K [732 0 R 731 0 R] -/P 1876 0 R -/S /Div ->> -endobj -1490 0 obj -<< -/K [734 0 R 733 0 R] -/P 1876 0 R -/S /Div ->> -endobj -1491 0 obj -<< -/K [736 0 R 735 0 R] -/P 1876 0 R -/S /Div ->> -endobj -1492 0 obj -<< -/K 737 0 R -/P 1879 0 R -/S /Div ->> -endobj -1493 0 obj -<< -/K [739 0 R 738 0 R] -/P 1880 0 R -/S /Div ->> -endobj -1494 0 obj -<< -/K [741 0 R 740 0 R] -/P 1880 0 R -/S /Div ->> -endobj -1495 0 obj -<< -/K [743 0 R 742 0 R] -/P 1881 0 R -/S /Div ->> -endobj -1496 0 obj -<< -/K [745 0 R 744 0 R] -/P 1097 0 R -/S /Div ->> -endobj -1497 0 obj -<< -/K 746 0 R -/P 1097 0 R -/S /Div ->> -endobj -1498 0 obj -<< -/K 747 0 R -/P 1691 0 R -/S /Div ->> -endobj -1499 0 obj -<< -/K 748 0 R -/P 1691 0 R -/S /Div ->> -endobj -1500 0 obj -<< -/K 749 0 R -/P 1098 0 R -/S /Div ->> -endobj -1501 0 obj -<< -/K [751 0 R 750 0 R] -/P 1100 0 R -/S /Div ->> -endobj -1502 0 obj -<< -/K [753 0 R 752 0 R] -/P 1694 0 R -/S /Div ->> -endobj -1503 0 obj -<< -/K [755 0 R 754 0 R] -/P 1882 0 R -/S /Div ->> -endobj -1504 0 obj -<< -/K 756 0 R -/P 1882 0 R -/S /Div ->> -endobj -1505 0 obj -<< -/K 757 0 R -/P 1882 0 R -/S /Div ->> -endobj -1506 0 obj -<< -/K [759 0 R 758 0 R] -/P 1883 0 R -/S /Div ->> -endobj -1507 0 obj -<< -/K 760 0 R -/P 1883 0 R -/S /Div ->> -endobj -1508 0 obj -<< -/K 761 0 R -/P 1883 0 R -/S /Div ->> -endobj -1509 0 obj -<< -/K 762 0 R -/P 1883 0 R -/S /Div ->> -endobj -1510 0 obj -<< -/K 763 0 R -/P 1883 0 R -/S /Div ->> -endobj -1511 0 obj -<< -/K 764 0 R -/P 1883 0 R -/S /Div ->> -endobj -1512 0 obj -<< -/K 765 0 R -/P 1883 0 R -/S /Div ->> -endobj -1513 0 obj -<< -/K 766 0 R -/P 1883 0 R -/S /Div ->> -endobj -1514 0 obj -<< -/K [768 0 R 767 0 R] -/P 1884 0 R -/S /Div ->> -endobj -1515 0 obj -<< -/K [770 0 R 769 0 R] -/P 1885 0 R -/S /Div ->> -endobj -1516 0 obj -<< -/K [772 0 R 771 0 R] -/P 1886 0 R -/S /Div ->> -endobj -1517 0 obj -<< -/K [774 0 R 773 0 R] -/P 1884 0 R -/S /Div ->> -endobj -1518 0 obj -<< -/K [776 0 R 775 0 R] -/P 1884 0 R -/S /Div ->> -endobj -1519 0 obj -<< -/K [778 0 R 777 0 R] -/P 1884 0 R -/S /Div ->> -endobj -1520 0 obj -<< -/K [780 0 R 779 0 R] -/P 1884 0 R -/S /Div ->> -endobj -1521 0 obj -<< -/K [782 0 R 781 0 R] -/P 1884 0 R -/S /Div ->> -endobj -1522 0 obj -<< -/K 783 0 R -/P 1887 0 R -/S /Div ->> -endobj -1523 0 obj -<< -/K [785 0 R 784 0 R] -/P 1888 0 R -/S /Div ->> -endobj -1524 0 obj -<< -/K [787 0 R 786 0 R] -/P 1888 0 R -/S /Div ->> -endobj -1525 0 obj -<< -/K [789 0 R 788 0 R] -/P 1889 0 R -/S /Div ->> -endobj -1526 0 obj -<< -/K [791 0 R 790 0 R] -/P 1890 0 R -/S /Div ->> -endobj -1527 0 obj -<< -/K [793 0 R 792 0 R] -/P 1891 0 R -/S /Div ->> -endobj -1528 0 obj -<< -/K [795 0 R 794 0 R] -/P 1892 0 R -/S /Div ->> -endobj -1529 0 obj -<< -/K [797 0 R 796 0 R] -/P 1890 0 R -/S /Div ->> -endobj -1530 0 obj -<< -/K [799 0 R 798 0 R] -/P 1890 0 R -/S /Div ->> -endobj -1531 0 obj -<< -/K [801 0 R 800 0 R] -/P 1890 0 R -/S /Div ->> -endobj -1532 0 obj -<< -/K [803 0 R 802 0 R] -/P 1890 0 R -/S /Div ->> -endobj -1533 0 obj -<< -/K [805 0 R 804 0 R] -/P 1890 0 R -/S /Div ->> -endobj -1534 0 obj -<< -/K 806 0 R -/P 1893 0 R -/S /Div ->> -endobj -1535 0 obj -<< -/K [808 0 R 807 0 R] -/P 1894 0 R -/S /Div ->> -endobj -1536 0 obj -<< -/K [810 0 R 809 0 R] -/P 1894 0 R -/S /Div ->> -endobj -1537 0 obj -<< -/K [812 0 R 811 0 R] -/P 1895 0 R -/S /Div ->> -endobj -1538 0 obj -<< -/K [814 0 R 813 0 R] -/P 1896 0 R -/S /Div ->> -endobj -1539 0 obj -<< -/K [816 0 R 815 0 R] -/P 1897 0 R -/S /Div ->> -endobj -1540 0 obj -<< -/K [818 0 R 817 0 R] -/P 1898 0 R -/S /Div ->> -endobj -1541 0 obj -<< -/K [820 0 R 819 0 R] -/P 1896 0 R -/S /Div ->> -endobj -1542 0 obj -<< -/K [822 0 R 821 0 R] -/P 1896 0 R -/S /Div ->> -endobj -1543 0 obj -<< -/K [824 0 R 823 0 R] -/P 1896 0 R -/S /Div ->> -endobj -1544 0 obj -<< -/K [826 0 R 825 0 R] -/P 1896 0 R -/S /Div ->> -endobj -1545 0 obj -<< -/K [828 0 R 827 0 R] -/P 1896 0 R -/S /Div ->> -endobj -1546 0 obj -<< -/K 829 0 R -/P 1899 0 R -/S /Div ->> -endobj -1547 0 obj -<< -/K [831 0 R 830 0 R] -/P 1900 0 R -/S /Div ->> -endobj -1548 0 obj -<< -/K [833 0 R 832 0 R] -/P 1900 0 R -/S /Div ->> -endobj -1549 0 obj -<< -/K [835 0 R 834 0 R] -/P 1901 0 R -/S /Div ->> -endobj -1550 0 obj -<< -/K [837 0 R 836 0 R] -/P 1902 0 R -/S /Div ->> -endobj -1551 0 obj -<< -/K [839 0 R 838 0 R] -/P 1903 0 R -/S /Div ->> -endobj -1552 0 obj -<< -/K [841 0 R 840 0 R] -/P 1904 0 R -/S /Div ->> -endobj -1553 0 obj -<< -/K [843 0 R 842 0 R] -/P 1902 0 R -/S /Div ->> -endobj -1554 0 obj -<< -/K [845 0 R 844 0 R] -/P 1902 0 R -/S /Div ->> -endobj -1555 0 obj -<< -/K [847 0 R 846 0 R] -/P 1902 0 R -/S /Div ->> -endobj -1556 0 obj -<< -/K [849 0 R 848 0 R] -/P 1902 0 R -/S /Div ->> -endobj -1557 0 obj -<< -/K [851 0 R 850 0 R] -/P 1902 0 R -/S /Div ->> -endobj -1558 0 obj -<< -/K 852 0 R -/P 1905 0 R -/S /Div ->> -endobj -1559 0 obj -<< -/K [854 0 R 853 0 R] -/P 1906 0 R -/S /Div ->> -endobj -1560 0 obj -<< -/K [856 0 R 855 0 R] -/P 1906 0 R -/S /Div ->> -endobj -1561 0 obj -<< -/K [858 0 R 857 0 R] -/P 1907 0 R -/S /Div ->> -endobj -1562 0 obj -<< -/K [860 0 R 859 0 R] -/P 1908 0 R -/S /Div ->> -endobj -1563 0 obj -<< -/K [862 0 R 861 0 R] -/P 1909 0 R -/S /Div ->> -endobj -1564 0 obj -<< -/K [864 0 R 863 0 R] -/P 1910 0 R -/S /Div ->> -endobj -1565 0 obj -<< -/K [866 0 R 865 0 R] -/P 1908 0 R -/S /Div ->> -endobj -1566 0 obj -<< -/K [868 0 R 867 0 R] -/P 1908 0 R -/S /Div ->> -endobj -1567 0 obj -<< -/K [870 0 R 869 0 R] -/P 1908 0 R -/S /Div ->> -endobj -1568 0 obj -<< -/K [872 0 R 871 0 R] -/P 1908 0 R -/S /Div ->> -endobj -1569 0 obj -<< -/K [874 0 R 873 0 R] -/P 1908 0 R -/S /Div ->> -endobj -1570 0 obj -<< -/K 875 0 R -/P 1911 0 R -/S /Div ->> -endobj -1571 0 obj -<< -/K [877 0 R 876 0 R] -/P 1912 0 R -/S /Div ->> -endobj -1572 0 obj -<< -/K [879 0 R 878 0 R] -/P 1912 0 R -/S /Div ->> -endobj -1573 0 obj -<< -/K [881 0 R 880 0 R] -/P 1913 0 R -/S /Div ->> -endobj -1574 0 obj -<< -/K [883 0 R 882 0 R] -/P 1914 0 R -/S /Div ->> -endobj -1575 0 obj -<< -/K [885 0 R 884 0 R] -/P 1915 0 R -/S /Div ->> -endobj -1576 0 obj -<< -/K [887 0 R 886 0 R] -/P 1916 0 R -/S /Div ->> -endobj -1577 0 obj -<< -/K [889 0 R 888 0 R] -/P 1914 0 R -/S /Div ->> -endobj -1578 0 obj -<< -/K [891 0 R 890 0 R] -/P 1914 0 R -/S /Div ->> -endobj -1579 0 obj -<< -/K [893 0 R 892 0 R] -/P 1914 0 R -/S /Div ->> -endobj -1580 0 obj -<< -/K [895 0 R 894 0 R] -/P 1914 0 R -/S /Div ->> -endobj -1581 0 obj -<< -/K [897 0 R 896 0 R] -/P 1914 0 R -/S /Div ->> -endobj -1582 0 obj -<< -/K 898 0 R -/P 1917 0 R -/S /Div ->> -endobj -1583 0 obj -<< -/K [900 0 R 899 0 R] -/P 1918 0 R -/S /Div ->> -endobj -1584 0 obj -<< -/K [902 0 R 901 0 R] -/P 1918 0 R -/S /Div ->> -endobj -1585 0 obj -<< -/K [904 0 R 903 0 R] -/P 1919 0 R -/S /Div ->> -endobj -1586 0 obj -<< -/K [906 0 R 905 0 R] -/P 1920 0 R -/S /Div ->> -endobj -1587 0 obj -<< -/K [908 0 R 907 0 R] -/P 1921 0 R -/S /Div ->> -endobj -1588 0 obj -<< -/K [910 0 R 909 0 R] -/P 1922 0 R -/S /Div ->> -endobj -1589 0 obj -<< -/K [912 0 R 911 0 R] -/P 1920 0 R -/S /Div ->> -endobj -1590 0 obj -<< -/K [914 0 R 913 0 R] -/P 1920 0 R -/S /Div ->> -endobj -1591 0 obj -<< -/K [916 0 R 915 0 R] -/P 1920 0 R -/S /Div ->> -endobj -1592 0 obj -<< -/K [918 0 R 917 0 R] -/P 1920 0 R -/S /Div ->> -endobj -1593 0 obj -<< -/K [920 0 R 919 0 R] -/P 1920 0 R -/S /Div ->> -endobj -1594 0 obj -<< -/K 921 0 R -/P 1923 0 R -/S /Div ->> -endobj -1595 0 obj -<< -/K [923 0 R 922 0 R] -/P 1924 0 R -/S /Div ->> -endobj -1596 0 obj -<< -/K [925 0 R 924 0 R] -/P 1924 0 R -/S /Div ->> -endobj -1597 0 obj -<< -/K [927 0 R 926 0 R] -/P 1925 0 R -/S /Div ->> -endobj -1598 0 obj -<< -/K [929 0 R 928 0 R] -/P 1926 0 R -/S /Div ->> -endobj -1599 0 obj -<< -/K [931 0 R 930 0 R] -/P 1927 0 R -/S /Div ->> -endobj -1600 0 obj -<< -/K [933 0 R 932 0 R] -/P 1928 0 R -/S /Div ->> -endobj -1601 0 obj -<< -/K [935 0 R 934 0 R] -/P 1926 0 R -/S /Div ->> -endobj -1602 0 obj -<< -/K [937 0 R 936 0 R] -/P 1926 0 R -/S /Div ->> -endobj -1603 0 obj -<< -/K [939 0 R 938 0 R] -/P 1926 0 R -/S /Div ->> -endobj -1604 0 obj -<< -/K [941 0 R 940 0 R] -/P 1926 0 R -/S /Div ->> -endobj -1605 0 obj -<< -/K [943 0 R 942 0 R] -/P 1926 0 R -/S /Div ->> -endobj -1606 0 obj -<< -/K 944 0 R -/P 1929 0 R -/S /Div ->> -endobj -1607 0 obj -<< -/K [946 0 R 945 0 R] -/P 1930 0 R -/S /Div ->> -endobj -1608 0 obj -<< -/K [948 0 R 947 0 R] -/P 1930 0 R -/S /Div ->> -endobj -1609 0 obj -<< -/K [950 0 R 949 0 R] -/P 1931 0 R -/S /Div ->> -endobj -1610 0 obj -<< -/K [952 0 R 951 0 R] -/P 1932 0 R -/S /Div ->> -endobj -1611 0 obj -<< -/K [954 0 R 953 0 R] -/P 1933 0 R -/S /Div ->> -endobj -1612 0 obj -<< -/K [956 0 R 955 0 R] -/P 1934 0 R -/S /Div ->> -endobj -1613 0 obj -<< -/K [958 0 R 957 0 R] -/P 1932 0 R -/S /Div ->> -endobj -1614 0 obj -<< -/K [960 0 R 959 0 R] -/P 1932 0 R -/S /Div ->> -endobj -1615 0 obj -<< -/K [962 0 R 961 0 R] -/P 1932 0 R -/S /Div ->> -endobj -1616 0 obj -<< -/K [964 0 R 963 0 R] -/P 1932 0 R -/S /Div ->> -endobj -1617 0 obj -<< -/K [966 0 R 965 0 R] -/P 1932 0 R -/S /Div ->> -endobj -1618 0 obj -<< -/K 967 0 R -/P 1935 0 R -/S /Div ->> -endobj -1619 0 obj -<< -/K [969 0 R 968 0 R] -/P 1936 0 R -/S /Div ->> -endobj -1620 0 obj -<< -/K [971 0 R 970 0 R] -/P 1936 0 R -/S /Div ->> -endobj -1621 0 obj -<< -/K [973 0 R 972 0 R] -/P 1937 0 R -/S /Div ->> -endobj -1622 0 obj -<< -/K [975 0 R 974 0 R] -/P 1938 0 R -/S /Div ->> -endobj -1623 0 obj -<< -/K [977 0 R 976 0 R] -/P 1939 0 R -/S /Div ->> -endobj -1624 0 obj -<< -/K [979 0 R 978 0 R] -/P 1940 0 R -/S /Div ->> -endobj -1625 0 obj -<< -/K [981 0 R 980 0 R] -/P 1938 0 R -/S /Div ->> -endobj -1626 0 obj -<< -/K [983 0 R 982 0 R] -/P 1938 0 R -/S /Div ->> -endobj -1627 0 obj -<< -/K [985 0 R 984 0 R] -/P 1938 0 R -/S /Div ->> -endobj -1628 0 obj -<< -/K [987 0 R 986 0 R] -/P 1938 0 R -/S /Div ->> -endobj -1629 0 obj -<< -/K [989 0 R 988 0 R] -/P 1938 0 R -/S /Div ->> -endobj -1630 0 obj -<< -/K 990 0 R -/P 1941 0 R -/S /Div ->> -endobj -1631 0 obj -<< -/K [992 0 R 991 0 R] -/P 1942 0 R -/S /Div ->> -endobj -1632 0 obj -<< -/K 993 0 R -/P 1942 0 R -/S /Div ->> -endobj -1633 0 obj -<< -/K 994 0 R -/P 1942 0 R -/S /Div ->> -endobj -1634 0 obj -<< -/K 995 0 R -/P 1942 0 R -/S /Div ->> -endobj -1635 0 obj -<< -/K [997 0 R 996 0 R] -/P 1943 0 R -/S /Div ->> -endobj -1636 0 obj -<< -/K [999 0 R 998 0 R] -/P 1943 0 R -/S /Div ->> -endobj -1637 0 obj -<< -/K [1001 0 R 1000 0 R] -/P 1944 0 R -/S /Div ->> -endobj -1638 0 obj -<< -/K [1003 0 R 1002 0 R] -/P 1945 0 R -/S /Div ->> -endobj -1639 0 obj -<< -/K [1005 0 R 1004 0 R] -/P 1946 0 R -/S /Div ->> -endobj -1640 0 obj -<< -/K [1007 0 R 1006 0 R] -/P 1947 0 R -/S /Div ->> -endobj -1641 0 obj -<< -/K [1009 0 R 1008 0 R] -/P 1945 0 R -/S /Div ->> -endobj -1642 0 obj -<< -/K [1011 0 R 1010 0 R] -/P 1945 0 R -/S /Div ->> -endobj -1643 0 obj -<< -/K [1013 0 R 1012 0 R] -/P 1945 0 R -/S /Div ->> -endobj -1644 0 obj -<< -/K [1015 0 R 1014 0 R] -/P 1945 0 R -/S /Div ->> -endobj -1645 0 obj -<< -/K [1017 0 R 1016 0 R] -/P 1945 0 R -/S /Div ->> -endobj -1646 0 obj -<< -/K 1018 0 R -/P 1948 0 R -/S /Div ->> -endobj -1647 0 obj -<< -/K [1020 0 R 1019 0 R] -/P 1949 0 R -/S /Div ->> -endobj -1648 0 obj -<< -/K [1022 0 R 1021 0 R] -/P 1949 0 R -/S /Div ->> -endobj -1649 0 obj -<< -/K [1024 0 R 1023 0 R] -/P 1950 0 R -/S /Div ->> -endobj -1650 0 obj -<< -/K [1026 0 R 1025 0 R] -/P 1951 0 R -/S /Div ->> -endobj -1651 0 obj -<< -/K [1028 0 R 1027 0 R] -/P 1952 0 R -/S /Div ->> -endobj -1652 0 obj -<< -/K [1030 0 R 1029 0 R] -/P 1953 0 R -/S /Div ->> -endobj -1653 0 obj -<< -/K [1032 0 R 1031 0 R] -/P 1951 0 R -/S /Div ->> -endobj -1654 0 obj -<< -/K [1034 0 R 1033 0 R] -/P 1951 0 R -/S /Div ->> -endobj -1655 0 obj -<< -/K [1036 0 R 1035 0 R] -/P 1951 0 R -/S /Div ->> -endobj -1656 0 obj -<< -/K [1038 0 R 1037 0 R] -/P 1951 0 R -/S /Div ->> -endobj -1657 0 obj -<< -/K [1040 0 R 1039 0 R] -/P 1951 0 R -/S /Div ->> -endobj -1658 0 obj -<< -/K 1041 0 R -/P 1954 0 R -/S /Div ->> -endobj -1659 0 obj -<< -/K [1043 0 R 1042 0 R] -/P 1955 0 R -/S /Div ->> -endobj -1660 0 obj -<< -/K [1045 0 R 1044 0 R] -/P 1955 0 R -/S /Div ->> -endobj -1661 0 obj -<< -/K [1047 0 R 1046 0 R] -/P 1956 0 R -/S /Div ->> -endobj -1662 0 obj -<< -/K [1049 0 R 1048 0 R] -/P 1957 0 R -/S /Div ->> -endobj -1663 0 obj -<< -/K [1051 0 R 1050 0 R] -/P 1958 0 R -/S /Div ->> -endobj -1664 0 obj -<< -/K [1053 0 R 1052 0 R] -/P 1959 0 R -/S /Div ->> -endobj -1665 0 obj -<< -/K [1055 0 R 1054 0 R] -/P 1957 0 R -/S /Div ->> -endobj -1666 0 obj -<< -/K [1057 0 R 1056 0 R] -/P 1957 0 R -/S /Div ->> -endobj -1667 0 obj -<< -/K [1059 0 R 1058 0 R] -/P 1957 0 R -/S /Div ->> -endobj -1668 0 obj -<< -/K [1061 0 R 1060 0 R] -/P 1957 0 R -/S /Div ->> -endobj -1669 0 obj -<< -/K [1063 0 R 1062 0 R] -/P 1957 0 R -/S /Div ->> -endobj -1670 0 obj -<< -/K 1064 0 R -/P 1960 0 R -/S /Div ->> -endobj -1671 0 obj -<< -/K [1066 0 R 1065 0 R] -/P 1961 0 R -/S /Div ->> -endobj -1672 0 obj -<< -/K 1067 0 R -/P 1962 0 R -/S /Div ->> -endobj -1673 0 obj -<< -/K [1069 0 R 1068 0 R] -/P 1962 0 R -/S /Div ->> -endobj -1674 0 obj -<< -/K [1071 0 R 1070 0 R] -/P 1963 0 R -/S /Div ->> -endobj -1675 0 obj -<< -/K [1073 0 R 1072 0 R] -/P 1963 0 R -/S /Div ->> -endobj -1676 0 obj -<< -/K [1075 0 R 1074 0 R] -/P 1963 0 R -/S /Div ->> -endobj -1677 0 obj -<< -/K [1077 0 R 1076 0 R] -/P 1963 0 R -/S /Div ->> -endobj -1678 0 obj -<< -/K 1078 0 R -/P 1964 0 R -/S /Div ->> -endobj -1679 0 obj -<< -/K [1080 0 R 1079 0 R] -/P 1964 0 R -/S /Div ->> -endobj -1680 0 obj -<< -/K [1082 0 R 1081 0 R] -/P 1693 0 R -/S /Div ->> -endobj -1681 0 obj -<< -/K 1083 0 R -/P 1693 0 R -/S /Div ->> -endobj -1682 0 obj -<< -/Size 89654 -/CreationDate (D:20260122013740+01'00') -/ModDate (D:20260122013740+01'00') ->> -endobj -1683 0 obj -89654 -endobj -1684 0 obj -<< -/K [1086 0 R 1700 0 R] -/P 1965 0 R -/S /Table ->> -endobj -1685 0 obj -<< -/K [1965 0 R 1966 0 R] -/P 1090 0 R -/S /Sect ->> -endobj -1686 0 obj -<< -/K 1967 0 R -/P 1091 0 R -/S /Sect ->> -endobj -1687 0 obj -<< -/K 1105 0 R -/P 1092 0 R -/S /Sect ->> -endobj -1688 0 obj -<< -/K [1265 0 R 1266 0 R] -/P 1093 0 R -/S /Sect ->> -endobj -1689 0 obj -<< -/K 1968 0 R -/P 1095 0 R -/S /Sect ->> -endobj -1690 0 obj -<< -/K 1269 0 R -/P 1096 0 R -/S /Sect ->> -endobj -1691 0 obj -<< -/K [1498 0 R 1499 0 R] -/P 1097 0 R -/S /Sect ->> -endobj -1692 0 obj -<< -/K [1969 0 R 1970 0 R] -/P 1099 0 R -/S /Sect ->> -endobj -1693 0 obj -<< -/K [1680 0 R 1681 0 R] -/P 1099 0 R -/S /Sect ->> -endobj -1694 0 obj -<< -/K 1502 0 R -/P 1100 0 R -/S /Sect ->> -endobj -1695 0 obj -<< -/K 1106 0 R -/P 1696 0 R -/S /Sect ->> -endobj -1696 0 obj -<< -/K [1695 0 R 1107 0 R] -/P 1965 0 R -/S /Sect ->> -endobj -1697 0 obj -<< -/K [1108 0 R 1109 0 R 1698 0 R 1699 0 R] -/P 1965 0 R -/S /Sect ->> -endobj -1698 0 obj -<< -/K [1110 0 R 1111 0 R] -/P 1697 0 R -/S /Sect ->> -endobj -1699 0 obj -<< -/K 1112 0 R -/P 1697 0 R -/S /Sect ->> -endobj -1700 0 obj -<< -/K 1113 0 R -/P 1684 0 R -/S /TR ->> -endobj -1701 0 obj -<< -/K [1114 0 R 1115 0 R] -/P 1966 0 R -/S /Sect ->> -endobj -1702 0 obj -<< -/K [1116 0 R 1117 0 R 1118 0 R 1119 0 R] -/P 1971 0 R -/S /Sect ->> -endobj -1703 0 obj -<< -/K 1120 0 R -/P 1971 0 R -/S /Sect ->> -endobj -1704 0 obj -<< -/K [1121 0 R 1122 0 R 1123 0 R] -/P 1971 0 R -/S /Sect ->> -endobj -1705 0 obj -<< -/K 1124 0 R -/P 1971 0 R -/S /Sect ->> -endobj -1706 0 obj -<< -/K [1125 0 R 1126 0 R] -/P 1972 0 R -/S /Sect ->> -endobj -1707 0 obj -<< -/K 1127 0 R -/P 1972 0 R -/S /Sect ->> -endobj -1708 0 obj -<< -/K 1128 0 R -/P 1966 0 R -/S /Sect ->> -endobj -1709 0 obj -<< -/K [1129 0 R 1130 0 R 1131 0 R] -/P 1966 0 R -/S /Sect ->> -endobj -1710 0 obj -<< -/K [1132 0 R 1133 0 R 1134 0 R] -/P 1973 0 R -/S /Sect ->> -endobj -1711 0 obj -<< -/K [1135 0 R 1136 0 R 1137 0 R 1138 0 R 1139 0 R 1140 0 R 1141 0 R 1142 0 R] -/P 1973 0 R -/S /Sect ->> -endobj -1712 0 obj -<< -/K [1143 0 R 1144 0 R 1145 0 R] -/P 1974 0 R -/S /Sect ->> -endobj -1713 0 obj -<< -/K 1146 0 R -/P 1974 0 R -/S /Sect ->> -endobj -1714 0 obj -<< -/K [1974 0 R 1147 0 R 1148 0 R 1149 0 R 1715 0 R] -/P 1975 0 R -/S /Sect ->> -endobj -1715 0 obj -<< -/K 1150 0 R -/P 1714 0 R -/S /Sect ->> -endobj -1716 0 obj -<< -/K [1151 0 R 1152 0 R 1717 0 R] -/P 1976 0 R -/S /Sect ->> -endobj -1717 0 obj -<< -/K 1153 0 R -/P 1716 0 R -/S /Sect ->> -endobj -1718 0 obj -<< -/K [1154 0 R 1719 0 R 1720 0 R 1157 0 R 1158 0 R 1159 0 R 1160 0 R 1161 0 R] -/P 1976 0 R -/S /Sect ->> -endobj -1719 0 obj -<< -/K 1155 0 R -/P 1718 0 R -/S /Sect ->> -endobj -1720 0 obj -<< -/K 1156 0 R -/P 1718 0 R -/S /Sect ->> -endobj -1721 0 obj -<< -/K 1162 0 R -/P 1976 0 R -/S /Sect ->> -endobj -1722 0 obj -<< -/K [1163 0 R 1164 0 R 1723 0 R] -/P 1977 0 R -/S /Sect ->> -endobj -1723 0 obj -<< -/K 1165 0 R -/P 1722 0 R -/S /Sect ->> -endobj -1724 0 obj -<< -/K [1166 0 R 1725 0 R 1726 0 R 1169 0 R 1170 0 R 1171 0 R 1172 0 R 1173 0 R] -/P 1977 0 R -/S /Sect ->> -endobj -1725 0 obj -<< -/K 1167 0 R -/P 1724 0 R -/S /Sect ->> -endobj -1726 0 obj -<< -/K 1168 0 R -/P 1724 0 R -/S /Sect ->> -endobj -1727 0 obj -<< -/K 1174 0 R -/P 1977 0 R -/S /Sect ->> -endobj -1728 0 obj -<< -/K [1175 0 R 1176 0 R 1729 0 R] -/P 1978 0 R -/S /Sect ->> -endobj -1729 0 obj -<< -/K 1177 0 R -/P 1728 0 R -/S /Sect ->> -endobj -1730 0 obj -<< -/K [1178 0 R 1731 0 R 1732 0 R 1181 0 R 1182 0 R 1183 0 R 1184 0 R 1185 0 R] -/P 1978 0 R -/S /Sect ->> -endobj -1731 0 obj -<< -/K 1179 0 R -/P 1730 0 R -/S /Sect ->> -endobj -1732 0 obj -<< -/K 1180 0 R -/P 1730 0 R -/S /Sect ->> -endobj -1733 0 obj -<< -/K 1186 0 R -/P 1978 0 R -/S /Sect ->> -endobj -1734 0 obj -<< -/K [1187 0 R 1188 0 R 1735 0 R] -/P 1979 0 R -/S /Sect ->> -endobj -1735 0 obj -<< -/K 1189 0 R -/P 1734 0 R -/S /Sect ->> -endobj -1736 0 obj -<< -/K [1190 0 R 1737 0 R 1738 0 R 1193 0 R 1194 0 R 1195 0 R 1196 0 R 1197 0 R] -/P 1979 0 R -/S /Sect ->> -endobj -1737 0 obj -<< -/K 1191 0 R -/P 1736 0 R -/S /Sect ->> -endobj -1738 0 obj -<< -/K 1192 0 R -/P 1736 0 R -/S /Sect ->> -endobj -1739 0 obj -<< -/K 1198 0 R -/P 1979 0 R -/S /Sect ->> -endobj -1740 0 obj -<< -/K [1199 0 R 1200 0 R 1741 0 R] -/P 1980 0 R -/S /Sect ->> -endobj -1741 0 obj -<< -/K 1201 0 R -/P 1740 0 R -/S /Sect ->> -endobj -1742 0 obj -<< -/K [1202 0 R 1743 0 R 1744 0 R 1205 0 R 1206 0 R 1207 0 R 1208 0 R 1209 0 R] -/P 1980 0 R -/S /Sect ->> -endobj -1743 0 obj -<< -/K 1203 0 R -/P 1742 0 R -/S /Sect ->> -endobj -1744 0 obj -<< -/K 1204 0 R -/P 1742 0 R -/S /Sect ->> -endobj -1745 0 obj -<< -/K 1210 0 R -/P 1980 0 R -/S /Sect ->> -endobj -1746 0 obj -<< -/K [1211 0 R 1212 0 R 1747 0 R] -/P 1981 0 R -/S /Sect ->> -endobj -1747 0 obj -<< -/K 1213 0 R -/P 1746 0 R -/S /Sect ->> -endobj -1748 0 obj -<< -/K [1214 0 R 1749 0 R 1750 0 R 1217 0 R 1218 0 R 1219 0 R 1220 0 R 1221 0 R] -/P 1981 0 R -/S /Sect ->> -endobj -1749 0 obj -<< -/K 1215 0 R -/P 1748 0 R -/S /Sect ->> -endobj -1750 0 obj -<< -/K 1216 0 R -/P 1748 0 R -/S /Sect ->> -endobj -1751 0 obj -<< -/K 1222 0 R -/P 1981 0 R -/S /Sect ->> -endobj -1752 0 obj -<< -/K [1223 0 R 1224 0 R] -/P 1982 0 R -/S /TD ->> -endobj -1753 0 obj -<< -/K [1225 0 R 1226 0 R 1754 0 R] -/P 1983 0 R -/S /Sect ->> -endobj -1754 0 obj -<< -/K 1227 0 R -/P 1753 0 R -/S /Sect ->> -endobj -1755 0 obj -<< -/K [1228 0 R 1756 0 R 1757 0 R 1231 0 R 1232 0 R 1233 0 R 1234 0 R 1235 0 R] -/P 1983 0 R -/S /Sect ->> -endobj -1756 0 obj -<< -/K 1229 0 R -/P 1755 0 R -/S /Sect ->> -endobj -1757 0 obj -<< -/K 1230 0 R -/P 1755 0 R -/S /Sect ->> -endobj -1758 0 obj -<< -/K 1236 0 R -/P 1983 0 R -/S /Sect ->> -endobj -1759 0 obj -<< -/K [1237 0 R 1238 0 R] -/P 1984 0 R -/S /TD ->> -endobj -1760 0 obj -<< -/K [1239 0 R 1240 0 R 1761 0 R] -/P 1985 0 R -/S /Sect ->> -endobj -1761 0 obj -<< -/K 1241 0 R -/P 1760 0 R -/S /Sect ->> -endobj -1762 0 obj -<< -/K [1242 0 R 1763 0 R 1764 0 R 1245 0 R 1246 0 R 1247 0 R 1248 0 R 1249 0 R] -/P 1985 0 R -/S /Sect ->> -endobj -1763 0 obj -<< -/K 1243 0 R -/P 1762 0 R -/S /Sect ->> -endobj -1764 0 obj -<< -/K 1244 0 R -/P 1762 0 R -/S /Sect ->> -endobj -1765 0 obj -<< -/K 1250 0 R -/P 1985 0 R -/S /Sect ->> -endobj -1766 0 obj -<< -/K [1251 0 R 1252 0 R 1767 0 R] -/P 1986 0 R -/S /Sect ->> -endobj -1767 0 obj -<< -/K 1253 0 R -/P 1766 0 R -/S /Sect ->> -endobj -1768 0 obj -<< -/K [1254 0 R 1769 0 R 1770 0 R 1257 0 R 1258 0 R 1259 0 R 1260 0 R 1261 0 R] -/P 1986 0 R -/S /Sect ->> -endobj -1769 0 obj -<< -/K 1255 0 R -/P 1768 0 R -/S /Sect ->> -endobj -1770 0 obj -<< -/K 1256 0 R -/P 1768 0 R -/S /Sect ->> -endobj -1771 0 obj -<< -/K 1262 0 R -/P 1986 0 R -/S /Sect ->> -endobj -1772 0 obj -<< -/K [1270 0 R 1271 0 R 1272 0 R] -/P 1987 0 R -/S /Sect ->> -endobj -1773 0 obj -<< -/K [1273 0 R 1274 0 R 1275 0 R 1276 0 R 1277 0 R 1278 0 R 1279 0 R 1280 0 R] -/P 1987 0 R -/S /Sect ->> -endobj -1774 0 obj -<< -/K [1281 0 R 1282 0 R 1775 0 R] -/P 1988 0 R -/S /Sect ->> -endobj -1775 0 obj -<< -/K 1283 0 R -/P 1774 0 R -/S /Sect ->> -endobj -1776 0 obj -<< -/K [1284 0 R 1777 0 R 1778 0 R 1287 0 R 1288 0 R 1289 0 R 1290 0 R 1291 0 R] -/P 1988 0 R -/S /Sect ->> -endobj -1777 0 obj -<< -/K 1285 0 R -/P 1776 0 R -/S /Sect ->> -endobj -1778 0 obj -<< -/K 1286 0 R -/P 1776 0 R -/S /Sect ->> -endobj -1779 0 obj -<< -/K 1292 0 R -/P 1988 0 R -/S /Sect ->> -endobj -1780 0 obj -<< -/K [1293 0 R 1294 0 R 1781 0 R] -/P 1989 0 R -/S /Sect ->> -endobj -1781 0 obj -<< -/K 1295 0 R -/P 1780 0 R -/S /Sect ->> -endobj -1782 0 obj -<< -/K [1296 0 R 1783 0 R 1784 0 R 1299 0 R 1300 0 R 1301 0 R 1302 0 R 1303 0 R] -/P 1989 0 R -/S /Sect ->> -endobj -1783 0 obj -<< -/K 1297 0 R -/P 1782 0 R -/S /Sect ->> -endobj -1784 0 obj -<< -/K 1298 0 R -/P 1782 0 R -/S /Sect ->> -endobj -1785 0 obj -<< -/K 1304 0 R -/P 1989 0 R -/S /Sect ->> -endobj -1786 0 obj -<< -/K [1305 0 R 1306 0 R] -/P 1990 0 R -/S /TD ->> -endobj -1787 0 obj -<< -/K [1307 0 R 1308 0 R 1788 0 R] -/P 1991 0 R -/S /Sect ->> -endobj -1788 0 obj -<< -/K 1309 0 R -/P 1787 0 R -/S /Sect ->> -endobj -1789 0 obj -<< -/K [1310 0 R 1790 0 R 1791 0 R 1313 0 R 1314 0 R 1315 0 R 1316 0 R 1317 0 R] -/P 1991 0 R -/S /Sect ->> -endobj -1790 0 obj -<< -/K 1311 0 R -/P 1789 0 R -/S /Sect ->> -endobj -1791 0 obj -<< -/K 1312 0 R -/P 1789 0 R -/S /Sect ->> -endobj -1792 0 obj -<< -/K 1318 0 R -/P 1991 0 R -/S /Sect ->> -endobj -1793 0 obj -<< -/K [1319 0 R 1320 0 R 1794 0 R] -/P 1992 0 R -/S /Sect ->> -endobj -1794 0 obj -<< -/K 1321 0 R -/P 1793 0 R -/S /Sect ->> -endobj -1795 0 obj -<< -/K [1322 0 R 1796 0 R 1797 0 R 1325 0 R 1326 0 R 1327 0 R 1328 0 R 1329 0 R] -/P 1992 0 R -/S /Sect ->> -endobj -1796 0 obj -<< -/K 1323 0 R -/P 1795 0 R -/S /Sect ->> -endobj -1797 0 obj -<< -/K 1324 0 R -/P 1795 0 R -/S /Sect ->> -endobj -1798 0 obj -<< -/K 1330 0 R -/P 1992 0 R -/S /Sect ->> -endobj -1799 0 obj -<< -/K [1331 0 R 1332 0 R] -/P 1993 0 R -/S /TD ->> -endobj -1800 0 obj -<< -/K [1333 0 R 1334 0 R 1801 0 R] -/P 1994 0 R -/S /Sect ->> -endobj -1801 0 obj -<< -/K 1335 0 R -/P 1800 0 R -/S /Sect ->> -endobj -1802 0 obj -<< -/K [1336 0 R 1803 0 R 1804 0 R 1339 0 R 1340 0 R 1341 0 R 1342 0 R 1343 0 R] -/P 1994 0 R -/S /Sect ->> -endobj -1803 0 obj -<< -/K 1337 0 R -/P 1802 0 R -/S /Sect ->> -endobj -1804 0 obj -<< -/K 1338 0 R -/P 1802 0 R -/S /Sect ->> -endobj -1805 0 obj -<< -/K 1344 0 R -/P 1994 0 R -/S /Sect ->> -endobj -1806 0 obj -<< -/K [1345 0 R 1346 0 R] -/P 1995 0 R -/S /TD ->> -endobj -1807 0 obj -<< -/K [1347 0 R 1348 0 R 1808 0 R] -/P 1996 0 R -/S /Sect ->> -endobj -1808 0 obj -<< -/K 1349 0 R -/P 1807 0 R -/S /Sect ->> -endobj -1809 0 obj -<< -/K [1350 0 R 1810 0 R 1811 0 R 1353 0 R 1354 0 R 1355 0 R 1356 0 R 1357 0 R] -/P 1996 0 R -/S /Sect ->> -endobj -1810 0 obj -<< -/K 1351 0 R -/P 1809 0 R -/S /Sect ->> -endobj -1811 0 obj -<< -/K 1352 0 R -/P 1809 0 R -/S /Sect ->> -endobj -1812 0 obj -<< -/K 1358 0 R -/P 1996 0 R -/S /Sect ->> -endobj -1813 0 obj -<< -/K [1359 0 R 1360 0 R] -/P 1997 0 R -/S /TD ->> -endobj -1814 0 obj -<< -/K [1361 0 R 1362 0 R 1815 0 R] -/P 1998 0 R -/S /Sect ->> -endobj -1815 0 obj -<< -/K 1363 0 R -/P 1814 0 R -/S /Sect ->> -endobj -1816 0 obj -<< -/K [1364 0 R 1817 0 R 1818 0 R 1367 0 R 1368 0 R 1369 0 R 1370 0 R 1371 0 R] -/P 1998 0 R -/S /Sect ->> -endobj -1817 0 obj -<< -/K 1365 0 R -/P 1816 0 R -/S /Sect ->> -endobj -1818 0 obj -<< -/K 1366 0 R -/P 1816 0 R -/S /Sect ->> -endobj -1819 0 obj -<< -/K 1372 0 R -/P 1998 0 R -/S /Sect ->> -endobj -1820 0 obj -<< -/K [1373 0 R 1374 0 R 1821 0 R] -/P 1999 0 R -/S /Sect ->> -endobj -1821 0 obj -<< -/K 1375 0 R -/P 1820 0 R -/S /Sect ->> -endobj -1822 0 obj -<< -/K [1376 0 R 1823 0 R 1824 0 R 1379 0 R 1380 0 R 1381 0 R 1382 0 R 1383 0 R] -/P 1999 0 R -/S /Sect ->> -endobj -1823 0 obj -<< -/K 1377 0 R -/P 1822 0 R -/S /Sect ->> -endobj -1824 0 obj -<< -/K 1378 0 R -/P 1822 0 R -/S /Sect ->> -endobj -1825 0 obj -<< -/K 1384 0 R -/P 1999 0 R -/S /Sect ->> -endobj -1826 0 obj -<< -/K [1385 0 R 1386 0 R 1827 0 R] -/P 2000 0 R -/S /Sect ->> -endobj -1827 0 obj -<< -/K 1387 0 R -/P 1826 0 R -/S /Sect ->> -endobj -1828 0 obj -<< -/K [1388 0 R 1829 0 R 1830 0 R 1391 0 R 1392 0 R 1393 0 R 1394 0 R 1395 0 R] -/P 2000 0 R -/S /Sect ->> -endobj -1829 0 obj -<< -/K 1389 0 R -/P 1828 0 R -/S /Sect ->> -endobj -1830 0 obj -<< -/K 1390 0 R -/P 1828 0 R -/S /Sect ->> -endobj -1831 0 obj -<< -/K 1396 0 R -/P 2000 0 R -/S /Sect ->> -endobj -1832 0 obj -<< -/K [1397 0 R 1398 0 R 1833 0 R] -/P 2001 0 R -/S /Sect ->> -endobj -1833 0 obj -<< -/K 1399 0 R -/P 1832 0 R -/S /Sect ->> -endobj -1834 0 obj -<< -/K [1400 0 R 1835 0 R 1836 0 R 1403 0 R 1404 0 R 1405 0 R 1406 0 R 1407 0 R] -/P 2001 0 R -/S /Sect ->> -endobj -1835 0 obj -<< -/K 1401 0 R -/P 1834 0 R -/S /Sect ->> -endobj -1836 0 obj -<< -/K 1402 0 R -/P 1834 0 R -/S /Sect ->> -endobj -1837 0 obj -<< -/K 1408 0 R -/P 2001 0 R -/S /Sect ->> -endobj -1838 0 obj -<< -/K [1409 0 R 1410 0 R 1839 0 R] -/P 2002 0 R -/S /Sect ->> -endobj -1839 0 obj -<< -/K 1411 0 R -/P 1838 0 R -/S /Sect ->> -endobj -1840 0 obj -<< -/K [1412 0 R 1841 0 R 1842 0 R 1415 0 R 1416 0 R 1417 0 R 1418 0 R 1419 0 R] -/P 2002 0 R -/S /Sect ->> -endobj -1841 0 obj -<< -/K 1413 0 R -/P 1840 0 R -/S /Sect ->> -endobj -1842 0 obj -<< -/K 1414 0 R -/P 1840 0 R -/S /Sect ->> -endobj -1843 0 obj -<< -/K 1420 0 R -/P 2002 0 R -/S /Sect ->> -endobj -1844 0 obj -<< -/K [1421 0 R 1422 0 R 1845 0 R] -/P 2003 0 R -/S /Sect ->> -endobj -1845 0 obj -<< -/K 1423 0 R -/P 1844 0 R -/S /Sect ->> -endobj -1846 0 obj -<< -/K [1424 0 R 1847 0 R 1848 0 R 1427 0 R 1428 0 R 1429 0 R 1430 0 R 1431 0 R] -/P 2003 0 R -/S /Sect ->> -endobj -1847 0 obj -<< -/K 1425 0 R -/P 1846 0 R -/S /Sect ->> -endobj -1848 0 obj -<< -/K 1426 0 R -/P 1846 0 R -/S /Sect ->> -endobj -1849 0 obj -<< -/K 1432 0 R -/P 2003 0 R -/S /Sect ->> -endobj -1850 0 obj -<< -/K [1433 0 R 1434 0 R 1851 0 R] -/P 2004 0 R -/S /Sect ->> -endobj -1851 0 obj -<< -/K 1435 0 R -/P 1850 0 R -/S /Sect ->> -endobj -1852 0 obj -<< -/K [1436 0 R 1853 0 R 1854 0 R 1439 0 R 1440 0 R 1441 0 R 1442 0 R 1443 0 R] -/P 2004 0 R -/S /Sect ->> -endobj -1853 0 obj -<< -/K 1437 0 R -/P 1852 0 R -/S /Sect ->> -endobj -1854 0 obj -<< -/K 1438 0 R -/P 1852 0 R -/S /Sect ->> -endobj -1855 0 obj -<< -/K 1444 0 R -/P 2004 0 R -/S /Sect ->> -endobj -1856 0 obj -<< -/K [1445 0 R 1446 0 R 1857 0 R] -/P 2005 0 R -/S /Sect ->> -endobj -1857 0 obj -<< -/K 1447 0 R -/P 1856 0 R -/S /Sect ->> -endobj -1858 0 obj -<< -/K [1448 0 R 1859 0 R 1860 0 R 1451 0 R 1452 0 R 1453 0 R 1454 0 R 1455 0 R] -/P 2005 0 R -/S /Sect ->> -endobj -1859 0 obj -<< -/K 1449 0 R -/P 1858 0 R -/S /Sect ->> -endobj -1860 0 obj -<< -/K 1450 0 R -/P 1858 0 R -/S /Sect ->> -endobj -1861 0 obj -<< -/K 1456 0 R -/P 2005 0 R -/S /Sect ->> -endobj -1862 0 obj -<< -/K [1457 0 R 1458 0 R 1863 0 R] -/P 2006 0 R -/S /Sect ->> -endobj -1863 0 obj -<< -/K 1459 0 R -/P 1862 0 R -/S /Sect ->> -endobj -1864 0 obj -<< -/K [1460 0 R 1865 0 R 1866 0 R 1463 0 R 1464 0 R 1465 0 R 1466 0 R 1467 0 R] -/P 2006 0 R -/S /Sect ->> -endobj -1865 0 obj -<< -/K 1461 0 R -/P 1864 0 R -/S /Sect ->> -endobj -1866 0 obj -<< -/K 1462 0 R -/P 1864 0 R -/S /Sect ->> -endobj -1867 0 obj -<< -/K 1468 0 R -/P 2006 0 R -/S /Sect ->> -endobj -1868 0 obj -<< -/K [1469 0 R 1470 0 R 1869 0 R] -/P 2007 0 R -/S /Sect ->> -endobj -1869 0 obj -<< -/K 1471 0 R -/P 1868 0 R -/S /Sect ->> -endobj -1870 0 obj -<< -/K [1472 0 R 1871 0 R 1872 0 R 1475 0 R 1476 0 R 1477 0 R 1478 0 R 1479 0 R] -/P 2007 0 R -/S /Sect ->> -endobj -1871 0 obj -<< -/K 1473 0 R -/P 1870 0 R -/S /Sect ->> -endobj -1872 0 obj -<< -/K 1474 0 R -/P 1870 0 R -/S /Sect ->> -endobj -1873 0 obj -<< -/K 1480 0 R -/P 2007 0 R -/S /Sect ->> -endobj -1874 0 obj -<< -/K [1481 0 R 1482 0 R 1875 0 R] -/P 2008 0 R -/S /Sect ->> -endobj -1875 0 obj -<< -/K 1483 0 R -/P 1874 0 R -/S /Sect ->> -endobj -1876 0 obj -<< -/K [1484 0 R 1877 0 R 1878 0 R 1487 0 R 1488 0 R 1489 0 R 1490 0 R 1491 0 R] -/P 2008 0 R -/S /Sect ->> -endobj -1877 0 obj -<< -/K 1485 0 R -/P 1876 0 R -/S /Sect ->> -endobj -1878 0 obj -<< -/K 1486 0 R -/P 1876 0 R -/S /Sect ->> -endobj -1879 0 obj -<< -/K 1492 0 R -/P 2008 0 R -/S /Sect ->> -endobj -1880 0 obj -<< -/K [1493 0 R 1494 0 R 1881 0 R] -/P 2009 0 R -/S /Sect ->> -endobj -1881 0 obj -<< -/K 1495 0 R -/P 1880 0 R -/S /Sect ->> -endobj -1882 0 obj -<< -/K [1503 0 R 1504 0 R 1505 0 R] -/P 2010 0 R -/S /Sect ->> -endobj -1883 0 obj -<< -/K [1506 0 R 1507 0 R 1508 0 R 1509 0 R 1510 0 R 1511 0 R 1512 0 R 1513 0 R] -/P 2010 0 R -/S /Sect ->> -endobj -1884 0 obj -<< -/K [1514 0 R 1885 0 R 1886 0 R 1517 0 R 1518 0 R 1519 0 R 1520 0 R 1521 0 R] -/P 2011 0 R -/S /Sect ->> -endobj -1885 0 obj -<< -/K 1515 0 R -/P 1884 0 R -/S /Sect ->> -endobj -1886 0 obj -<< -/K 1516 0 R -/P 1884 0 R -/S /Sect ->> -endobj -1887 0 obj -<< -/K 1522 0 R -/P 2011 0 R -/S /Sect ->> -endobj -1888 0 obj -<< -/K [1523 0 R 1524 0 R 1889 0 R] -/P 2012 0 R -/S /Sect ->> -endobj -1889 0 obj -<< -/K 1525 0 R -/P 1888 0 R -/S /Sect ->> -endobj -1890 0 obj -<< -/K [1526 0 R 1891 0 R 1892 0 R 1529 0 R 1530 0 R 1531 0 R 1532 0 R 1533 0 R] -/P 2012 0 R -/S /Sect ->> -endobj -1891 0 obj -<< -/K 1527 0 R -/P 1890 0 R -/S /Sect ->> -endobj -1892 0 obj -<< -/K 1528 0 R -/P 1890 0 R -/S /Sect ->> -endobj -1893 0 obj -<< -/K 1534 0 R -/P 2012 0 R -/S /Sect ->> -endobj -1894 0 obj -<< -/K [1535 0 R 1536 0 R 1895 0 R] -/P 2013 0 R -/S /Sect ->> -endobj -1895 0 obj -<< -/K 1537 0 R -/P 1894 0 R -/S /Sect ->> -endobj -1896 0 obj -<< -/K [1538 0 R 1897 0 R 1898 0 R 1541 0 R 1542 0 R 1543 0 R 1544 0 R 1545 0 R] -/P 2013 0 R -/S /Sect ->> -endobj -1897 0 obj -<< -/K 1539 0 R -/P 1896 0 R -/S /Sect ->> -endobj -1898 0 obj -<< -/K 1540 0 R -/P 1896 0 R -/S /Sect ->> -endobj -1899 0 obj -<< -/K 1546 0 R -/P 2013 0 R -/S /Sect ->> -endobj -1900 0 obj -<< -/K [1547 0 R 1548 0 R 1901 0 R] -/P 2014 0 R -/S /Sect ->> -endobj -1901 0 obj -<< -/K 1549 0 R -/P 1900 0 R -/S /Sect ->> -endobj -1902 0 obj -<< -/K [1550 0 R 1903 0 R 1904 0 R 1553 0 R 1554 0 R 1555 0 R 1556 0 R 1557 0 R] -/P 2014 0 R -/S /Sect ->> -endobj -1903 0 obj -<< -/K 1551 0 R -/P 1902 0 R -/S /Sect ->> -endobj -1904 0 obj -<< -/K 1552 0 R -/P 1902 0 R -/S /Sect ->> -endobj -1905 0 obj -<< -/K 1558 0 R -/P 2014 0 R -/S /Sect ->> -endobj -1906 0 obj -<< -/K [1559 0 R 1560 0 R 1907 0 R] -/P 2015 0 R -/S /Sect ->> -endobj -1907 0 obj -<< -/K 1561 0 R -/P 1906 0 R -/S /Sect ->> -endobj -1908 0 obj -<< -/K [1562 0 R 1909 0 R 1910 0 R 1565 0 R 1566 0 R 1567 0 R 1568 0 R 1569 0 R] -/P 2015 0 R -/S /Sect ->> -endobj -1909 0 obj -<< -/K 1563 0 R -/P 1908 0 R -/S /Sect ->> -endobj -1910 0 obj -<< -/K 1564 0 R -/P 1908 0 R -/S /Sect ->> -endobj -1911 0 obj -<< -/K 1570 0 R -/P 2015 0 R -/S /Sect ->> -endobj -1912 0 obj -<< -/K [1571 0 R 1572 0 R 1913 0 R] -/P 2016 0 R -/S /Sect ->> -endobj -1913 0 obj -<< -/K 1573 0 R -/P 1912 0 R -/S /Sect ->> -endobj -1914 0 obj -<< -/K [1574 0 R 1915 0 R 1916 0 R 1577 0 R 1578 0 R 1579 0 R 1580 0 R 1581 0 R] -/P 2016 0 R -/S /Sect ->> -endobj -1915 0 obj -<< -/K 1575 0 R -/P 1914 0 R -/S /Sect ->> -endobj -1916 0 obj -<< -/K 1576 0 R -/P 1914 0 R -/S /Sect ->> -endobj -1917 0 obj -<< -/K 1582 0 R -/P 2016 0 R -/S /Sect ->> -endobj -1918 0 obj -<< -/K [1583 0 R 1584 0 R 1919 0 R] -/P 2017 0 R -/S /Sect ->> -endobj -1919 0 obj -<< -/K 1585 0 R -/P 1918 0 R -/S /Sect ->> -endobj -1920 0 obj -<< -/K [1586 0 R 1921 0 R 1922 0 R 1589 0 R 1590 0 R 1591 0 R 1592 0 R 1593 0 R] -/P 2017 0 R -/S /Sect ->> -endobj -1921 0 obj -<< -/K 1587 0 R -/P 1920 0 R -/S /Sect ->> -endobj -1922 0 obj -<< -/K 1588 0 R -/P 1920 0 R -/S /Sect ->> -endobj -1923 0 obj -<< -/K 1594 0 R -/P 2017 0 R -/S /Sect ->> -endobj -1924 0 obj -<< -/K [1595 0 R 1596 0 R 1925 0 R] -/P 2018 0 R -/S /Sect ->> -endobj -1925 0 obj -<< -/K 1597 0 R -/P 1924 0 R -/S /Sect ->> -endobj -1926 0 obj -<< -/K [1598 0 R 1927 0 R 1928 0 R 1601 0 R 1602 0 R 1603 0 R 1604 0 R 1605 0 R] -/P 2018 0 R -/S /Sect ->> -endobj -1927 0 obj -<< -/K 1599 0 R -/P 1926 0 R -/S /Sect ->> -endobj -1928 0 obj -<< -/K 1600 0 R -/P 1926 0 R -/S /Sect ->> -endobj -1929 0 obj -<< -/K 1606 0 R -/P 2018 0 R -/S /Sect ->> -endobj -1930 0 obj -<< -/K [1607 0 R 1608 0 R 1931 0 R] -/P 2019 0 R -/S /Sect ->> -endobj -1931 0 obj -<< -/K 1609 0 R -/P 1930 0 R -/S /Sect ->> -endobj -1932 0 obj -<< -/K [1610 0 R 1933 0 R 1934 0 R 1613 0 R 1614 0 R 1615 0 R 1616 0 R 1617 0 R] -/P 2019 0 R -/S /Sect ->> -endobj -1933 0 obj -<< -/K 1611 0 R -/P 1932 0 R -/S /Sect ->> -endobj -1934 0 obj -<< -/K 1612 0 R -/P 1932 0 R -/S /Sect ->> -endobj -1935 0 obj -<< -/K 1618 0 R -/P 2019 0 R -/S /Sect ->> -endobj -1936 0 obj -<< -/K [1619 0 R 1620 0 R 1937 0 R] -/P 2020 0 R -/S /Sect ->> -endobj -1937 0 obj -<< -/K 1621 0 R -/P 1936 0 R -/S /Sect ->> -endobj -1938 0 obj -<< -/K [1622 0 R 1939 0 R 1940 0 R 1625 0 R 1626 0 R 1627 0 R 1628 0 R 1629 0 R] -/P 2020 0 R -/S /Sect ->> -endobj -1939 0 obj -<< -/K 1623 0 R -/P 1938 0 R -/S /Sect ->> -endobj -1940 0 obj -<< -/K 1624 0 R -/P 1938 0 R -/S /Sect ->> -endobj -1941 0 obj -<< -/K 1630 0 R -/P 2020 0 R -/S /Sect ->> -endobj -1942 0 obj -<< -/K [1631 0 R 1632 0 R 1633 0 R 1634 0 R] -/P 2021 0 R -/S /TD ->> -endobj -1943 0 obj -<< -/K [1635 0 R 1636 0 R 1944 0 R] -/P 2022 0 R -/S /Sect ->> -endobj -1944 0 obj -<< -/K 1637 0 R -/P 1943 0 R -/S /Sect ->> -endobj -1945 0 obj -<< -/K [1638 0 R 1946 0 R 1947 0 R 1641 0 R 1642 0 R 1643 0 R 1644 0 R 1645 0 R] -/P 2022 0 R -/S /Sect ->> -endobj -1946 0 obj -<< -/K 1639 0 R -/P 1945 0 R -/S /Sect ->> -endobj -1947 0 obj -<< -/K 1640 0 R -/P 1945 0 R -/S /Sect ->> -endobj -1948 0 obj -<< -/K 1646 0 R -/P 2022 0 R -/S /Sect ->> -endobj -1949 0 obj -<< -/K [1647 0 R 1648 0 R 1950 0 R] -/P 2023 0 R -/S /Sect ->> -endobj -1950 0 obj -<< -/K 1649 0 R -/P 1949 0 R -/S /Sect ->> -endobj -1951 0 obj -<< -/K [1650 0 R 1952 0 R 1953 0 R 1653 0 R 1654 0 R 1655 0 R 1656 0 R 1657 0 R] -/P 2023 0 R -/S /Sect ->> -endobj -1952 0 obj -<< -/K 1651 0 R -/P 1951 0 R -/S /Sect ->> -endobj -1953 0 obj -<< -/K 1652 0 R -/P 1951 0 R -/S /Sect ->> -endobj -1954 0 obj -<< -/K 1658 0 R -/P 2023 0 R -/S /Sect ->> -endobj -1955 0 obj -<< -/K [1659 0 R 1660 0 R 1956 0 R] -/P 2024 0 R -/S /Sect ->> -endobj -1956 0 obj -<< -/K 1661 0 R -/P 1955 0 R -/S /Sect ->> -endobj -1957 0 obj -<< -/K [1662 0 R 1958 0 R 1959 0 R 1665 0 R 1666 0 R 1667 0 R 1668 0 R 1669 0 R] -/P 2024 0 R -/S /Sect ->> -endobj -1958 0 obj -<< -/K 1663 0 R -/P 1957 0 R -/S /Sect ->> -endobj -1959 0 obj -<< -/K 1664 0 R -/P 1957 0 R -/S /Sect ->> -endobj -1960 0 obj -<< -/K 1670 0 R -/P 2024 0 R -/S /Sect ->> -endobj -1961 0 obj -<< -/K 1671 0 R -/P 1970 0 R -/S /Sect ->> -endobj -1962 0 obj -<< -/K [1672 0 R 1673 0 R] -/P 2025 0 R -/S /Sect ->> -endobj -1963 0 obj -<< -/K [1674 0 R 1675 0 R 1676 0 R 1677 0 R] -/P 2026 0 R -/S /TD ->> -endobj -1964 0 obj -<< -/K [1678 0 R 1679 0 R] -/P 2025 0 R -/S /Sect ->> -endobj -1965 0 obj -<< -/K [1696 0 R 1697 0 R 1684 0 R] -/P 1685 0 R -/S /Sect ->> -endobj -1966 0 obj -<< -/K [1701 0 R 1971 0 R 1972 0 R 1708 0 R 1709 0 R] -/P 1685 0 R -/S /Sect ->> -endobj -1967 0 obj -<< -/K [2027 0 R 2028 0 R] -/P 1686 0 R -/S /Table ->> -endobj -1968 0 obj -<< -/K [2029 0 R 2030 0 R] -/P 1689 0 R -/S /Table ->> -endobj -1969 0 obj -<< -/K [2031 0 R 2032 0 R] -/P 1692 0 R -/S /Table ->> -endobj -1970 0 obj -<< -/K [1961 0 R 2025 0 R] -/P 1692 0 R -/S /Sect ->> -endobj -1971 0 obj -<< -/K [1702 0 R 1703 0 R 1704 0 R 1705 0 R] -/P 1966 0 R -/S /Sect ->> -endobj -1972 0 obj -<< -/K [1706 0 R 1707 0 R] -/P 1966 0 R -/S /Sect ->> -endobj -1973 0 obj -<< -/K [1710 0 R 1711 0 R] -/P 2027 0 R -/S /TD ->> -endobj -1974 0 obj -<< -/K [1712 0 R 1713 0 R] -/P 1714 0 R -/S /Sect ->> -endobj -1975 0 obj -<< -/K [1714 0 R 2033 0 R] -/P 2028 0 R -/S /TD ->> -endobj -1976 0 obj -<< -/K [1716 0 R 1718 0 R 1721 0 R] -/P 2034 0 R -/S /TD ->> -endobj -1977 0 obj -<< -/K [1722 0 R 1724 0 R 1727 0 R] -/P 2035 0 R -/S /TD ->> -endobj -1978 0 obj -<< -/K [1728 0 R 1730 0 R 1733 0 R] -/P 2036 0 R -/S /TD ->> -endobj -1979 0 obj -<< -/K [1734 0 R 1736 0 R 1739 0 R] -/P 2037 0 R -/S /TD ->> -endobj -1980 0 obj -<< -/K [1740 0 R 1742 0 R 1745 0 R] -/P 2038 0 R -/S /TD ->> -endobj -1981 0 obj -<< -/K [1746 0 R 1748 0 R 1751 0 R 2039 0 R] -/P 2040 0 R -/S /TD ->> -endobj -1982 0 obj -<< -/K 1752 0 R -/P 2041 0 R -/S /TR ->> -endobj -1983 0 obj -<< -/K [1753 0 R 1755 0 R 1758 0 R 2042 0 R] -/P 2043 0 R -/S /TD ->> -endobj -1984 0 obj -<< -/K 1759 0 R -/P 2044 0 R -/S /TR ->> -endobj -1985 0 obj -<< -/K [1760 0 R 1762 0 R 1765 0 R] -/P 2045 0 R -/S /TD ->> -endobj -1986 0 obj -<< -/K [1766 0 R 1768 0 R 1771 0 R] -/P 2046 0 R -/S /TD ->> -endobj -1987 0 obj -<< -/K [1772 0 R 1773 0 R] -/P 2029 0 R -/S /TD ->> -endobj -1988 0 obj -<< -/K [1774 0 R 1776 0 R 1779 0 R] -/P 2047 0 R -/S /TD ->> -endobj -1989 0 obj -<< -/K [1780 0 R 1782 0 R 1785 0 R 2048 0 R] -/P 2049 0 R -/S /TD ->> -endobj -1990 0 obj -<< -/K 1786 0 R -/P 2050 0 R -/S /TR ->> -endobj -1991 0 obj -<< -/K [1787 0 R 1789 0 R 1792 0 R] -/P 2051 0 R -/S /TD ->> -endobj -1992 0 obj -<< -/K [1793 0 R 1795 0 R 1798 0 R 2052 0 R] -/P 2053 0 R -/S /TD ->> -endobj -1993 0 obj -<< -/K 1799 0 R -/P 2054 0 R -/S /TR ->> -endobj -1994 0 obj -<< -/K [1800 0 R 1802 0 R 1805 0 R 2055 0 R] -/P 2056 0 R -/S /TD ->> -endobj -1995 0 obj -<< -/K 1806 0 R -/P 2057 0 R -/S /TR ->> -endobj -1996 0 obj -<< -/K [1807 0 R 1809 0 R 1812 0 R 2058 0 R] -/P 2059 0 R -/S /TD ->> -endobj -1997 0 obj -<< -/K 1813 0 R -/P 2060 0 R -/S /TR ->> -endobj -1998 0 obj -<< -/K [1814 0 R 1816 0 R 1819 0 R] -/P 2061 0 R -/S /TD ->> -endobj -1999 0 obj -<< -/K [1820 0 R 1822 0 R 1825 0 R] -/P 2062 0 R -/S /TD ->> -endobj -2000 0 obj -<< -/K [1826 0 R 1828 0 R 1831 0 R] -/P 2063 0 R -/S /TD ->> -endobj -2001 0 obj -<< -/K [1832 0 R 1834 0 R 1837 0 R] -/P 2064 0 R -/S /TD ->> -endobj -2002 0 obj -<< -/K [1838 0 R 1840 0 R 1843 0 R] -/P 2065 0 R -/S /TD ->> -endobj -2003 0 obj -<< -/K [1844 0 R 1846 0 R 1849 0 R] -/P 2066 0 R -/S /TD ->> -endobj -2004 0 obj -<< -/K [1850 0 R 1852 0 R 1855 0 R] -/P 2067 0 R -/S /TD ->> -endobj -2005 0 obj -<< -/K [1856 0 R 1858 0 R 1861 0 R] -/P 2068 0 R -/S /TD ->> -endobj -2006 0 obj -<< -/K [1862 0 R 1864 0 R 1867 0 R] -/P 2069 0 R -/S /TD ->> -endobj -2007 0 obj -<< -/K [1868 0 R 1870 0 R 1873 0 R] -/P 2070 0 R -/S /TD ->> -endobj -2008 0 obj -<< -/K [1874 0 R 1876 0 R 1879 0 R] -/P 2071 0 R -/S /TD ->> -endobj -2009 0 obj -<< -/K 1880 0 R -/P 2072 0 R -/S /TD ->> -endobj -2010 0 obj -<< -/K [1882 0 R 1883 0 R] -/P 2031 0 R -/S /TD ->> -endobj -2011 0 obj -<< -/K [1884 0 R 1887 0 R] -/P 2073 0 R -/S /TD ->> -endobj -2012 0 obj -<< -/K [1888 0 R 1890 0 R 1893 0 R] -/P 2074 0 R -/S /TD ->> -endobj -2013 0 obj -<< -/K [1894 0 R 1896 0 R 1899 0 R] -/P 2075 0 R -/S /TD ->> -endobj -2014 0 obj -<< -/K [1900 0 R 1902 0 R 1905 0 R] -/P 2076 0 R -/S /TD ->> -endobj -2015 0 obj -<< -/K [1906 0 R 1908 0 R 1911 0 R] -/P 2077 0 R -/S /TD ->> -endobj -2016 0 obj -<< -/K [1912 0 R 1914 0 R 1917 0 R] -/P 2078 0 R -/S /TD ->> -endobj -2017 0 obj -<< -/K [1918 0 R 1920 0 R 1923 0 R] -/P 2079 0 R -/S /TD ->> -endobj -2018 0 obj -<< -/K [1924 0 R 1926 0 R 1929 0 R] -/P 2080 0 R -/S /TD ->> -endobj -2019 0 obj -<< -/K [1930 0 R 1932 0 R 1935 0 R] -/P 2081 0 R -/S /TD ->> -endobj -2020 0 obj -<< -/K [1936 0 R 1938 0 R 1941 0 R 2082 0 R] -/P 2083 0 R -/S /TD ->> -endobj -2021 0 obj -<< -/K 1942 0 R -/P 2084 0 R -/S /TR ->> -endobj -2022 0 obj -<< -/K [1943 0 R 1945 0 R 1948 0 R] -/P 2085 0 R -/S /TD ->> -endobj -2023 0 obj -<< -/K [1949 0 R 1951 0 R 1954 0 R] -/P 2086 0 R -/S /TD ->> -endobj -2024 0 obj -<< -/K [1955 0 R 1957 0 R 1960 0 R] -/P 2087 0 R -/S /TD ->> -endobj -2025 0 obj -<< -/K [1962 0 R 2088 0 R 1964 0 R] -/P 1970 0 R -/S /Sect ->> -endobj -2026 0 obj -<< -/K 1963 0 R -/P 2089 0 R -/S /TR ->> -endobj -2027 0 obj -<< -/K 1973 0 R -/P 1967 0 R -/S /TR ->> -endobj -2028 0 obj -<< -/K 1975 0 R -/P 1967 0 R -/S /TR ->> -endobj -2029 0 obj -<< -/K 1987 0 R -/P 1968 0 R -/S /TR ->> -endobj -2030 0 obj -<< -/K 2090 0 R -/P 1968 0 R -/S /TR ->> -endobj -2031 0 obj -<< -/K 2010 0 R -/P 1969 0 R -/S /TR ->> -endobj -2032 0 obj -<< -/K 2091 0 R -/P 1969 0 R -/S /TR ->> -endobj -2033 0 obj -<< -/K 2092 0 R -/P 1975 0 R -/S /Sect ->> -endobj -2034 0 obj -<< -/K 1976 0 R -/P 2092 0 R -/S /TR ->> -endobj -2035 0 obj -<< -/K 1977 0 R -/P 2092 0 R -/S /TR ->> -endobj -2036 0 obj -<< -/K 1978 0 R -/P 2092 0 R -/S /TR ->> -endobj -2037 0 obj -<< -/K 1979 0 R -/P 2092 0 R -/S /TR ->> -endobj -2038 0 obj -<< -/K 1980 0 R -/P 2092 0 R -/S /TR ->> -endobj -2039 0 obj -<< -/K 2093 0 R -/P 1981 0 R -/S /Sect ->> -endobj -2040 0 obj -<< -/K 1981 0 R -/P 2092 0 R -/S /TR ->> -endobj -2041 0 obj -<< -/K 1982 0 R -/P 2093 0 R -/S /Table ->> -endobj -2042 0 obj -<< -/K 2094 0 R -/P 1983 0 R -/S /Sect ->> -endobj -2043 0 obj -<< -/K 1983 0 R -/P 2092 0 R -/S /TR ->> -endobj -2044 0 obj -<< -/K 1984 0 R -/P 2094 0 R -/S /Table ->> -endobj -2045 0 obj -<< -/K 1985 0 R -/P 2092 0 R -/S /TR ->> -endobj -2046 0 obj -<< -/K 1986 0 R -/P 2092 0 R -/S /TR ->> -endobj -2047 0 obj -<< -/K 1988 0 R -/P 2095 0 R -/S /TR ->> -endobj -2048 0 obj -<< -/K 2096 0 R -/P 1989 0 R -/S /Sect ->> -endobj -2049 0 obj -<< -/K 1989 0 R -/P 2095 0 R -/S /TR ->> -endobj -2050 0 obj -<< -/K 1990 0 R -/P 2096 0 R -/S /Table ->> -endobj -2051 0 obj -<< -/K 1991 0 R -/P 2095 0 R -/S /TR ->> -endobj -2052 0 obj -<< -/K 2097 0 R -/P 1992 0 R -/S /Sect ->> -endobj -2053 0 obj -<< -/K 1992 0 R -/P 2095 0 R -/S /TR ->> -endobj -2054 0 obj -<< -/K 1993 0 R -/P 2097 0 R -/S /Table ->> -endobj -2055 0 obj -<< -/K 2098 0 R -/P 1994 0 R -/S /Sect ->> -endobj -2056 0 obj -<< -/K 1994 0 R -/P 2095 0 R -/S /TR ->> -endobj -2057 0 obj -<< -/K 1995 0 R -/P 2098 0 R -/S /Table ->> -endobj -2058 0 obj -<< -/K 2099 0 R -/P 1996 0 R -/S /Sect ->> -endobj -2059 0 obj -<< -/K 1996 0 R -/P 2095 0 R -/S /TR ->> -endobj -2060 0 obj -<< -/K 1997 0 R -/P 2099 0 R -/S /Table ->> -endobj -2061 0 obj -<< -/K 1998 0 R -/P 2095 0 R -/S /TR ->> -endobj -2062 0 obj -<< -/K 1999 0 R -/P 2095 0 R -/S /TR ->> -endobj -2063 0 obj -<< -/K 2000 0 R -/P 2095 0 R -/S /TR ->> -endobj -2064 0 obj -<< -/K 2001 0 R -/P 2095 0 R -/S /TR ->> -endobj -2065 0 obj -<< -/K 2002 0 R -/P 2095 0 R -/S /TR ->> -endobj -2066 0 obj -<< -/K 2003 0 R -/P 2095 0 R -/S /TR ->> -endobj -2067 0 obj -<< -/K 2004 0 R -/P 2095 0 R -/S /TR ->> -endobj -2068 0 obj -<< -/K 2005 0 R -/P 2095 0 R -/S /TR ->> -endobj -2069 0 obj -<< -/K 2006 0 R -/P 2095 0 R -/S /TR ->> -endobj -2070 0 obj -<< -/K 2007 0 R -/P 2095 0 R -/S /TR ->> -endobj -2071 0 obj -<< -/K 2008 0 R -/P 2095 0 R -/S /TR ->> -endobj -2072 0 obj -<< -/K 2009 0 R -/P 2095 0 R -/S /TR ->> -endobj -2073 0 obj -<< -/K 2011 0 R -/P 2100 0 R -/S /TR ->> -endobj -2074 0 obj -<< -/K 2012 0 R -/P 2100 0 R -/S /TR ->> -endobj -2075 0 obj -<< -/K 2013 0 R -/P 2100 0 R -/S /TR ->> -endobj -2076 0 obj -<< -/K 2014 0 R -/P 2100 0 R -/S /TR ->> -endobj -2077 0 obj -<< -/K 2015 0 R -/P 2100 0 R -/S /TR ->> -endobj -2078 0 obj -<< -/K 2016 0 R -/P 2100 0 R -/S /TR ->> -endobj -2079 0 obj -<< -/K 2017 0 R -/P 2100 0 R -/S /TR ->> -endobj -2080 0 obj -<< -/K 2018 0 R -/P 2100 0 R -/S /TR ->> -endobj -2081 0 obj -<< -/K 2019 0 R -/P 2100 0 R -/S /TR ->> -endobj -2082 0 obj -<< -/K 2084 0 R -/P 2020 0 R -/S /Sect ->> -endobj -2083 0 obj -<< -/K 2020 0 R -/P 2100 0 R -/S /TR ->> -endobj -2084 0 obj -<< -/K 2021 0 R -/P 2082 0 R -/S /Table ->> -endobj -2085 0 obj -<< -/K 2022 0 R -/P 2100 0 R -/S /TR ->> -endobj -2086 0 obj -<< -/K 2023 0 R -/P 2100 0 R -/S /TR ->> -endobj -2087 0 obj -<< -/K 2024 0 R -/P 2100 0 R -/S /TR ->> -endobj -2088 0 obj -<< -/K 2089 0 R -/P 2025 0 R -/S /Sect ->> -endobj -2089 0 obj -<< -/K 2026 0 R -/P 2088 0 R -/S /Table ->> -endobj -2090 0 obj -<< -/K 2101 0 R -/P 2030 0 R -/S /TD ->> -endobj -2091 0 obj -<< -/K 2102 0 R -/P 2032 0 R -/S /TD ->> -endobj -2092 0 obj -<< -/K [2034 0 R 2035 0 R 2036 0 R 2037 0 R 2038 0 R 2040 0 R 2043 0 R 2045 0 R 2046 0 R] -/P 2033 0 R -/S /Table ->> -endobj -2093 0 obj -<< -/K 2041 0 R -/P 2039 0 R -/S /Sect ->> -endobj -2094 0 obj -<< -/K 2044 0 R -/P 2042 0 R -/S /Sect ->> -endobj -2095 0 obj -<< -/K [2047 0 R 2049 0 R 2051 0 R 2053 0 R 2056 0 R 2059 0 R 2061 0 R 2062 0 R 2063 0 R 2064 0 R -2065 0 R 2066 0 R 2067 0 R 2068 0 R 2069 0 R 2070 0 R 2071 0 R 2072 0 R] -/P 2101 0 R -/S /Table ->> -endobj -2096 0 obj -<< -/K 2050 0 R -/P 2048 0 R -/S /Sect ->> -endobj -2097 0 obj -<< -/K 2054 0 R -/P 2052 0 R -/S /Sect ->> -endobj -2098 0 obj -<< -/K 2057 0 R -/P 2055 0 R -/S /Sect ->> -endobj -2099 0 obj -<< -/K 2060 0 R -/P 2058 0 R -/S /Sect ->> -endobj -2100 0 obj -<< -/K [2073 0 R 2074 0 R 2075 0 R 2076 0 R 2077 0 R 2078 0 R 2079 0 R 2080 0 R 2081 0 R 2083 0 R -2085 0 R 2086 0 R 2087 0 R] -/P 2102 0 R -/S /Table ->> -endobj -2101 0 obj -<< -/K 2095 0 R -/P 2090 0 R -/S /Sect ->> -endobj -2102 0 obj -<< -/K 2100 0 R -/P 2091 0 R -/S /Sect ->> -endobj -xref -0 2103 -0000000000 65535 f -0000000015 00000 n -0000000351 00000 n -0000000430 00000 n -0000002928 00000 n -0000003000 00000 n -0000003124 00000 n -0000003252 00000 n -0000000172 00000 n -0000003295 00000 n -0000004488 00000 n -0000005678 00000 n -0000005699 00000 n -0000005979 00000 n -0000006214 00000 n -0000006449 00000 n -0000006594 00000 n -0000006678 00000 n -0000015162 00000 n -0000015234 00000 n -0000015268 00000 n -0000015327 00000 n -0000015575 00000 n -0000015818 00000 n -0000020023 00000 n -0000093842 00000 n -0000098769 00000 n -0000103434 00000 n -0000103596 00000 n -0000103708 00000 n -0000103802 00000 n -0000103896 00000 n -0000103973 00000 n -0000104029 00000 n -0000104105 00000 n -0000104183 00000 n -0000104239 00000 n -0000104314 00000 n -0000104370 00000 n -0000104426 00000 n -0000104505 00000 n -0000104561 00000 n -0000104637 00000 n -0000104694 00000 n -0000104768 00000 n -0000104825 00000 n -0000104882 00000 n -0000104973 00000 n -0000105030 00000 n -0000105087 00000 n -0000105144 00000 n -0000105199 00000 n -0000105256 00000 n -0000105313 00000 n -0000105370 00000 n -0000105427 00000 n -0000105484 00000 n -0000105541 00000 n -0000105598 00000 n -0000105655 00000 n -0000105712 00000 n -0000105782 00000 n -0000105839 00000 n -0000105896 00000 n -0000105966 00000 n -0000106023 00000 n -0000106080 00000 n -0000106137 00000 n -0000106194 00000 n -0000106264 00000 n -0000106321 00000 n -0000106400 00000 n -0000106457 00000 n -0000106514 00000 n -0000106588 00000 n -0000106645 00000 n -0000106715 00000 n -0000106772 00000 n -0000106848 00000 n -0000106905 00000 n -0000106962 00000 n -0000107019 00000 n -0000107095 00000 n -0000107152 00000 n -0000107209 00000 n -0000107266 00000 n -0000107323 00000 n -0000107380 00000 n -0000107437 00000 n -0000107494 00000 n -0000107551 00000 n -0000107625 00000 n -0000107682 00000 n -0000107750 00000 n -0000107807 00000 n -0000107874 00000 n -0000107931 00000 n -0000108004 00000 n -0000108061 00000 n -0000108118 00000 n -0000108187 00000 n -0000108245 00000 n -0000108325 00000 n -0000108383 00000 n -0000108441 00000 n -0000108515 00000 n -0000108573 00000 n -0000108644 00000 n -0000108702 00000 n -0000108777 00000 n -0000108835 00000 n -0000108909 00000 n -0000108967 00000 n -0000109038 00000 n -0000109096 00000 n -0000109167 00000 n -0000109225 00000 n -0000109296 00000 n -0000109354 00000 n -0000109425 00000 n -0000109483 00000 n -0000109557 00000 n -0000109615 00000 n -0000109689 00000 n -0000109747 00000 n -0000109824 00000 n -0000109882 00000 n -0000109940 00000 n -0000110014 00000 n -0000110072 00000 n -0000110143 00000 n -0000110201 00000 n -0000110277 00000 n -0000110336 00000 n -0000110411 00000 n -0000110470 00000 n -0000110542 00000 n -0000110601 00000 n -0000110673 00000 n -0000110732 00000 n -0000110804 00000 n -0000110863 00000 n -0000110935 00000 n -0000110994 00000 n -0000111069 00000 n -0000111128 00000 n -0000111203 00000 n -0000111262 00000 n -0000111340 00000 n -0000111399 00000 n -0000111458 00000 n -0000111533 00000 n -0000111592 00000 n -0000111664 00000 n -0000111723 00000 n -0000111799 00000 n -0000111858 00000 n -0000111933 00000 n -0000111992 00000 n -0000112064 00000 n -0000112123 00000 n -0000112195 00000 n -0000112254 00000 n -0000112326 00000 n -0000112385 00000 n -0000112457 00000 n -0000112516 00000 n -0000112591 00000 n -0000112650 00000 n -0000112725 00000 n -0000112784 00000 n -0000112862 00000 n -0000112921 00000 n -0000112980 00000 n -0000113055 00000 n -0000113114 00000 n -0000113186 00000 n -0000113245 00000 n -0000113321 00000 n -0000113380 00000 n -0000113455 00000 n -0000113514 00000 n -0000113586 00000 n -0000113645 00000 n -0000113717 00000 n -0000113776 00000 n -0000113848 00000 n -0000113907 00000 n -0000113979 00000 n -0000114038 00000 n -0000114113 00000 n -0000114172 00000 n -0000114247 00000 n -0000114306 00000 n -0000114384 00000 n -0000114443 00000 n -0000114502 00000 n -0000114577 00000 n -0000114636 00000 n -0000114708 00000 n -0000114767 00000 n -0000114843 00000 n -0000114902 00000 n -0000114977 00000 n -0000115036 00000 n -0000115108 00000 n -0000115167 00000 n -0000115239 00000 n -0000115298 00000 n -0000115370 00000 n -0000115429 00000 n -0000115501 00000 n -0000115560 00000 n -0000115635 00000 n -0000115694 00000 n -0000115769 00000 n -0000115828 00000 n -0000115906 00000 n -0000115965 00000 n -0000116024 00000 n -0000116099 00000 n -0000116158 00000 n -0000116230 00000 n -0000116289 00000 n -0000116365 00000 n -0000116424 00000 n -0000116499 00000 n -0000116571 00000 n -0000116630 00000 n -0000116702 00000 n -0000116761 00000 n -0000116833 00000 n -0000116892 00000 n -0000116964 00000 n -0000117023 00000 n -0000117098 00000 n -0000117157 00000 n -0000117232 00000 n -0000117291 00000 n -0000117369 00000 n -0000117428 00000 n -0000117487 00000 n -0000117546 00000 n -0000117626 00000 n -0000117685 00000 n -0000117760 00000 n -0000117819 00000 n -0000117891 00000 n -0000117950 00000 n -0000118026 00000 n -0000118085 00000 n -0000118160 00000 n -0000118219 00000 n -0000118291 00000 n -0000118350 00000 n -0000118422 00000 n -0000118481 00000 n -0000118553 00000 n -0000118612 00000 n -0000118684 00000 n -0000118743 00000 n -0000118818 00000 n -0000118877 00000 n -0000118952 00000 n -0000119011 00000 n -0000119089 00000 n -0000119148 00000 n -0000119207 00000 n -0000119266 00000 n -0000119346 00000 n -0000119405 00000 n -0000119480 00000 n -0000119539 00000 n -0000119611 00000 n -0000119670 00000 n -0000119746 00000 n -0000119805 00000 n -0000119880 00000 n -0000119939 00000 n -0000120011 00000 n -0000120070 00000 n -0000120142 00000 n -0000120201 00000 n -0000120273 00000 n -0000120332 00000 n -0000120404 00000 n -0000120463 00000 n -0000120538 00000 n -0000120597 00000 n -0000120672 00000 n -0000120731 00000 n -0000120809 00000 n -0000120868 00000 n -0000120927 00000 n -0000121002 00000 n -0000121061 00000 n -0000121133 00000 n -0000121192 00000 n -0000121268 00000 n -0000121327 00000 n -0000121402 00000 n -0000121461 00000 n -0000121533 00000 n -0000121592 00000 n -0000121664 00000 n -0000121723 00000 n -0000121795 00000 n -0000121854 00000 n -0000121926 00000 n -0000121985 00000 n -0000122060 00000 n -0000122119 00000 n -0000122194 00000 n -0000122253 00000 n -0000122331 00000 n -0000122390 00000 n -0000122447 00000 n -0000122524 00000 n -0000122603 00000 n -0000122660 00000 n -0000122717 00000 n -0000122774 00000 n -0000122831 00000 n -0000122907 00000 n -0000122964 00000 n -0000123044 00000 n -0000123102 00000 n -0000123179 00000 n -0000123237 00000 n -0000123295 00000 n -0000123353 00000 n -0000123430 00000 n -0000123488 00000 n -0000123546 00000 n -0000123604 00000 n -0000123662 00000 n -0000123720 00000 n -0000123778 00000 n -0000123836 00000 n -0000123894 00000 n -0000123968 00000 n -0000124026 00000 n -0000124097 00000 n -0000124155 00000 n -0000124230 00000 n -0000124288 00000 n -0000124362 00000 n -0000124420 00000 n -0000124491 00000 n -0000124549 00000 n -0000124620 00000 n -0000124678 00000 n -0000124749 00000 n -0000124807 00000 n -0000124878 00000 n -0000124936 00000 n -0000125010 00000 n -0000125068 00000 n -0000125142 00000 n -0000125200 00000 n -0000125277 00000 n -0000125335 00000 n -0000125393 00000 n -0000125467 00000 n -0000125525 00000 n -0000125596 00000 n -0000125654 00000 n -0000125729 00000 n -0000125787 00000 n -0000125861 00000 n -0000125919 00000 n -0000125990 00000 n -0000126048 00000 n -0000126119 00000 n -0000126177 00000 n -0000126248 00000 n -0000126306 00000 n -0000126377 00000 n -0000126435 00000 n -0000126509 00000 n -0000126567 00000 n -0000126641 00000 n -0000126699 00000 n -0000126776 00000 n -0000126834 00000 n -0000126892 00000 n -0000126950 00000 n -0000127029 00000 n -0000127087 00000 n -0000127161 00000 n -0000127219 00000 n -0000127290 00000 n -0000127348 00000 n -0000127423 00000 n -0000127481 00000 n -0000127555 00000 n -0000127613 00000 n -0000127684 00000 n -0000127742 00000 n -0000127813 00000 n -0000127871 00000 n -0000127942 00000 n -0000128000 00000 n -0000128071 00000 n -0000128129 00000 n -0000128203 00000 n -0000128261 00000 n -0000128335 00000 n -0000128393 00000 n -0000128470 00000 n -0000128528 00000 n -0000128586 00000 n -0000128660 00000 n -0000128718 00000 n -0000128789 00000 n -0000128847 00000 n -0000128923 00000 n -0000128982 00000 n -0000129057 00000 n -0000129129 00000 n -0000129188 00000 n -0000129260 00000 n -0000129319 00000 n -0000129391 00000 n -0000129450 00000 n -0000129522 00000 n -0000129581 00000 n -0000129656 00000 n -0000129715 00000 n -0000129790 00000 n -0000129849 00000 n -0000129927 00000 n -0000129986 00000 n -0000130045 00000 n -0000130104 00000 n -0000130184 00000 n -0000130243 00000 n -0000130318 00000 n -0000130377 00000 n -0000130449 00000 n -0000130508 00000 n -0000130584 00000 n -0000130643 00000 n -0000130718 00000 n -0000130790 00000 n -0000130849 00000 n -0000130921 00000 n -0000130980 00000 n -0000131052 00000 n -0000131111 00000 n -0000131183 00000 n -0000131242 00000 n -0000131317 00000 n -0000131376 00000 n -0000131451 00000 n -0000131510 00000 n -0000131588 00000 n -0000131647 00000 n -0000131706 00000 n -0000131765 00000 n -0000131845 00000 n -0000131904 00000 n -0000131979 00000 n -0000132038 00000 n -0000132110 00000 n -0000132169 00000 n -0000132245 00000 n -0000132304 00000 n -0000132379 00000 n -0000132451 00000 n -0000132510 00000 n -0000132582 00000 n -0000132641 00000 n -0000132713 00000 n -0000132772 00000 n -0000132844 00000 n -0000132903 00000 n -0000132978 00000 n -0000133037 00000 n -0000133112 00000 n -0000133171 00000 n -0000133249 00000 n -0000133308 00000 n -0000133367 00000 n -0000133426 00000 n -0000133506 00000 n -0000133565 00000 n -0000133640 00000 n -0000133699 00000 n -0000133771 00000 n -0000133830 00000 n -0000133906 00000 n -0000133965 00000 n -0000134040 00000 n -0000134099 00000 n -0000134171 00000 n -0000134230 00000 n -0000134302 00000 n -0000134361 00000 n -0000134433 00000 n -0000134492 00000 n -0000134564 00000 n -0000134623 00000 n -0000134698 00000 n -0000134757 00000 n -0000134832 00000 n -0000134891 00000 n -0000134969 00000 n -0000135028 00000 n -0000135087 00000 n -0000135162 00000 n -0000135221 00000 n -0000135293 00000 n -0000135352 00000 n -0000135428 00000 n -0000135487 00000 n -0000135562 00000 n -0000135621 00000 n -0000135693 00000 n -0000135752 00000 n -0000135824 00000 n -0000135883 00000 n -0000135955 00000 n -0000136014 00000 n -0000136086 00000 n -0000136145 00000 n -0000136220 00000 n -0000136279 00000 n -0000136354 00000 n -0000136413 00000 n -0000136491 00000 n -0000136550 00000 n -0000136609 00000 n -0000136684 00000 n -0000136743 00000 n -0000136815 00000 n -0000136874 00000 n -0000136950 00000 n -0000137009 00000 n -0000137084 00000 n -0000137143 00000 n -0000137215 00000 n -0000137274 00000 n -0000137346 00000 n -0000137405 00000 n -0000137477 00000 n -0000137536 00000 n -0000137608 00000 n -0000137667 00000 n -0000137742 00000 n -0000137801 00000 n -0000137876 00000 n -0000137935 00000 n -0000138013 00000 n -0000138072 00000 n -0000138131 00000 n -0000138206 00000 n -0000138265 00000 n -0000138337 00000 n -0000138396 00000 n -0000138472 00000 n -0000138531 00000 n -0000138606 00000 n -0000138665 00000 n -0000138737 00000 n -0000138796 00000 n -0000138868 00000 n -0000138927 00000 n -0000138999 00000 n -0000139058 00000 n -0000139130 00000 n -0000139189 00000 n -0000139264 00000 n -0000139323 00000 n -0000139398 00000 n -0000139457 00000 n -0000139535 00000 n -0000139594 00000 n -0000139653 00000 n -0000139728 00000 n -0000139787 00000 n -0000139859 00000 n -0000139918 00000 n -0000139994 00000 n -0000140053 00000 n -0000140128 00000 n -0000140187 00000 n -0000140259 00000 n -0000140318 00000 n -0000140390 00000 n -0000140449 00000 n -0000140521 00000 n -0000140580 00000 n -0000140652 00000 n -0000140711 00000 n -0000140786 00000 n -0000140845 00000 n -0000140920 00000 n -0000140979 00000 n -0000141057 00000 n -0000141116 00000 n -0000141175 00000 n -0000141250 00000 n -0000141309 00000 n -0000141381 00000 n -0000141440 00000 n -0000141516 00000 n -0000141575 00000 n -0000141650 00000 n -0000141709 00000 n -0000141781 00000 n -0000141840 00000 n -0000141912 00000 n -0000141971 00000 n -0000142043 00000 n -0000142102 00000 n -0000142174 00000 n -0000142233 00000 n -0000142308 00000 n -0000142367 00000 n -0000142442 00000 n -0000142501 00000 n -0000142579 00000 n -0000142638 00000 n -0000142697 00000 n -0000142772 00000 n -0000142831 00000 n -0000142903 00000 n -0000142962 00000 n -0000143038 00000 n -0000143097 00000 n -0000143172 00000 n -0000143231 00000 n -0000143303 00000 n -0000143362 00000 n -0000143434 00000 n -0000143493 00000 n -0000143565 00000 n -0000143624 00000 n -0000143696 00000 n -0000143755 00000 n -0000143830 00000 n -0000143889 00000 n -0000143964 00000 n -0000144023 00000 n -0000144101 00000 n -0000144160 00000 n -0000144219 00000 n -0000144294 00000 n -0000144353 00000 n -0000144425 00000 n -0000144484 00000 n -0000144560 00000 n -0000144619 00000 n -0000144694 00000 n -0000144753 00000 n -0000144825 00000 n -0000144884 00000 n -0000144956 00000 n -0000145015 00000 n -0000145087 00000 n -0000145146 00000 n -0000145218 00000 n -0000145277 00000 n -0000145352 00000 n -0000145411 00000 n -0000145486 00000 n -0000145545 00000 n -0000145623 00000 n -0000145682 00000 n -0000145741 00000 n -0000145816 00000 n -0000145875 00000 n -0000145947 00000 n -0000146006 00000 n -0000146082 00000 n -0000146141 00000 n -0000146216 00000 n -0000146275 00000 n -0000146347 00000 n -0000146406 00000 n -0000146478 00000 n -0000146537 00000 n -0000146609 00000 n -0000146668 00000 n -0000146740 00000 n -0000146799 00000 n -0000146874 00000 n -0000146933 00000 n -0000147008 00000 n -0000147067 00000 n -0000147145 00000 n -0000147204 00000 n -0000147263 00000 n -0000147338 00000 n -0000147397 00000 n -0000147469 00000 n -0000147528 00000 n -0000147604 00000 n -0000147663 00000 n -0000147738 00000 n -0000147797 00000 n -0000147869 00000 n -0000147928 00000 n -0000148000 00000 n -0000148059 00000 n -0000148131 00000 n -0000148190 00000 n -0000148262 00000 n -0000148321 00000 n -0000148396 00000 n -0000148455 00000 n -0000148530 00000 n -0000148589 00000 n -0000148667 00000 n -0000148726 00000 n -0000148785 00000 n -0000148860 00000 n -0000148919 00000 n -0000148991 00000 n -0000149050 00000 n -0000149126 00000 n -0000149185 00000 n -0000149260 00000 n -0000149319 00000 n -0000149391 00000 n -0000149450 00000 n -0000149522 00000 n -0000149581 00000 n -0000149653 00000 n -0000149712 00000 n -0000149784 00000 n -0000149843 00000 n -0000149918 00000 n -0000149977 00000 n -0000150052 00000 n -0000150111 00000 n -0000150189 00000 n -0000150248 00000 n -0000150307 00000 n -0000150382 00000 n -0000150441 00000 n -0000150513 00000 n -0000150572 00000 n -0000150648 00000 n -0000150705 00000 n -0000150782 00000 n -0000150861 00000 n -0000150918 00000 n -0000150975 00000 n -0000151032 00000 n -0000151089 00000 n -0000151165 00000 n -0000151222 00000 n -0000151302 00000 n -0000151360 00000 n -0000151437 00000 n -0000151495 00000 n -0000151553 00000 n -0000151611 00000 n -0000151688 00000 n -0000151746 00000 n -0000151804 00000 n -0000151862 00000 n -0000151920 00000 n -0000151978 00000 n -0000152036 00000 n -0000152094 00000 n -0000152152 00000 n -0000152226 00000 n -0000152284 00000 n -0000152355 00000 n -0000152413 00000 n -0000152484 00000 n -0000152542 00000 n -0000152613 00000 n -0000152671 00000 n -0000152742 00000 n -0000152800 00000 n -0000152874 00000 n -0000152932 00000 n -0000153006 00000 n -0000153064 00000 n -0000153141 00000 n -0000153199 00000 n -0000153257 00000 n -0000153331 00000 n -0000153389 00000 n -0000153460 00000 n -0000153518 00000 n -0000153593 00000 n -0000153651 00000 n -0000153725 00000 n -0000153783 00000 n -0000153854 00000 n -0000153912 00000 n -0000153983 00000 n -0000154041 00000 n -0000154112 00000 n -0000154170 00000 n -0000154241 00000 n -0000154299 00000 n -0000154373 00000 n -0000154431 00000 n -0000154505 00000 n -0000154563 00000 n -0000154640 00000 n -0000154698 00000 n -0000154756 00000 n -0000154830 00000 n -0000154888 00000 n -0000154959 00000 n -0000155017 00000 n -0000155092 00000 n -0000155150 00000 n -0000155224 00000 n -0000155282 00000 n -0000155353 00000 n -0000155411 00000 n -0000155482 00000 n -0000155540 00000 n -0000155611 00000 n -0000155669 00000 n -0000155740 00000 n -0000155798 00000 n -0000155872 00000 n -0000155930 00000 n -0000156004 00000 n -0000156062 00000 n -0000156139 00000 n -0000156197 00000 n -0000156255 00000 n -0000156329 00000 n -0000156387 00000 n -0000156458 00000 n -0000156516 00000 n -0000156591 00000 n -0000156649 00000 n -0000156723 00000 n -0000156781 00000 n -0000156852 00000 n -0000156910 00000 n -0000156981 00000 n -0000157039 00000 n -0000157110 00000 n -0000157169 00000 n -0000157241 00000 n -0000157300 00000 n -0000157375 00000 n -0000157434 00000 n -0000157509 00000 n -0000157568 00000 n -0000157646 00000 n -0000157705 00000 n -0000157764 00000 n -0000157839 00000 n -0000157898 00000 n -0000157970 00000 n -0000158029 00000 n -0000158105 00000 n -0000158164 00000 n -0000158239 00000 n -0000158298 00000 n -0000158370 00000 n -0000158429 00000 n -0000158501 00000 n -0000158560 00000 n -0000158632 00000 n -0000158691 00000 n -0000158763 00000 n -0000158822 00000 n -0000158897 00000 n -0000158956 00000 n -0000159031 00000 n -0000159090 00000 n -0000159168 00000 n -0000159227 00000 n -0000159286 00000 n -0000159361 00000 n -0000159420 00000 n -0000159492 00000 n -0000159551 00000 n -0000159627 00000 n -0000159686 00000 n -0000159761 00000 n -0000159820 00000 n -0000159892 00000 n -0000159951 00000 n -0000160023 00000 n -0000160082 00000 n -0000160154 00000 n -0000160213 00000 n -0000160285 00000 n -0000160344 00000 n -0000160419 00000 n -0000160478 00000 n -0000160553 00000 n -0000160612 00000 n -0000160690 00000 n -0000160749 00000 n -0000160808 00000 n -0000160883 00000 n -0000160942 00000 n -0000161014 00000 n -0000161073 00000 n -0000161149 00000 n -0000161208 00000 n -0000161283 00000 n -0000161342 00000 n -0000161414 00000 n -0000161473 00000 n -0000161545 00000 n -0000161604 00000 n -0000161676 00000 n -0000161735 00000 n -0000161807 00000 n -0000161866 00000 n -0000161941 00000 n -0000162000 00000 n -0000162075 00000 n -0000162134 00000 n -0000162212 00000 n -0000162271 00000 n -0000162330 00000 n -0000162405 00000 n -0000162464 00000 n -0000162536 00000 n -0000162595 00000 n -0000162671 00000 n -0000162730 00000 n -0000162805 00000 n -0000162864 00000 n -0000162936 00000 n -0000162995 00000 n -0000163067 00000 n -0000163126 00000 n -0000163198 00000 n -0000163257 00000 n -0000163329 00000 n -0000163388 00000 n -0000163463 00000 n -0000163522 00000 n -0000163597 00000 n -0000163656 00000 n -0000163734 00000 n -0000163793 00000 n -0000163852 00000 n -0000163927 00000 n -0000163986 00000 n -0000164058 00000 n -0000164117 00000 n -0000164193 00000 n -0000164252 00000 n -0000164327 00000 n -0000164386 00000 n -0000164458 00000 n -0000164517 00000 n -0000164589 00000 n -0000164648 00000 n -0000164720 00000 n -0000164779 00000 n -0000164851 00000 n -0000164910 00000 n -0000164985 00000 n -0000165044 00000 n -0000165119 00000 n -0000165178 00000 n -0000165256 00000 n -0000165315 00000 n -0000165374 00000 n -0000165449 00000 n -0000165508 00000 n -0000165580 00000 n -0000165639 00000 n -0000165715 00000 n -0000165774 00000 n -0000165849 00000 n -0000165908 00000 n -0000165980 00000 n -0000166039 00000 n -0000166111 00000 n -0000166170 00000 n -0000166242 00000 n -0000166301 00000 n -0000166373 00000 n -0000166432 00000 n -0000166507 00000 n -0000166566 00000 n -0000166641 00000 n -0000166700 00000 n -0000166778 00000 n -0000166837 00000 n -0000166896 00000 n -0000166968 00000 n -0000167040 00000 n -0000167112 00000 n -0000167184 00000 n -0000167243 00000 n -0000167318 00000 n -0000167377 00000 n -0000167449 00000 n -0000167509 00000 n -0000167586 00000 n -0000167646 00000 n -0000167722 00000 n -0000167782 00000 n -0000167855 00000 n -0000167915 00000 n -0000167988 00000 n -0000168048 00000 n -0000168121 00000 n -0000168181 00000 n -0000168254 00000 n -0000168314 00000 n -0000168390 00000 n -0000168450 00000 n -0000168526 00000 n -0000168586 00000 n -0000168665 00000 n -0000168725 00000 n -0000168785 00000 n -0000168861 00000 n -0000168921 00000 n -0000168994 00000 n -0000169054 00000 n -0000169131 00000 n -0000169191 00000 n -0000169267 00000 n -0000169327 00000 n -0000169400 00000 n -0000169460 00000 n -0000169533 00000 n -0000169593 00000 n -0000169666 00000 n -0000169726 00000 n -0000169799 00000 n -0000169859 00000 n -0000169935 00000 n -0000169995 00000 n -0000170071 00000 n -0000170131 00000 n -0000170210 00000 n -0000170270 00000 n -0000170330 00000 n -0000170406 00000 n -0000170466 00000 n -0000170539 00000 n -0000170599 00000 n -0000170676 00000 n -0000170736 00000 n -0000170812 00000 n -0000170872 00000 n -0000170945 00000 n -0000171005 00000 n -0000171078 00000 n -0000171138 00000 n -0000171211 00000 n -0000171271 00000 n -0000171344 00000 n -0000171404 00000 n -0000171480 00000 n -0000171540 00000 n -0000171616 00000 n -0000171676 00000 n -0000171755 00000 n -0000171815 00000 n -0000171875 00000 n -0000171950 00000 n -0000172010 00000 n -0000172070 00000 n -0000172149 00000 n -0000172209 00000 n -0000172282 00000 n -0000172342 00000 n -0000172415 00000 n -0000172475 00000 n -0000172548 00000 n -0000172608 00000 n -0000172681 00000 n -0000172741 00000 n -0000172801 00000 n -0000172880 00000 n -0000172940 00000 n -0000173024 00000 n -0000173084 00000 n -0000262857 00000 n -0000263487 00000 n -0000263540 00000 n -0000263606 00000 n -0000263658 00000 n -0000263713 00000 n -0000263768 00000 n -0000263823 00000 n -0000263889 00000 n -0000263964 00000 n -0000264019 00000 n -0000264074 00000 n -0000264140 00000 n -0000264215 00000 n -0000264270 00000 n -0000264336 00000 n -0000264402 00000 n -0000264465 00000 n -0000264519 00000 n -0000264582 00000 n -0000264636 00000 n -0000264699 00000 n -0000264762 00000 n -0000264825 00000 n -0000264879 00000 n -0000264942 00000 n -0000264996 00000 n -0000265050 00000 n -0000265104 00000 n -0000265157 00000 n -0000265211 00000 n -0000265265 00000 n -0000265319 00000 n -0000265373 00000 n -0000265427 00000 n -0000265481 00000 n -0000265535 00000 n -0000265598 00000 n -0000265652 00000 n -0000265715 00000 n -0000265769 00000 n -0000265823 00000 n -0000265877 00000 n -0000265940 00000 n -0000266003 00000 n -0000266057 00000 n -0000266120 00000 n -0000266183 00000 n -0000266246 00000 n -0000266300 00000 n -0000266354 00000 n -0000266417 00000 n -0000266471 00000 n -0000266525 00000 n -0000266579 00000 n -0000266633 00000 n -0000266687 00000 n -0000266741 00000 n -0000266795 00000 n -0000266858 00000 n -0000266921 00000 n -0000266984 00000 n -0000267047 00000 n -0000267101 00000 n -0000267164 00000 n -0000267229 00000 n -0000267284 00000 n -0000267349 00000 n -0000267414 00000 n -0000267479 00000 n -0000267544 00000 n -0000267609 00000 n -0000267674 00000 n -0000267739 00000 n -0000267804 00000 n -0000267869 00000 n -0000267934 00000 n -0000267999 00000 n -0000268054 00000 n -0000268119 00000 n -0000268184 00000 n -0000268249 00000 n -0000268314 00000 n -0000268379 00000 n -0000268444 00000 n -0000268509 00000 n -0000268574 00000 n -0000268639 00000 n -0000268704 00000 n -0000268769 00000 n -0000268824 00000 n -0000268889 00000 n -0000268954 00000 n -0000269019 00000 n -0000269084 00000 n -0000269149 00000 n -0000269214 00000 n -0000269279 00000 n -0000269344 00000 n -0000269409 00000 n -0000269474 00000 n -0000269539 00000 n -0000269594 00000 n -0000269659 00000 n -0000269724 00000 n -0000269789 00000 n -0000269854 00000 n -0000269919 00000 n -0000269984 00000 n -0000270049 00000 n -0000270114 00000 n -0000270179 00000 n -0000270244 00000 n -0000270309 00000 n -0000270364 00000 n -0000270429 00000 n -0000270494 00000 n -0000270559 00000 n -0000270624 00000 n -0000270689 00000 n -0000270754 00000 n -0000270819 00000 n -0000270884 00000 n -0000270949 00000 n -0000271014 00000 n -0000271079 00000 n -0000271134 00000 n -0000271199 00000 n -0000271264 00000 n -0000271329 00000 n -0000271394 00000 n -0000271449 00000 n -0000271514 00000 n -0000271579 00000 n -0000271644 00000 n -0000271709 00000 n -0000271774 00000 n -0000271839 00000 n -0000271894 00000 n -0000271949 00000 n -0000272014 00000 n -0000272079 00000 n -0000272144 00000 n -0000272209 00000 n -0000272274 00000 n -0000272339 00000 n -0000272404 00000 n -0000272469 00000 n -0000272534 00000 n -0000272599 00000 n -0000272664 00000 n -0000272729 00000 n -0000272784 00000 n -0000272839 00000 n -0000272904 00000 n -0000272969 00000 n -0000273034 00000 n -0000273099 00000 n -0000273164 00000 n -0000273229 00000 n -0000273294 00000 n -0000273359 00000 n -0000273424 00000 n -0000273489 00000 n -0000273554 00000 n -0000273619 00000 n -0000273674 00000 n -0000273739 00000 n -0000273804 00000 n -0000273869 00000 n -0000273934 00000 n -0000273999 00000 n -0000274064 00000 n -0000274129 00000 n -0000274194 00000 n -0000274259 00000 n -0000274324 00000 n -0000274389 00000 n -0000274444 00000 n -0000274509 00000 n -0000274564 00000 n -0000274619 00000 n -0000274674 00000 n -0000274729 00000 n -0000274794 00000 n -0000274859 00000 n -0000274924 00000 n -0000274979 00000 n -0000275034 00000 n -0000275099 00000 n -0000275154 00000 n -0000275209 00000 n -0000275264 00000 n -0000275319 00000 n -0000275374 00000 n -0000275429 00000 n -0000275484 00000 n -0000275549 00000 n -0000275614 00000 n -0000275679 00000 n -0000275744 00000 n -0000275809 00000 n -0000275874 00000 n -0000275939 00000 n -0000276004 00000 n -0000276069 00000 n -0000276134 00000 n -0000276199 00000 n -0000276254 00000 n -0000276319 00000 n -0000276384 00000 n -0000276449 00000 n -0000276514 00000 n -0000276579 00000 n -0000276644 00000 n -0000276709 00000 n -0000276774 00000 n -0000276839 00000 n -0000276904 00000 n -0000276969 00000 n -0000277024 00000 n -0000277079 00000 n -0000277144 00000 n -0000277209 00000 n -0000277274 00000 n -0000277339 00000 n -0000277404 00000 n -0000277469 00000 n -0000277534 00000 n -0000277599 00000 n -0000277664 00000 n -0000277729 00000 n -0000277794 00000 n -0000277859 00000 n -0000277914 00000 n -0000277979 00000 n -0000278044 00000 n -0000278109 00000 n -0000278174 00000 n -0000278229 00000 n -0000278294 00000 n -0000278359 00000 n -0000278424 00000 n -0000278489 00000 n -0000278554 00000 n -0000278619 00000 n -0000278674 00000 n -0000278729 00000 n -0000278794 00000 n -0000278859 00000 n -0000278924 00000 n -0000278989 00000 n -0000279054 00000 n -0000279109 00000 n -0000279174 00000 n -0000279239 00000 n -0000279304 00000 n -0000279369 00000 n -0000279434 00000 n -0000279499 00000 n -0000279554 00000 n -0000279609 00000 n -0000279674 00000 n -0000279739 00000 n -0000279804 00000 n -0000279869 00000 n -0000279934 00000 n -0000279989 00000 n -0000280054 00000 n -0000280119 00000 n -0000280184 00000 n -0000280249 00000 n -0000280314 00000 n -0000280379 00000 n -0000280434 00000 n -0000280489 00000 n -0000280554 00000 n -0000280619 00000 n -0000280684 00000 n -0000280749 00000 n -0000280814 00000 n -0000280879 00000 n -0000280944 00000 n -0000281009 00000 n -0000281074 00000 n -0000281139 00000 n -0000281204 00000 n -0000281269 00000 n -0000281324 00000 n -0000281389 00000 n -0000281454 00000 n -0000281519 00000 n -0000281584 00000 n -0000281649 00000 n -0000281714 00000 n -0000281779 00000 n -0000281844 00000 n -0000281909 00000 n -0000281974 00000 n -0000282039 00000 n -0000282094 00000 n -0000282159 00000 n -0000282224 00000 n -0000282289 00000 n -0000282354 00000 n -0000282419 00000 n -0000282484 00000 n -0000282549 00000 n -0000282614 00000 n -0000282679 00000 n -0000282744 00000 n -0000282809 00000 n -0000282864 00000 n -0000282929 00000 n -0000282994 00000 n -0000283059 00000 n -0000283124 00000 n -0000283189 00000 n -0000283254 00000 n -0000283319 00000 n -0000283384 00000 n -0000283449 00000 n -0000283514 00000 n -0000283579 00000 n -0000283634 00000 n -0000283699 00000 n -0000283764 00000 n -0000283829 00000 n -0000283894 00000 n -0000283959 00000 n -0000284024 00000 n -0000284089 00000 n -0000284154 00000 n -0000284219 00000 n -0000284284 00000 n -0000284349 00000 n -0000284404 00000 n -0000284469 00000 n -0000284534 00000 n -0000284599 00000 n -0000284664 00000 n -0000284729 00000 n -0000284794 00000 n -0000284859 00000 n -0000284924 00000 n -0000284989 00000 n -0000285054 00000 n -0000285119 00000 n -0000285174 00000 n -0000285239 00000 n -0000285304 00000 n -0000285369 00000 n -0000285434 00000 n -0000285499 00000 n -0000285564 00000 n -0000285629 00000 n -0000285694 00000 n -0000285759 00000 n -0000285824 00000 n -0000285889 00000 n -0000285944 00000 n -0000286009 00000 n -0000286074 00000 n -0000286139 00000 n -0000286204 00000 n -0000286269 00000 n -0000286334 00000 n -0000286399 00000 n -0000286464 00000 n -0000286529 00000 n -0000286594 00000 n -0000286659 00000 n -0000286714 00000 n -0000286779 00000 n -0000286844 00000 n -0000286909 00000 n -0000286974 00000 n -0000287039 00000 n -0000287104 00000 n -0000287169 00000 n -0000287234 00000 n -0000287299 00000 n -0000287364 00000 n -0000287429 00000 n -0000287484 00000 n -0000287549 00000 n -0000287614 00000 n -0000287679 00000 n -0000287744 00000 n -0000287809 00000 n -0000287874 00000 n -0000287939 00000 n -0000288004 00000 n -0000288069 00000 n -0000288134 00000 n -0000288199 00000 n -0000288254 00000 n -0000288319 00000 n -0000288384 00000 n -0000288449 00000 n -0000288514 00000 n -0000288579 00000 n -0000288644 00000 n -0000288709 00000 n -0000288774 00000 n -0000288839 00000 n -0000288904 00000 n -0000288969 00000 n -0000289024 00000 n -0000289089 00000 n -0000289154 00000 n -0000289219 00000 n -0000289284 00000 n -0000289339 00000 n -0000289394 00000 n -0000289449 00000 n -0000289504 00000 n -0000289569 00000 n -0000289634 00000 n -0000289699 00000 n -0000289754 00000 n -0000289809 00000 n -0000289874 00000 n -0000289929 00000 n -0000289984 00000 n -0000290039 00000 n -0000290094 00000 n -0000290149 00000 n -0000290204 00000 n -0000290259 00000 n -0000290324 00000 n -0000290389 00000 n -0000290454 00000 n -0000290519 00000 n -0000290584 00000 n -0000290649 00000 n -0000290714 00000 n -0000290779 00000 n -0000290834 00000 n -0000290899 00000 n -0000290964 00000 n -0000291029 00000 n -0000291094 00000 n -0000291159 00000 n -0000291224 00000 n -0000291289 00000 n -0000291354 00000 n -0000291419 00000 n -0000291484 00000 n -0000291549 00000 n -0000291604 00000 n -0000291669 00000 n -0000291734 00000 n -0000291799 00000 n -0000291864 00000 n -0000291929 00000 n -0000291994 00000 n -0000292059 00000 n -0000292124 00000 n -0000292189 00000 n -0000292254 00000 n -0000292319 00000 n -0000292374 00000 n -0000292439 00000 n -0000292504 00000 n -0000292569 00000 n -0000292634 00000 n -0000292699 00000 n -0000292764 00000 n -0000292829 00000 n -0000292894 00000 n -0000292959 00000 n -0000293024 00000 n -0000293089 00000 n -0000293144 00000 n -0000293209 00000 n -0000293274 00000 n -0000293339 00000 n -0000293404 00000 n -0000293469 00000 n -0000293534 00000 n -0000293599 00000 n -0000293664 00000 n -0000293729 00000 n -0000293794 00000 n -0000293859 00000 n -0000293914 00000 n -0000293979 00000 n -0000294044 00000 n -0000294109 00000 n -0000294174 00000 n -0000294239 00000 n -0000294304 00000 n -0000294369 00000 n -0000294434 00000 n -0000294499 00000 n -0000294564 00000 n -0000294629 00000 n -0000294684 00000 n -0000294749 00000 n -0000294814 00000 n -0000294879 00000 n -0000294944 00000 n -0000295009 00000 n -0000295074 00000 n -0000295139 00000 n -0000295204 00000 n -0000295269 00000 n -0000295334 00000 n -0000295399 00000 n -0000295454 00000 n -0000295519 00000 n -0000295584 00000 n -0000295649 00000 n -0000295714 00000 n -0000295779 00000 n -0000295844 00000 n -0000295909 00000 n -0000295974 00000 n -0000296039 00000 n -0000296104 00000 n -0000296169 00000 n -0000296224 00000 n -0000296289 00000 n -0000296354 00000 n -0000296419 00000 n -0000296484 00000 n -0000296549 00000 n -0000296614 00000 n -0000296679 00000 n -0000296744 00000 n -0000296809 00000 n -0000296874 00000 n -0000296939 00000 n -0000296994 00000 n -0000297059 00000 n -0000297124 00000 n -0000297189 00000 n -0000297254 00000 n -0000297319 00000 n -0000297384 00000 n -0000297449 00000 n -0000297514 00000 n -0000297579 00000 n -0000297644 00000 n -0000297709 00000 n -0000297764 00000 n -0000297829 00000 n -0000297884 00000 n -0000297939 00000 n -0000297994 00000 n -0000298059 00000 n -0000298124 00000 n -0000298191 00000 n -0000298258 00000 n -0000298325 00000 n -0000298392 00000 n -0000298459 00000 n -0000298526 00000 n -0000298593 00000 n -0000298660 00000 n -0000298727 00000 n -0000298783 00000 n -0000298850 00000 n -0000298917 00000 n -0000298984 00000 n -0000299051 00000 n -0000299118 00000 n -0000299185 00000 n -0000299252 00000 n -0000299319 00000 n -0000299386 00000 n -0000299453 00000 n -0000299520 00000 n -0000299576 00000 n -0000299643 00000 n -0000299710 00000 n -0000299777 00000 n -0000299844 00000 n -0000299911 00000 n -0000299978 00000 n -0000300045 00000 n -0000300112 00000 n -0000300179 00000 n -0000300246 00000 n -0000300313 00000 n -0000300369 00000 n -0000300436 00000 n -0000300492 00000 n -0000300559 00000 n -0000300626 00000 n -0000300693 00000 n -0000300760 00000 n -0000300827 00000 n -0000300883 00000 n -0000300950 00000 n -0000301017 00000 n -0000301073 00000 n -0000301184 00000 n -0000301208 00000 n -0000301277 00000 n -0000301345 00000 n -0000301402 00000 n -0000301459 00000 n -0000301527 00000 n -0000301584 00000 n -0000301641 00000 n -0000301709 00000 n -0000301777 00000 n -0000301845 00000 n -0000301902 00000 n -0000301959 00000 n -0000302027 00000 n -0000302113 00000 n -0000302181 00000 n -0000302238 00000 n -0000302293 00000 n -0000302361 00000 n -0000302447 00000 n -0000302504 00000 n -0000302581 00000 n -0000302638 00000 n -0000302706 00000 n -0000302763 00000 n -0000302820 00000 n -0000302897 00000 n -0000302974 00000 n -0000303096 00000 n -0000303173 00000 n -0000303230 00000 n -0000303325 00000 n -0000303382 00000 n -0000303459 00000 n -0000303516 00000 n -0000303638 00000 n -0000303695 00000 n -0000303752 00000 n -0000303809 00000 n -0000303886 00000 n -0000303943 00000 n -0000304065 00000 n -0000304122 00000 n -0000304179 00000 n -0000304236 00000 n -0000304313 00000 n -0000304370 00000 n -0000304492 00000 n -0000304549 00000 n -0000304606 00000 n -0000304663 00000 n -0000304740 00000 n -0000304797 00000 n -0000304919 00000 n -0000304976 00000 n -0000305033 00000 n -0000305090 00000 n -0000305167 00000 n -0000305224 00000 n -0000305346 00000 n -0000305403 00000 n -0000305460 00000 n -0000305517 00000 n -0000305594 00000 n -0000305651 00000 n -0000305773 00000 n -0000305830 00000 n -0000305887 00000 n -0000305944 00000 n -0000306010 00000 n -0000306087 00000 n -0000306144 00000 n -0000306266 00000 n -0000306323 00000 n -0000306380 00000 n -0000306437 00000 n -0000306503 00000 n -0000306580 00000 n -0000306637 00000 n -0000306759 00000 n -0000306816 00000 n -0000306873 00000 n -0000306930 00000 n -0000307007 00000 n -0000307064 00000 n -0000307186 00000 n -0000307243 00000 n -0000307300 00000 n -0000307357 00000 n -0000307434 00000 n -0000307556 00000 n -0000307633 00000 n -0000307690 00000 n -0000307812 00000 n -0000307869 00000 n -0000307926 00000 n -0000307983 00000 n -0000308060 00000 n -0000308117 00000 n -0000308239 00000 n -0000308296 00000 n -0000308353 00000 n -0000308410 00000 n -0000308476 00000 n -0000308553 00000 n -0000308610 00000 n -0000308732 00000 n -0000308789 00000 n -0000308846 00000 n -0000308903 00000 n -0000308980 00000 n -0000309037 00000 n -0000309159 00000 n -0000309216 00000 n -0000309273 00000 n -0000309330 00000 n -0000309396 00000 n -0000309473 00000 n -0000309530 00000 n -0000309652 00000 n -0000309709 00000 n -0000309766 00000 n -0000309823 00000 n -0000309889 00000 n -0000309966 00000 n -0000310023 00000 n -0000310145 00000 n -0000310202 00000 n -0000310259 00000 n -0000310316 00000 n -0000310382 00000 n -0000310459 00000 n -0000310516 00000 n -0000310638 00000 n -0000310695 00000 n -0000310752 00000 n -0000310809 00000 n -0000310886 00000 n -0000310943 00000 n -0000311065 00000 n -0000311122 00000 n -0000311179 00000 n -0000311236 00000 n -0000311313 00000 n -0000311370 00000 n -0000311492 00000 n -0000311549 00000 n -0000311606 00000 n -0000311663 00000 n -0000311740 00000 n -0000311797 00000 n -0000311919 00000 n -0000311976 00000 n -0000312033 00000 n -0000312090 00000 n -0000312167 00000 n -0000312224 00000 n -0000312346 00000 n -0000312403 00000 n -0000312460 00000 n -0000312517 00000 n -0000312594 00000 n -0000312651 00000 n -0000312773 00000 n -0000312830 00000 n -0000312887 00000 n -0000312944 00000 n -0000313021 00000 n -0000313078 00000 n -0000313200 00000 n -0000313257 00000 n -0000313314 00000 n -0000313371 00000 n -0000313448 00000 n -0000313505 00000 n -0000313627 00000 n -0000313684 00000 n -0000313741 00000 n -0000313798 00000 n -0000313875 00000 n -0000313932 00000 n -0000314054 00000 n -0000314111 00000 n -0000314168 00000 n -0000314225 00000 n -0000314302 00000 n -0000314359 00000 n -0000314481 00000 n -0000314538 00000 n -0000314595 00000 n -0000314652 00000 n -0000314729 00000 n -0000314786 00000 n -0000314908 00000 n -0000314965 00000 n -0000315022 00000 n -0000315079 00000 n -0000315156 00000 n -0000315213 00000 n -0000315290 00000 n -0000315412 00000 n -0000315534 00000 n -0000315591 00000 n -0000315648 00000 n -0000315705 00000 n -0000315782 00000 n -0000315839 00000 n -0000315961 00000 n -0000316018 00000 n -0000316075 00000 n -0000316132 00000 n -0000316209 00000 n -0000316266 00000 n -0000316388 00000 n -0000316445 00000 n -0000316502 00000 n -0000316559 00000 n -0000316636 00000 n -0000316693 00000 n -0000316815 00000 n -0000316872 00000 n -0000316929 00000 n -0000316986 00000 n -0000317063 00000 n -0000317120 00000 n -0000317242 00000 n -0000317299 00000 n -0000317356 00000 n -0000317413 00000 n -0000317490 00000 n -0000317547 00000 n -0000317669 00000 n -0000317726 00000 n -0000317783 00000 n -0000317840 00000 n -0000317917 00000 n -0000317974 00000 n -0000318096 00000 n -0000318153 00000 n -0000318210 00000 n -0000318267 00000 n -0000318344 00000 n -0000318401 00000 n -0000318523 00000 n -0000318580 00000 n -0000318637 00000 n -0000318694 00000 n -0000318771 00000 n -0000318828 00000 n -0000318950 00000 n -0000319007 00000 n -0000319064 00000 n -0000319121 00000 n -0000319198 00000 n -0000319255 00000 n -0000319377 00000 n -0000319434 00000 n -0000319491 00000 n -0000319548 00000 n -0000319632 00000 n -0000319709 00000 n -0000319766 00000 n -0000319888 00000 n -0000319945 00000 n -0000320002 00000 n -0000320059 00000 n -0000320136 00000 n -0000320193 00000 n -0000320315 00000 n -0000320372 00000 n -0000320429 00000 n -0000320486 00000 n -0000320563 00000 n -0000320620 00000 n -0000320742 00000 n -0000320799 00000 n -0000320856 00000 n -0000320913 00000 n -0000320970 00000 n -0000321038 00000 n -0000321122 00000 n -0000321190 00000 n -0000321267 00000 n -0000321362 00000 n -0000321431 00000 n -0000321500 00000 n -0000321569 00000 n -0000321637 00000 n -0000321723 00000 n -0000321791 00000 n -0000321857 00000 n -0000321925 00000 n -0000321991 00000 n -0000322066 00000 n -0000322141 00000 n -0000322216 00000 n -0000322291 00000 n -0000322366 00000 n -0000322450 00000 n -0000322505 00000 n -0000322589 00000 n -0000322644 00000 n -0000322719 00000 n -0000322794 00000 n -0000322860 00000 n -0000322935 00000 n -0000323019 00000 n -0000323074 00000 n -0000323149 00000 n -0000323233 00000 n -0000323288 00000 n -0000323372 00000 n -0000323427 00000 n -0000323511 00000 n -0000323566 00000 n -0000323641 00000 n -0000323716 00000 n -0000323791 00000 n -0000323866 00000 n -0000323941 00000 n -0000324016 00000 n -0000324091 00000 n -0000324166 00000 n -0000324241 00000 n -0000324316 00000 n -0000324391 00000 n -0000324446 00000 n -0000324512 00000 n -0000324578 00000 n -0000324653 00000 n -0000324728 00000 n -0000324803 00000 n -0000324878 00000 n -0000324953 00000 n -0000325028 00000 n -0000325103 00000 n -0000325178 00000 n -0000325262 00000 n -0000325317 00000 n -0000325392 00000 n -0000325467 00000 n -0000325542 00000 n -0000325619 00000 n -0000325674 00000 n -0000325729 00000 n -0000325784 00000 n -0000325839 00000 n -0000325894 00000 n -0000325949 00000 n -0000326004 00000 n -0000326061 00000 n -0000326116 00000 n -0000326171 00000 n -0000326226 00000 n -0000326281 00000 n -0000326336 00000 n -0000326393 00000 n -0000326448 00000 n -0000326506 00000 n -0000326563 00000 n -0000326618 00000 n -0000326676 00000 n -0000326731 00000 n -0000326786 00000 n -0000326841 00000 n -0000326898 00000 n -0000326953 00000 n -0000327011 00000 n -0000327066 00000 n -0000327123 00000 n -0000327178 00000 n -0000327236 00000 n -0000327293 00000 n -0000327348 00000 n -0000327406 00000 n -0000327463 00000 n -0000327518 00000 n -0000327576 00000 n -0000327631 00000 n -0000327686 00000 n -0000327741 00000 n -0000327796 00000 n -0000327851 00000 n -0000327906 00000 n -0000327961 00000 n -0000328016 00000 n -0000328071 00000 n -0000328126 00000 n -0000328181 00000 n -0000328236 00000 n -0000328291 00000 n -0000328346 00000 n -0000328401 00000 n -0000328456 00000 n -0000328511 00000 n -0000328566 00000 n -0000328621 00000 n -0000328676 00000 n -0000328731 00000 n -0000328788 00000 n -0000328843 00000 n -0000328901 00000 n -0000328956 00000 n -0000329011 00000 n -0000329066 00000 n -0000329123 00000 n -0000329181 00000 n -0000329236 00000 n -0000329291 00000 n -0000329423 00000 n -0000329480 00000 n -0000329537 00000 n -0000329750 00000 n -0000329807 00000 n -0000329864 00000 n -0000329921 00000 n -0000329978 00000 n -0000330146 00000 n -0000330203 00000 n -trailer -<< -/DecodeParms << -/Columns 5 -/Predictor 12 ->> -/Filter /FlateDecode -/ID [ <2C104C92D21DB2110A0046F6A47795FF>] -/Info 8 0 R -/Length 279 -/Root 1 0 R -/Size 2103 -/Type /XRef -/W [1 3 1] ->> -startxref -330260 -%%EOF diff --git a/admin/setup.php b/admin/setup.php index 83f56d8..9e77e77 100755 --- a/admin/setup.php +++ b/admin/setup.php @@ -100,6 +100,40 @@ $formSetup->newItem('ImportSettings')->setAsTitle(); $formSetup->newItem('IMPORTZUGFERD_AUTO_CREATE_INVOICE')->setAsYesNo(); +// Email Notification Settings Section +$formSetup->newItem('NotificationSettings')->setAsTitle(); + +$formSetup->newItem('IMPORTZUGFERD_NOTIFY_ENABLED')->setAsYesNo(); + +$item = $formSetup->newItem('IMPORTZUGFERD_NOTIFY_EMAIL'); +$item->defaultFieldValue = ''; +$item->cssClass = 'minwidth300'; +$item->fieldAttr['placeholder'] = 'admin@example.com'; + +$formSetup->newItem('IMPORTZUGFERD_NOTIFY_MANUAL')->setAsYesNo(); +$formSetup->newItem('IMPORTZUGFERD_NOTIFY_ERROR')->setAsYesNo(); +$formSetup->newItem('IMPORTZUGFERD_NOTIFY_PRICE_DIFF')->setAsYesNo(); + +$item = $formSetup->newItem('IMPORTZUGFERD_PRICE_DIFF_THRESHOLD'); +$item->defaultFieldValue = '10'; +$item->cssClass = 'width75'; +$item->fieldAttr['type'] = 'number'; +$item->fieldAttr['min'] = '0'; +$item->fieldAttr['max'] = '100'; +$item->fieldAttr['step'] = '1'; + +// Scheduling Settings Section +$formSetup->newItem('SchedulingSettings')->setAsTitle(); + +$item = $formSetup->newItem('IMPORTZUGFERD_IMPORT_FREQUENCY'); +$item->setAsSelect(array( + 'manual' => $langs->trans('FrequencyManual'), + 'hourly' => $langs->trans('FrequencyHourly'), + 'daily' => $langs->trans('FrequencyDaily'), + 'weekly' => $langs->trans('FrequencyWeekly') +)); +$item->defaultFieldValue = 'manual'; + // Folder Import Settings Section $formSetup->newItem('FolderImportSettings')->setAsTitle(); @@ -113,10 +147,25 @@ $item->defaultFieldValue = ''; $item->cssClass = 'minwidth400'; $item->fieldAttr['placeholder'] = '/path/to/archive'; +$item = $formSetup->newItem('IMPORTZUGFERD_ERROR_FOLDER'); +$item->defaultFieldValue = ''; +$item->cssClass = 'minwidth400'; +$item->fieldAttr['placeholder'] = '/path/to/errors'; + $item = $formSetup->newItem('IMPORTZUGFERD_IMAP_ARCHIVE_FOLDER'); $item->defaultFieldValue = 'Archive'; $item->cssClass = 'minwidth200'; +// Datanorm Settings Section +$formSetup->newItem('DatanormSettings')->setAsTitle(); + +$item = $formSetup->newItem('IMPORTZUGFERD_DATANORM_MARKUP'); +$item->defaultFieldValue = '30'; +$item->cssClass = 'width100'; +$item->fieldAttr['placeholder'] = '30'; + +$formSetup->newItem('IMPORTZUGFERD_DATANORM_SEARCH_ALL')->setAsYesNo(); + /* * Actions */ @@ -127,6 +176,69 @@ if (versioncompare(explode('.', DOL_VERSION), array(15)) < 0 && $action == 'upda include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php'; +// AJAX action for folder browsing +if ($action == 'browse_folders') { + $path = GETPOST('path', 'alpha'); + $target = GETPOST('target', 'alpha'); + + // Sanitize path - default to /home for easier navigation + if (empty($path)) { + $path = '/home'; + } + $path = realpath($path); + if ($path === false) { + $path = '/home'; + if (!is_dir($path)) { + $path = '/'; + } + } + + // Get directories + $dirs = array(); + if (is_dir($path) && is_readable($path)) { + $entries = @scandir($path); + if ($entries) { + foreach ($entries as $entry) { + if ($entry == '.') continue; + $fullPath = $path . '/' . $entry; + if (is_dir($fullPath) && is_readable($fullPath)) { + $dirs[] = array( + 'name' => $entry, + 'path' => $fullPath + ); + } + } + } + } + + // Return JSON + header('Content-Type: application/json'); + echo json_encode(array( + 'current' => $path, + 'parent' => dirname($path), + 'dirs' => $dirs, + 'target' => $target + )); + exit; +} + +// Save folder from browser +if ($action == 'set_folder') { + $target = GETPOST('target', 'alpha'); + $folder_path = GETPOST('folder_path', 'alpha'); + + if (in_array($target, array('IMPORTZUGFERD_WATCH_FOLDER', 'IMPORTZUGFERD_ARCHIVE_FOLDER'))) { + if (is_dir($folder_path)) { + dolibarr_set_const($db, $target, $folder_path, 'chaine', 0, '', $conf->entity); + setEventMessages($langs->trans('FolderSelected').': '.$folder_path, null, 'mesgs'); + } else { + setEventMessages($langs->trans('ErrorFolderNotFound'), null, 'errors'); + } + } + header('Location: '.$_SERVER['PHP_SELF']); + exit; +} + /* * View */ @@ -151,6 +263,229 @@ print ''.$langs->trans("ImportZugferdSetupPage").'generateOutput(true); +// Build folder validation data for JavaScript +$folderValidation = array(); + +// Watch folder - only needs to be readable +$watchFolder = getDolGlobalString('IMPORTZUGFERD_WATCH_FOLDER'); +if (!empty($watchFolder)) { + $watchExists = is_dir($watchFolder); + $watchReadable = $watchExists && is_readable($watchFolder); + if (!$watchExists) { + $folderValidation['IMPORTZUGFERD_WATCH_FOLDER'] = array('ok' => false, 'msg' => $langs->trans('FolderNotFound')); + } elseif (!$watchReadable) { + $folderValidation['IMPORTZUGFERD_WATCH_FOLDER'] = array('ok' => false, 'msg' => $langs->trans('FolderNotReadable')); + } else { + $files = glob($watchFolder.'/*.pdf'); + $files = array_merge($files ?: [], glob($watchFolder.'/*.PDF') ?: []); + $folderValidation['IMPORTZUGFERD_WATCH_FOLDER'] = array('ok' => true, 'msg' => $langs->trans('FolderOK').' ('.count($files).' PDF)'); + } +} + +// Archive folder - needs to be writable +$archiveFolder = getDolGlobalString('IMPORTZUGFERD_ARCHIVE_FOLDER'); +if (!empty($archiveFolder)) { + $archiveExists = is_dir($archiveFolder); + $archiveWritable = $archiveExists && is_writable($archiveFolder); + if (!$archiveExists) { + $folderValidation['IMPORTZUGFERD_ARCHIVE_FOLDER'] = array('ok' => false, 'msg' => $langs->trans('FolderNotFound')); + } elseif (!$archiveWritable) { + $folderValidation['IMPORTZUGFERD_ARCHIVE_FOLDER'] = array('ok' => false, 'msg' => $langs->trans('FolderNotWritable')); + } else { + $folderValidation['IMPORTZUGFERD_ARCHIVE_FOLDER'] = array('ok' => true, 'msg' => $langs->trans('FolderOK')); + } +} + +// Error folder - needs to be writable +$errorFolder = getDolGlobalString('IMPORTZUGFERD_ERROR_FOLDER'); +if (!empty($errorFolder)) { + $errorExists = is_dir($errorFolder); + $errorWritable = $errorExists && is_writable($errorFolder); + if (!$errorExists) { + $folderValidation['IMPORTZUGFERD_ERROR_FOLDER'] = array('ok' => false, 'msg' => $langs->trans('FolderNotFound')); + } elseif (!$errorWritable) { + $folderValidation['IMPORTZUGFERD_ERROR_FOLDER'] = array('ok' => false, 'msg' => $langs->trans('FolderNotWritable')); + } else { + $folderValidation['IMPORTZUGFERD_ERROR_FOLDER'] = array('ok' => true, 'msg' => $langs->trans('FolderOK')); + } +} + +// Folder Browser Modal +print ' + + + +'; + +// Email Notification Test Section +if (getDolGlobalString('IMPORTZUGFERD_NOTIFY_ENABLED') && getDolGlobalString('IMPORTZUGFERD_NOTIFY_EMAIL')) { + print '
'; + print '
'; + print ''; + print ''; + print ''; + print ''; + + // Handle test email action + if ($action == 'test_email') { + dol_include_once('/importzugferd/class/importnotification.class.php'); + $notification = new ImportNotification($db); + $result = $notification->sendTestNotification(); + + if ($result > 0) { + setEventMessages($langs->trans('TestEmailSent', getDolGlobalString('IMPORTZUGFERD_NOTIFY_EMAIL')), null, 'mesgs'); + } else { + setEventMessages($langs->trans('TestEmailFailed').': '.$notification->error, null, 'errors'); + } + } + + print ''; + print ''; + print ''; + print ''; + + print '
'.$langs->trans('TestEmailNotification').'
'.$langs->trans('SendTestEmail').''; + print ''; + print ''.$langs->trans('SendTestEmail'); + print ''; + print ' '.$langs->trans('SendTo').': '.getDolGlobalString('IMPORTZUGFERD_NOTIFY_EMAIL').''; + print '
'; + print '
'; +} + // Test IMAP connection button and folder selection if (getDolGlobalString('IMPORTZUGFERD_IMAP_HOST')) { print '
'; @@ -277,6 +612,222 @@ if (getDolGlobalString('IMPORTZUGFERD_IMAP_HOST')) { print ''; } +// Manual Import Trigger Section +$hasFolder = getDolGlobalString('IMPORTZUGFERD_WATCH_FOLDER') && is_dir(getDolGlobalString('IMPORTZUGFERD_WATCH_FOLDER')); +$hasImap = getDolGlobalString('IMPORTZUGFERD_IMAP_HOST') && getDolGlobalString('IMPORTZUGFERD_IMAP_USER'); + +if ($hasFolder || $hasImap) { + print '
'; + print '
'; + print ''; + print ''; + print ''; + print ''; + + // Handle manual import action + if ($action == 'run_import') { + $source = GETPOST('import_source', 'alpha'); + dol_include_once('/importzugferd/class/zugferdimport.class.php'); + dol_include_once('/importzugferd/class/zugferdparser.class.php'); + + $successCount = 0; + $errorCount = 0; + $skippedCount = 0; + + if ($source == 'folder' && $hasFolder) { + $watchFolder = getDolGlobalString('IMPORTZUGFERD_WATCH_FOLDER'); + $archiveFolder = getDolGlobalString('IMPORTZUGFERD_ARCHIVE_FOLDER'); + $errorFolder = getDolGlobalString('IMPORTZUGFERD_ERROR_FOLDER'); + $autoCreate = getDolGlobalInt('IMPORTZUGFERD_AUTO_CREATE_INVOICE'); + + $files = glob($watchFolder.'/*.pdf'); + $files = array_merge($files, glob($watchFolder.'/*.PDF')); + + // Create archive folder if configured but doesn't exist + if (!empty($archiveFolder) && !is_dir($archiveFolder)) { + dol_mkdir($archiveFolder); + } + // Create error folder if configured but doesn't exist + if (!empty($errorFolder) && !is_dir($errorFolder)) { + dol_mkdir($errorFolder); + } + + // Helper function for moving files with fallback + $moveFile = function($file, $targetFolder, $prefix) { + if (empty($targetFolder)) { + return false; + } + if (!is_dir($targetFolder)) { + dol_mkdir($targetFolder); + } + if (!is_dir($targetFolder) || !is_writable($targetFolder)) { + dol_syslog("ImportZugferd: Target folder not accessible: ".$targetFolder, LOG_WARNING); + return false; + } + $destFile = $targetFolder.'/'.$prefix.date('Y-m-d_His').'_'.basename($file); + if (@rename($file, $destFile)) { + dol_syslog("ImportZugferd: Moved file to: ".$destFile, LOG_INFO); + return true; + } + // Fallback: copy + delete (for cross-filesystem moves) + if (@copy($file, $destFile)) { + @unlink($file); + dol_syslog("ImportZugferd: Copied file to: ".$destFile, LOG_INFO); + return true; + } + dol_syslog("ImportZugferd: Failed to move file: ".$file." to ".$destFile, LOG_ERR); + return false; + }; + + foreach ($files as $file) { + $import = new ZugferdImport($db); + $result = $import->importFromFile($user, $file, $autoCreate); + + if ($result > 0) { + $successCount++; + $moveFile($file, $archiveFolder, 'imported_'); + } elseif ($result == -2) { + // Duplicate - move to archive + $skippedCount++; + if (!$moveFile($file, $archiveFolder, 'duplicate_')) { + @unlink($file); + } + } else { + // Error - move to error folder, fallback to archive + $errorCount++; + if (!$moveFile($file, $errorFolder, 'error_')) { + if (!$moveFile($file, $archiveFolder, 'error_')) { + dol_syslog("ImportZugferd: File stays in watch folder: ".$file, LOG_WARNING); + } + } + } + } + } elseif ($source == 'imap' && $hasImap && function_exists('imap_open')) { + $host = getDolGlobalString('IMPORTZUGFERD_IMAP_HOST'); + $port = getDolGlobalString('IMPORTZUGFERD_IMAP_PORT', '993'); + $imap_user = getDolGlobalString('IMPORTZUGFERD_IMAP_USER'); + $password = getDolGlobalString('IMPORTZUGFERD_IMAP_PASSWORD'); + $ssl = getDolGlobalString('IMPORTZUGFERD_IMAP_SSL'); + $folder = getDolGlobalString('IMPORTZUGFERD_IMAP_FOLDER', 'INBOX'); + $archiveFolder = getDolGlobalString('IMPORTZUGFERD_IMAP_ARCHIVE_FOLDER'); + $autoCreate = getDolGlobalInt('IMPORTZUGFERD_AUTO_CREATE_INVOICE'); + + $mailbox = '{' . $host . ':' . $port . '/imap' . ($ssl ? '/ssl' : '') . '/novalidate-cert}' . $folder; + $connection = @imap_open($mailbox, $imap_user, $password); + + if ($connection) { + $emails = imap_search($connection, 'UNSEEN'); + if ($emails) { + foreach ($emails as $email_number) { + $structure = imap_fetchstructure($connection, $email_number); + + // Find PDF attachments + if (isset($structure->parts)) { + foreach ($structure->parts as $partIndex => $part) { + $filename = ''; + if ($part->ifdparameters) { + foreach ($part->dparameters as $param) { + if (strtolower($param->attribute) == 'filename') { + $filename = $param->value; + } + } + } + if (empty($filename) && $part->ifparameters) { + foreach ($part->parameters as $param) { + if (strtolower($param->attribute) == 'name') { + $filename = $param->value; + } + } + } + + if (!empty($filename) && preg_match('/\.pdf$/i', $filename)) { + $attachment = imap_fetchbody($connection, $email_number, $partIndex + 1); + if ($part->encoding == 3) { // BASE64 + $attachment = base64_decode($attachment); + } elseif ($part->encoding == 4) { // QUOTED-PRINTABLE + $attachment = quoted_printable_decode($attachment); + } + + // Save to temp file + $tempFile = $conf->importzugferd->dir_temp.'/'.uniqid().'_'.$filename; + if (!is_dir($conf->importzugferd->dir_temp)) { + dol_mkdir($conf->importzugferd->dir_temp); + } + file_put_contents($tempFile, $attachment); + + // Import + $import = new ZugferdImport($db); + $result = $import->importFromFile($user, $tempFile, $autoCreate); + + if ($result > 0) { + $successCount++; + } elseif ($result == -2) { + $skippedCount++; + } else { + $errorCount++; + } + + unlink($tempFile); + } + } + } + } + + // Archive processed emails + if (!empty($archiveFolder) && $successCount > 0) { + foreach ($emails as $email_number) { + imap_mail_move($connection, $email_number, $archiveFolder); + } + imap_expunge($connection); + } + } + imap_close($connection); + } else { + setEventMessages($langs->trans('ConnectionFailed').': '.imap_last_error(), null, 'errors'); + } + } + + if ($successCount > 0 || $errorCount > 0 || $skippedCount > 0) { + setEventMessages($langs->trans('BatchImportComplete', $successCount, $errorCount, $skippedCount), null, 'mesgs'); + } else { + setEventMessages($langs->trans('NoFilesFound'), null, 'warnings'); + } + } + + print ''; + print ''; + print ''; + print ''; + + print ''; + print ''; + print ''; + print ''; + + print '
'.$langs->trans('ManualImportTrigger').'
'.$langs->trans('ImportFromFolder').''; + if ($hasFolder) { + print ''; + print ''.$langs->trans('StartImport'); + print ''; + print ' '.getDolGlobalString('IMPORTZUGFERD_WATCH_FOLDER').''; + } else { + print ''.$langs->trans('ErrorWatchFolderNotConfigured').''; + } + print '
'.$langs->trans('ImportFromIMAP').''; + if ($hasImap && function_exists('imap_open')) { + print ''; + print ''.$langs->trans('StartImport'); + print ''; + print ' '.getDolGlobalString('IMPORTZUGFERD_IMAP_USER').''; + } elseif (!function_exists('imap_open')) { + print ''.$langs->trans('IMAPExtensionNotInstalled').''; + } else { + print ''.$langs->trans('ErrorIMAPNotConfigured').''; + } + print '
'; + print '
'; +} + print '
'; // Page end diff --git a/batch.php b/batch.php index c6bb880..52cb220 100644 --- a/batch.php +++ b/batch.php @@ -80,6 +80,7 @@ if ($action == 'process') { // Import from local folder $watch_folder = getDolGlobalString('IMPORTZUGFERD_WATCH_FOLDER'); $archive_folder = getDolGlobalString('IMPORTZUGFERD_ARCHIVE_FOLDER'); + $error_folder = getDolGlobalString('IMPORTZUGFERD_ERROR_FOLDER'); if (empty($watch_folder) || !is_dir($watch_folder)) { setEventMessages($langs->trans('ErrorWatchFolderNotConfigured'), null, 'errors'); @@ -89,6 +90,10 @@ if ($action == 'process') { if (!empty($archive_folder) && !is_dir($archive_folder)) { dol_mkdir($archive_folder); } + // Create error folder if needed + if (!empty($error_folder) && !is_dir($error_folder)) { + dol_mkdir($error_folder); + } // Get PDF files from watch folder $files = glob($watch_folder . '/*.pdf'); @@ -115,17 +120,32 @@ if ($action == 'process') { // Move to archive if (!empty($archive_folder) && is_dir($archive_folder)) { - $archive_path = $archive_folder . '/' . basename($pdf_path); - if (rename($pdf_path, $archive_path)) { + $archive_path = $archive_folder . '/success_' . date('Y-m-d_His') . '_' . basename($pdf_path); + if (@rename($pdf_path, $archive_path) || (@copy($pdf_path, $archive_path) && @unlink($pdf_path))) { $result['archived'] = true; } } } elseif ($res == -3) { - // Duplicate + // Duplicate - move to archive (already imported) $result['status'] = 'skipped'; $result['message'] = $langs->trans('ErrorDuplicateInvoice'); + + if (!empty($archive_folder) && is_dir($archive_folder)) { + $archive_path = $archive_folder . '/duplicate_' . date('Y-m-d_His') . '_' . basename($pdf_path); + if (@rename($pdf_path, $archive_path) || (@copy($pdf_path, $archive_path) && @unlink($pdf_path))) { + $result['archived'] = true; + } + } } else { + // Error - move to error folder $result['message'] = $actions->error; + + if (!empty($error_folder) && is_dir($error_folder)) { + $error_path = $error_folder . '/error_' . date('Y-m-d_His') . '_' . basename($pdf_path); + if (@rename($pdf_path, $error_path) || (@copy($pdf_path, $error_path) && @unlink($pdf_path))) { + $result['moved_to_error'] = true; + } + } } $import_results[] = $result; diff --git a/class/cron_importzugferd.class.php b/class/cron_importzugferd.class.php index 5e3ae72..042be8d 100644 --- a/class/cron_importzugferd.class.php +++ b/class/cron_importzugferd.class.php @@ -21,7 +21,7 @@ dol_include_once('/importzugferd/class/actions_importzugferd.class.php'); /** * Class CronImportZugferd - * Cronjob handler for fetching ZUGFeRD invoices from IMAP mailbox + * Cronjob handler for fetching ZUGFeRD invoices from IMAP mailbox and folder */ class CronImportZugferd { @@ -70,6 +70,180 @@ class CronImportZugferd $this->db = $db; } + /** + * Check if import should run based on configured frequency + * + * @return bool True if import should run + */ + protected function shouldRunImport() + { + global $conf; + + $frequency = getDolGlobalString('IMPORTZUGFERD_IMPORT_FREQUENCY', 'manual'); + + if ($frequency === 'manual') { + return false; + } + + // Get last run timestamp + $lastRun = getDolGlobalInt('IMPORTZUGFERD_LAST_IMPORT_RUN', 0); + $now = dol_now(); + + // Calculate minimum interval based on frequency + $interval = 0; + switch ($frequency) { + case 'hourly': + $interval = 3600; // 1 hour + break; + case 'daily': + $interval = 86400; // 24 hours + break; + case 'weekly': + $interval = 604800; // 7 days + break; + } + + // Check if enough time has passed + if ($now - $lastRun < $interval) { + return false; + } + + return true; + } + + /** + * Update last run timestamp + */ + protected function updateLastRunTime() + { + global $conf; + dolibarr_set_const($this->db, 'IMPORTZUGFERD_LAST_IMPORT_RUN', dol_now(), 'chaine', 0, '', $conf->entity); + } + + /** + * Main import method - imports from both folder and mailbox + * + * @return int 0 if OK, <0 if error + */ + public function runScheduledImport() + { + global $conf, $user, $langs; + + $langs->load('importzugferd@importzugferd'); + + // Check if we should run based on frequency + if (!$this->shouldRunImport()) { + $this->output = 'Skipped - not scheduled to run (frequency: '.getDolGlobalString('IMPORTZUGFERD_IMPORT_FREQUENCY', 'manual').')'; + return 0; + } + + // Reset counters + $this->imported_count = 0; + $this->skipped_count = 0; + $this->error_count = 0; + $this->errors = array(); + + $folderResult = $this->importFromFolder(); + $mailboxResult = $this->fetchFromMailbox(); + + // Update last run time + $this->updateLastRunTime(); + + // Build combined output + $this->output = sprintf( + "Scheduled import complete. Imported: %d, Skipped: %d, Errors: %d", + $this->imported_count, + $this->skipped_count, + $this->error_count + ); + + if ($this->error_count > 0 && !empty($this->errors)) { + $this->output .= "\nErrors: " . implode(", ", array_slice($this->errors, 0, 5)); + } + + return ($this->error_count > 0) ? -1 : 0; + } + + /** + * Import ZUGFeRD invoices from watch folder + * + * @return int 0 if OK, <0 if error + */ + public function importFromFolder() + { + global $conf, $user, $langs; + + $langs->load('importzugferd@importzugferd'); + + $watchFolder = getDolGlobalString('IMPORTZUGFERD_WATCH_FOLDER'); + $archiveFolder = getDolGlobalString('IMPORTZUGFERD_ARCHIVE_FOLDER'); + $errorFolder = getDolGlobalString('IMPORTZUGFERD_ERROR_FOLDER'); + $autoCreate = getDolGlobalString('IMPORTZUGFERD_AUTO_CREATE_INVOICE'); + + // Validate settings + if (empty($watchFolder) || !is_dir($watchFolder)) { + $this->output = 'Watch folder not configured or not accessible'; + return 0; // Not an error, just not configured + } + + // Load admin user for import actions + $admin_user = new User($this->db); + $admin_user->fetch(1); + + // Find PDF files + $files = glob($watchFolder . '/*.pdf'); + $files = array_merge($files, glob($watchFolder . '/*.PDF')); + + if (empty($files)) { + return 0; + } + + // Ensure archive folder exists if configured + if (!empty($archiveFolder) && !is_dir($archiveFolder)) { + dol_mkdir($archiveFolder); + } + + // Ensure error folder exists if configured + if (!empty($errorFolder) && !is_dir($errorFolder)) { + dol_mkdir($errorFolder); + } + + foreach ($files as $file) { + // Use ZugferdImport::importFromFile for consistent handling + $import = new ZugferdImport($this->db); + $result = $import->importFromFile($admin_user, $file, $autoCreate); + + if ($result > 0) { + $this->imported_count++; + dol_syslog("CronImportZugferd: Imported invoice from folder: " . basename($file), LOG_INFO); + + // Archive the file + $this->moveFile($file, $archiveFolder, 'imported_'); + } elseif ($result == -2) { + // Duplicate - already imported + $this->skipped_count++; + dol_syslog("CronImportZugferd: Skipped duplicate invoice: " . basename($file), LOG_INFO); + + // Archive duplicates - delete if no archive folder + if (!$this->moveFile($file, $archiveFolder, 'duplicate_')) { + @unlink($file); + } + } else { + $this->error_count++; + $this->errors[] = basename($file) . ': ' . $import->error; + dol_syslog("CronImportZugferd: Error importing: " . basename($file) . " - " . $import->error, LOG_WARNING); + + // Try error folder first, fall back to archive folder + if (!$this->moveFile($file, $errorFolder, 'error_')) { + // Use archive folder as fallback for errors + $this->moveFile($file, $archiveFolder, 'error_'); + } + } + } + + return 0; + } + /** * Fetch ZUGFeRD invoices from configured IMAP mailbox * @@ -296,4 +470,68 @@ class CronImportZugferd 'data' => $data ); } + + /** + * Move file to target folder with proper error handling + * + * @param string $file Source file path + * @param string $targetFolder Target folder path + * @param string $prefix Filename prefix (e.g., 'imported_', 'duplicate_', 'error_') + * @return bool True if moved/deleted, false on failure + */ + protected function moveFile($file, $targetFolder, $prefix = '') + { + if (!file_exists($file)) { + dol_syslog("CronImportZugferd: File not found: " . $file, LOG_WARNING); + return false; + } + + // If target folder is configured and exists/writable + if (!empty($targetFolder)) { + // Create folder if it doesn't exist + if (!is_dir($targetFolder)) { + $result = dol_mkdir($targetFolder); + if ($result < 0) { + dol_syslog("CronImportZugferd: Failed to create folder: " . $targetFolder, LOG_WARNING); + } + } + + if (is_dir($targetFolder) && is_writable($targetFolder)) { + $targetPath = $targetFolder . '/' . $prefix . date('Y-m-d_His') . '_' . basename($file); + + if (@rename($file, $targetPath)) { + dol_syslog("CronImportZugferd: Moved file to: " . $targetPath, LOG_INFO); + return true; + } else { + // Try copy + delete as fallback (for cross-filesystem moves) + if (@copy($file, $targetPath)) { + @unlink($file); + dol_syslog("CronImportZugferd: Copied file to: " . $targetPath, LOG_INFO); + return true; + } else { + dol_syslog("CronImportZugferd: Failed to move/copy file to: " . $targetPath, LOG_ERR); + return false; + } + } + } else { + dol_syslog("CronImportZugferd: Target folder not writable: " . $targetFolder, LOG_WARNING); + } + } + + // No target folder configured or not writable - delete file from watch folder + // to prevent re-processing (except for errors without error folder) + if ($prefix !== 'error_') { + if (@unlink($file)) { + dol_syslog("CronImportZugferd: Deleted processed file: " . $file, LOG_INFO); + return true; + } else { + dol_syslog("CronImportZugferd: Failed to delete file: " . $file, LOG_ERR); + return false; + } + } + + // Error files stay in watch folder if no error folder configured + dol_syslog("CronImportZugferd: Keeping error file in watch folder: " . $file, LOG_INFO); + return true; + } } diff --git a/class/datanorm.class.php b/class/datanorm.class.php new file mode 100644 index 0000000..5c7c269 --- /dev/null +++ b/class/datanorm.class.php @@ -0,0 +1,989 @@ + + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + */ + +/** + * \file class/datanorm.class.php + * \ingroup importzugferd + * \brief Class for Datanorm article database operations + */ + +require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php'; + +/** + * Class Datanorm + * Manages Datanorm articles in database + */ +class Datanorm extends CommonObject +{ + /** + * @var string ID to identify managed object + */ + public $element = 'datanorm'; + + /** + * @var string Name of table without prefix + */ + public $table_element = 'importzugferd_datanorm'; + + /** + * @var int Does object support multicompany + */ + public $ismultientitymanaged = 1; + + /** + * @var int Supplier ID + */ + public $fk_soc; + + /** + * @var string Article number + */ + public $article_number; + + /** + * @var string Short text 1 + */ + public $short_text1; + + /** + * @var string Short text 2 + */ + public $short_text2; + + /** + * @var string Long text + */ + public $long_text; + + /** + * @var string EAN/GTIN + */ + public $ean; + + /** + * @var string Manufacturer article number + */ + public $manufacturer_ref; + + /** + * @var string Manufacturer name + */ + public $manufacturer_name; + + /** + * @var string Unit code + */ + public $unit_code; + + /** + * @var float Price + */ + public $price = 0; + + /** + * @var int Price unit (pieces per price) + */ + public $price_unit = 1; + + /** + * @var string Discount group + */ + public $discount_group; + + /** + * @var string Product group + */ + public $product_group; + + /** + * @var string Alternative unit + */ + public $alt_unit; + + /** + * @var float Alternative unit factor + */ + public $alt_unit_factor = 1; + + /** + * @var float Weight in kg + */ + public $weight; + + /** + * @var string Matchcode + */ + public $matchcode; + + /** + * @var string Datanorm version + */ + public $datanorm_version; + + /** + * @var string Import date + */ + public $import_date; + + /** + * @var int Active flag + */ + public $active = 1; + + /** + * @var string Date creation + */ + public $date_creation; + + /** + * @var int User creator + */ + public $fk_user_creat; + + /** + * @var int User modifier + */ + public $fk_user_modif; + + /** + * Constructor + * + * @param DoliDB $db Database handler + */ + public function __construct($db) + { + $this->db = $db; + } + + /** + * Create object into database + * + * @param User $user User that creates + * @return int <0 if KO, Id of created object if OK + */ + public function create($user) + { + global $conf; + + $this->entity = $conf->entity; + + if (empty($this->date_creation)) { + $this->date_creation = dol_now(); + } + if (empty($this->import_date)) { + $this->import_date = dol_now(); + } + + $this->fk_user_creat = $user->id; + + $sql = "INSERT INTO " . MAIN_DB_PREFIX . $this->table_element . " ("; + $sql .= "fk_soc, article_number, short_text1, short_text2, long_text,"; + $sql .= "ean, manufacturer_ref, manufacturer_name, unit_code,"; + $sql .= "price, price_unit, discount_group, product_group,"; + $sql .= "alt_unit, alt_unit_factor, weight, matchcode,"; + $sql .= "datanorm_version, import_date, active, date_creation, fk_user_creat, entity"; + $sql .= ") VALUES ("; + $sql .= (int) $this->fk_soc . ","; + $sql .= "'" . $this->db->escape($this->article_number) . "',"; + $sql .= "'" . $this->db->escape($this->short_text1) . "',"; + $sql .= "'" . $this->db->escape($this->short_text2) . "',"; + $sql .= "'" . $this->db->escape($this->long_text) . "',"; + $sql .= "'" . $this->db->escape($this->ean) . "',"; + $sql .= "'" . $this->db->escape($this->manufacturer_ref) . "',"; + $sql .= "'" . $this->db->escape($this->manufacturer_name) . "',"; + $sql .= "'" . $this->db->escape($this->unit_code) . "',"; + $sql .= (float) $this->price . ","; + $sql .= (int) $this->price_unit . ","; + $sql .= "'" . $this->db->escape($this->discount_group) . "',"; + $sql .= "'" . $this->db->escape($this->product_group) . "',"; + $sql .= "'" . $this->db->escape($this->alt_unit) . "',"; + $sql .= (float) $this->alt_unit_factor . ","; + $sql .= ($this->weight !== null ? (float) $this->weight : 'NULL') . ","; + $sql .= "'" . $this->db->escape($this->matchcode) . "',"; + $sql .= "'" . $this->db->escape($this->datanorm_version) . "',"; + $sql .= "'" . $this->db->escape($this->db->idate($this->import_date)) . "',"; + $sql .= (int) $this->active . ","; + $sql .= "'" . $this->db->escape($this->db->idate($this->date_creation)) . "',"; + $sql .= (int) $this->fk_user_creat . ","; + $sql .= (int) $this->entity; + $sql .= ")"; + + dol_syslog(get_class($this) . "::create", LOG_DEBUG); + $resql = $this->db->query($sql); + + if (!$resql) { + $this->error = $this->db->lasterror(); + return -1; + } + + $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX . $this->table_element); + return $this->id; + } + + /** + * Create or update article (upsert) + * + * @param User $user User that creates/modifies + * @return int <0 if KO, Id of object if OK + */ + public function createOrUpdate($user) + { + // Check if article exists + $existing = $this->fetchByArticleNumber($this->fk_soc, $this->article_number); + + if ($existing > 0) { + return $this->update($user); + } else { + return $this->create($user); + } + } + + /** + * Load object in memory from database + * + * @param int $id Id object + * @return int <0 if KO, 0 if not found, >0 if OK + */ + public function fetch($id) + { + $sql = "SELECT rowid, fk_soc, article_number, short_text1, short_text2, long_text,"; + $sql .= " ean, manufacturer_ref, manufacturer_name, unit_code,"; + $sql .= " price, price_unit, discount_group, product_group,"; + $sql .= " alt_unit, alt_unit_factor, weight, matchcode,"; + $sql .= " datanorm_version, import_date, active, date_creation, tms, fk_user_creat, fk_user_modif, entity"; + $sql .= " FROM " . MAIN_DB_PREFIX . $this->table_element; + $sql .= " WHERE rowid = " . (int) $id; + + dol_syslog(get_class($this) . "::fetch", LOG_DEBUG); + $resql = $this->db->query($sql); + + if ($resql) { + if ($this->db->num_rows($resql)) { + $obj = $this->db->fetch_object($resql); + $this->setFromObject($obj); + $this->db->free($resql); + return 1; + } else { + $this->db->free($resql); + return 0; + } + } else { + $this->error = $this->db->lasterror(); + return -1; + } + } + + /** + * Fetch by supplier and article number + * + * @param int $fk_soc Supplier ID + * @param string $article_number Article number + * @return int <0 if KO, 0 if not found, >0 if OK + */ + public function fetchByArticleNumber($fk_soc, $article_number) + { + global $conf; + + $sql = "SELECT rowid, fk_soc, article_number, short_text1, short_text2, long_text,"; + $sql .= " ean, manufacturer_ref, manufacturer_name, unit_code,"; + $sql .= " price, price_unit, discount_group, product_group,"; + $sql .= " alt_unit, alt_unit_factor, weight, matchcode,"; + $sql .= " datanorm_version, import_date, active, date_creation, tms, fk_user_creat, fk_user_modif, entity"; + $sql .= " FROM " . MAIN_DB_PREFIX . $this->table_element; + $sql .= " WHERE fk_soc = " . (int) $fk_soc; + $sql .= " AND article_number = '" . $this->db->escape($article_number) . "'"; + $sql .= " AND entity = " . (int) $conf->entity; + + dol_syslog(get_class($this) . "::fetchByArticleNumber", LOG_DEBUG); + $resql = $this->db->query($sql); + + if ($resql) { + if ($this->db->num_rows($resql)) { + $obj = $this->db->fetch_object($resql); + $this->setFromObject($obj); + $this->db->free($resql); + return 1; + } else { + $this->db->free($resql); + return 0; + } + } else { + $this->error = $this->db->lasterror(); + return -1; + } + } + + /** + * Set object properties from database object + * + * @param object $obj Database row object + */ + protected function setFromObject($obj) + { + $this->id = $obj->rowid; + $this->fk_soc = $obj->fk_soc; + $this->article_number = $obj->article_number; + $this->short_text1 = $obj->short_text1; + $this->short_text2 = $obj->short_text2; + $this->long_text = $obj->long_text; + $this->ean = $obj->ean; + $this->manufacturer_ref = $obj->manufacturer_ref; + $this->manufacturer_name = $obj->manufacturer_name; + $this->unit_code = $obj->unit_code; + $this->price = $obj->price; + $this->price_unit = $obj->price_unit; + $this->discount_group = $obj->discount_group; + $this->product_group = $obj->product_group; + $this->alt_unit = $obj->alt_unit; + $this->alt_unit_factor = $obj->alt_unit_factor; + $this->weight = $obj->weight; + $this->matchcode = $obj->matchcode; + $this->datanorm_version = $obj->datanorm_version; + $this->import_date = $this->db->jdate($obj->import_date); + $this->active = $obj->active; + $this->date_creation = $this->db->jdate($obj->date_creation); + $this->tms = $this->db->jdate($obj->tms); + $this->fk_user_creat = $obj->fk_user_creat; + $this->fk_user_modif = $obj->fk_user_modif; + $this->entity = $obj->entity; + } + + /** + * Update object in database + * + * @param User $user User that modifies + * @return int <0 if KO, >0 if OK + */ + public function update($user) + { + $this->fk_user_modif = $user->id; + $this->import_date = dol_now(); + + $sql = "UPDATE " . MAIN_DB_PREFIX . $this->table_element . " SET"; + $sql .= " short_text1 = '" . $this->db->escape($this->short_text1) . "',"; + $sql .= " short_text2 = '" . $this->db->escape($this->short_text2) . "',"; + $sql .= " long_text = '" . $this->db->escape($this->long_text) . "',"; + $sql .= " ean = '" . $this->db->escape($this->ean) . "',"; + $sql .= " manufacturer_ref = '" . $this->db->escape($this->manufacturer_ref) . "',"; + $sql .= " manufacturer_name = '" . $this->db->escape($this->manufacturer_name) . "',"; + $sql .= " unit_code = '" . $this->db->escape($this->unit_code) . "',"; + $sql .= " price = " . (float) $this->price . ","; + $sql .= " price_unit = " . (int) $this->price_unit . ","; + $sql .= " discount_group = '" . $this->db->escape($this->discount_group) . "',"; + $sql .= " product_group = '" . $this->db->escape($this->product_group) . "',"; + $sql .= " alt_unit = '" . $this->db->escape($this->alt_unit) . "',"; + $sql .= " alt_unit_factor = " . (float) $this->alt_unit_factor . ","; + $sql .= " weight = " . ($this->weight !== null ? (float) $this->weight : 'NULL') . ","; + $sql .= " matchcode = '" . $this->db->escape($this->matchcode) . "',"; + $sql .= " datanorm_version = '" . $this->db->escape($this->datanorm_version) . "',"; + $sql .= " import_date = '" . $this->db->escape($this->db->idate($this->import_date)) . "',"; + $sql .= " active = " . (int) $this->active . ","; + $sql .= " fk_user_modif = " . (int) $this->fk_user_modif; + $sql .= " WHERE rowid = " . (int) $this->id; + + dol_syslog(get_class($this) . "::update", LOG_DEBUG); + $resql = $this->db->query($sql); + + if (!$resql) { + $this->error = $this->db->lasterror(); + return -1; + } + + return 1; + } + + /** + * Delete object from database + * + * @param User $user User that deletes + * @return int <0 if KO, >0 if OK + */ + public function delete($user) + { + $sql = "DELETE FROM " . MAIN_DB_PREFIX . $this->table_element; + $sql .= " WHERE rowid = " . (int) $this->id; + + dol_syslog(get_class($this) . "::delete", LOG_DEBUG); + $resql = $this->db->query($sql); + + if (!$resql) { + $this->error = $this->db->lasterror(); + return -1; + } + + return 1; + } + + /** + * Delete all articles for a supplier + * + * @param User $user User that deletes + * @param int $fk_soc Supplier ID + * @return int <0 if KO, number of deleted rows if OK + */ + public function deleteAllBySupplier($user, $fk_soc) + { + global $conf; + + $sql = "DELETE FROM " . MAIN_DB_PREFIX . $this->table_element; + $sql .= " WHERE fk_soc = " . (int) $fk_soc; + $sql .= " AND entity = " . (int) $conf->entity; + + dol_syslog(get_class($this) . "::deleteAllBySupplier", LOG_DEBUG); + $resql = $this->db->query($sql); + + if (!$resql) { + $this->error = $this->db->lasterror(); + return -1; + } + + return $this->db->affected_rows($resql); + } + + /** + * Search articles by article number (exact or partial) + * + * @param string $article_number Article number to search + * @param int $fk_soc Supplier ID (0 = all suppliers) + * @param bool $searchAll Search all suppliers if not found in specified + * @param int $limit Maximum results + * @return array Array of matching articles + */ + public function searchByArticleNumber($article_number, $fk_soc = 0, $searchAll = false, $limit = 50) + { + global $conf; + + $results = array(); + + // First try exact match with specified supplier + if ($fk_soc > 0) { + $result = $this->fetchByArticleNumber($fk_soc, $article_number); + if ($result > 0) { + $results[] = $this->toArray(); + return $results; + } + } + + // Search partial match + $sql = "SELECT rowid, fk_soc, article_number, short_text1, short_text2,"; + $sql .= " ean, manufacturer_ref, manufacturer_name, unit_code,"; + $sql .= " price, price_unit, discount_group, product_group, matchcode"; + $sql .= " FROM " . MAIN_DB_PREFIX . $this->table_element; + $sql .= " WHERE (article_number LIKE '" . $this->db->escape($article_number) . "%'"; + $sql .= " OR ean = '" . $this->db->escape($article_number) . "'"; + $sql .= " OR manufacturer_ref LIKE '" . $this->db->escape($article_number) . "%')"; + + if ($fk_soc > 0 && !$searchAll) { + $sql .= " AND fk_soc = " . (int) $fk_soc; + } elseif ($fk_soc > 0 && $searchAll) { + // Order by matching supplier first + $sql .= " ORDER BY CASE WHEN fk_soc = " . (int) $fk_soc . " THEN 0 ELSE 1 END, article_number"; + } + + $sql .= " AND active = 1"; + $sql .= " AND entity = " . (int) $conf->entity; + + if ($fk_soc == 0 || !$searchAll) { + $sql .= " ORDER BY article_number"; + } + + $sql .= " LIMIT " . (int) $limit; + + $resql = $this->db->query($sql); + if ($resql) { + while ($obj = $this->db->fetch_object($resql)) { + $results[] = array( + 'id' => $obj->rowid, + 'fk_soc' => $obj->fk_soc, + 'article_number' => $obj->article_number, + 'short_text1' => $obj->short_text1, + 'short_text2' => $obj->short_text2, + 'ean' => $obj->ean, + 'manufacturer_ref' => $obj->manufacturer_ref, + 'manufacturer_name' => $obj->manufacturer_name, + 'unit_code' => $obj->unit_code, + 'price' => $obj->price, + 'price_unit' => $obj->price_unit, + 'discount_group' => $obj->discount_group, + 'product_group' => $obj->product_group, + 'matchcode' => $obj->matchcode, + ); + } + $this->db->free($resql); + } + + return $results; + } + + /** + * Convert object to array + * + * @return array Object as array + */ + public function toArray() + { + return array( + 'id' => $this->id, + 'fk_soc' => $this->fk_soc, + 'article_number' => $this->article_number, + 'short_text1' => $this->short_text1, + 'short_text2' => $this->short_text2, + 'long_text' => $this->long_text, + 'ean' => $this->ean, + 'manufacturer_ref' => $this->manufacturer_ref, + 'manufacturer_name' => $this->manufacturer_name, + 'unit_code' => $this->unit_code, + 'price' => $this->price, + 'price_unit' => $this->price_unit, + 'discount_group' => $this->discount_group, + 'product_group' => $this->product_group, + 'alt_unit' => $this->alt_unit, + 'alt_unit_factor' => $this->alt_unit_factor, + 'weight' => $this->weight, + 'matchcode' => $this->matchcode, + 'datanorm_version' => $this->datanorm_version, + 'import_date' => $this->import_date, + 'active' => $this->active, + ); + } + + /** + * Count articles for a supplier + * + * @param int $fk_soc Supplier ID + * @return int Count + */ + public function countBySupplier($fk_soc) + { + global $conf; + + $sql = "SELECT COUNT(*) as nb FROM " . MAIN_DB_PREFIX . $this->table_element; + $sql .= " WHERE fk_soc = " . (int) $fk_soc; + $sql .= " AND entity = " . (int) $conf->entity; + + $resql = $this->db->query($sql); + if ($resql) { + $obj = $this->db->fetch_object($resql); + return (int) $obj->nb; + } + + return 0; + } + + /** + * Get all suppliers with Datanorm data + * + * @return array Array of suppliers with article counts + */ + public function getSuppliersWithData() + { + global $conf; + + $suppliers = array(); + + $sql = "SELECT d.fk_soc, s.nom as supplier_name, COUNT(*) as article_count,"; + $sql .= " MAX(d.import_date) as last_import"; + $sql .= " FROM " . MAIN_DB_PREFIX . $this->table_element . " as d"; + $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "societe as s ON s.rowid = d.fk_soc"; + $sql .= " WHERE d.entity = " . (int) $conf->entity; + $sql .= " GROUP BY d.fk_soc, s.nom"; + $sql .= " ORDER BY s.nom"; + + $resql = $this->db->query($sql); + if ($resql) { + while ($obj = $this->db->fetch_object($resql)) { + $suppliers[] = array( + 'fk_soc' => $obj->fk_soc, + 'name' => $obj->supplier_name, + 'article_count' => $obj->article_count, + 'last_import' => $this->db->jdate($obj->last_import), + ); + } + $this->db->free($resql); + } + + return $suppliers; + } + + /** + * Import articles from parser + * + * @param User $user User that imports + * @param int $fk_soc Supplier ID + * @param DatanormParser $parser Parser with parsed articles + * @param bool $deleteExisting Delete existing articles before import + * @return int Number of imported articles, <0 on error + */ + public function importFromParser($user, $fk_soc, $parser, $deleteExisting = false) + { + $this->db->begin(); + + // Delete existing if requested + if ($deleteExisting) { + $result = $this->deleteAllBySupplier($user, $fk_soc); + if ($result < 0) { + $this->db->rollback(); + return -1; + } + } + + $count = 0; + $errors = 0; + + foreach ($parser->getArticles() as $articleData) { + $article = new Datanorm($this->db); + $article->fk_soc = $fk_soc; + $article->article_number = $articleData['article_number']; + $article->short_text1 = $articleData['short_text1'] ?? ''; + $article->short_text2 = $articleData['short_text2'] ?? ''; + $article->long_text = $articleData['long_text'] ?? ''; + $article->ean = $articleData['ean'] ?? ''; + $article->manufacturer_ref = $articleData['manufacturer_ref'] ?? ''; + $article->manufacturer_name = $articleData['manufacturer_name'] ?? ''; + $article->unit_code = $articleData['unit_code'] ?? ''; + $article->price = $articleData['price'] ?? 0; + $article->price_unit = $articleData['price_unit'] ?? 1; + $article->discount_group = $articleData['discount_group'] ?? ''; + $article->product_group = $articleData['product_group'] ?? ''; + $article->matchcode = $articleData['matchcode'] ?? ''; + $article->datanorm_version = $parser->version; + + $result = $article->createOrUpdate($user); + if ($result > 0) { + $count++; + } else { + $errors++; + $this->errors[] = 'Error importing ' . $articleData['article_number'] . ': ' . $article->error; + } + } + + if ($errors > 0 && $count == 0) { + $this->db->rollback(); + $this->error = 'All imports failed'; + return -1; + } + + $this->db->commit(); + return $count; + } + + /** + * Import articles from directory using streaming (for large files) + * Uses batch inserts to minimize memory usage + * + * @param User $user User that imports + * @param int $fk_soc Supplier ID + * @param string $directory Directory with Datanorm files + * @param bool $deleteExisting Delete existing articles before import + * @return int Number of imported articles, <0 on error + */ + public function importFromDirectoryStreaming($user, $fk_soc, $directory, $deleteExisting = false) + { + global $conf; + + require_once __DIR__ . '/datanormparser.class.php'; + + // Delete existing if requested + if ($deleteExisting) { + $result = $this->deleteAllBySupplier($user, $fk_soc); + if ($result < 0) { + return -1; + } + } + + $db = $this->db; + $importCount = 0; + $version = ''; + + // Create batch callback that inserts articles directly to database + $batchCallback = function ($articles) use ($db, $user, $fk_soc, &$importCount, &$version, $conf) { + if (empty($articles)) { + return; + } + + // Use multi-row INSERT for better performance + $values = array(); + $now = $db->idate(dol_now()); + + foreach ($articles as $articleData) { + $values[] = sprintf( + "(%d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %f, %d, '%s', '%s', '%s', '%s', '%s', %d, '%s', %d)", + (int) $fk_soc, + $db->escape($articleData['article_number'] ?? ''), + $db->escape($articleData['short_text1'] ?? ''), + $db->escape($articleData['short_text2'] ?? ''), + $db->escape($articleData['long_text'] ?? ''), + $db->escape($articleData['ean'] ?? ''), + $db->escape($articleData['manufacturer_ref'] ?? ''), + $db->escape($articleData['manufacturer_name'] ?? ''), + $db->escape($articleData['unit_code'] ?? ''), + (float) ($articleData['price'] ?? 0), + (int) ($articleData['price_unit'] ?? 1), + $db->escape($articleData['discount_group'] ?? ''), + $db->escape($articleData['product_group'] ?? ''), + $db->escape($articleData['matchcode'] ?? ''), + $db->escape($version), + $now, + (int) $user->id, + $now, + (int) $conf->entity + ); + } + + if (!empty($values)) { + // Use INSERT IGNORE to skip duplicates (for the same supplier + article_number) + $sql = "INSERT INTO " . MAIN_DB_PREFIX . "importzugferd_datanorm "; + $sql .= "(fk_soc, article_number, short_text1, short_text2, long_text, "; + $sql .= "ean, manufacturer_ref, manufacturer_name, unit_code, "; + $sql .= "price, price_unit, discount_group, product_group, matchcode, "; + $sql .= "datanorm_version, import_date, fk_user_creat, date_creation, entity) VALUES "; + $sql .= implode(", ", $values); + + // For updates of existing articles, use ON DUPLICATE KEY UPDATE + $sql .= " ON DUPLICATE KEY UPDATE "; + $sql .= "short_text1 = VALUES(short_text1), "; + $sql .= "short_text2 = VALUES(short_text2), "; + $sql .= "long_text = VALUES(long_text), "; + $sql .= "ean = VALUES(ean), "; + $sql .= "manufacturer_ref = VALUES(manufacturer_ref), "; + $sql .= "manufacturer_name = VALUES(manufacturer_name), "; + $sql .= "unit_code = VALUES(unit_code), "; + $sql .= "price = VALUES(price), "; + $sql .= "price_unit = VALUES(price_unit), "; + $sql .= "discount_group = VALUES(discount_group), "; + $sql .= "product_group = VALUES(product_group), "; + $sql .= "matchcode = VALUES(matchcode), "; + $sql .= "datanorm_version = VALUES(datanorm_version), "; + $sql .= "import_date = VALUES(import_date), "; + $sql .= "fk_user_modif = " . (int) $user->id; + + $resql = $db->query($sql); + if ($resql) { + $importCount += count($values); + } + } + }; + + // Parse with streaming enabled + // The parser now loads prices first, then articles + $parser = new DatanormParser(); + $parser->enableStreaming($batchCallback, 500); + + // Parse directory - prices are loaded first, then articles with streaming + $count = $parser->parseDirectory($directory); + $version = $parser->version; + + if ($count < 0) { + $this->error = $parser->error; + return -1; + } + + // Second pass: Update prices from DATPREIS files + $priceFiles = glob($directory . '/DATPREIS.*'); + if (!empty($priceFiles)) { + foreach ($priceFiles as $file) { + $ext = strtoupper(pathinfo($file, PATHINFO_EXTENSION)); + if (preg_match('/^\d{3}$/', $ext)) { + $this->updatePricesFromFile($fk_soc, $file); + } + } + } + + return $importCount; + } + + /** + * Update prices from DATPREIS file (streaming) + * Processes file line by line and updates database directly + * + * @param int $fk_soc Supplier ID + * @param string $file Path to DATPREIS file + * @return int Number of prices updated + */ + protected function updatePricesFromFile($fk_soc, $file) + { + global $conf; + + $handle = fopen($file, 'r'); + if ($handle === false) { + return 0; + } + + $updated = 0; + $batch = array(); + $batchSize = 500; + + while (($line = fgets($handle)) !== false) { + $line = rtrim($line, "\r\n"); + + // Convert encoding if needed + if (!mb_check_encoding($line, 'UTF-8')) { + $line = mb_convert_encoding($line, 'UTF-8', 'ISO-8859-1'); + } + + if (strlen($line) < 10 || strpos($line, ';') === false) { + continue; + } + + $parts = explode(';', $line); + $recordType = trim($parts[0] ?? ''); + + // P;A format - multiple articles per line + if ($recordType === 'P' && isset($parts[1]) && $parts[1] === 'A') { + $i = 2; + while ($i < count($parts) - 2) { + $articleNumber = trim($parts[$i] ?? ''); + $priceRaw = trim($parts[$i + 2] ?? '0'); + $price = (float)$priceRaw / 100; // Convert cents to euros + + if (!empty($articleNumber) && $price > 0) { + $batch[$articleNumber] = $price; + } + + $i += 9; // 9 fields per article + } + } elseif ($recordType === 'P' || $recordType === '0') { + $articleNumber = trim($parts[1] ?? ''); + $priceRaw = trim($parts[3] ?? '0'); + + if (strpos($priceRaw, ',') === false && strpos($priceRaw, '.') === false) { + $price = (float)$priceRaw / 100; + } else { + $priceRaw = str_replace(',', '.', $priceRaw); + $price = (float)$priceRaw; + } + + if (!empty($articleNumber) && $price > 0) { + $batch[$articleNumber] = $price; + } + } + + // Flush batch when it reaches the limit + if (count($batch) >= $batchSize) { + $updated += $this->flushPriceBatch($fk_soc, $batch); + $batch = array(); + } + } + + // Flush remaining + if (!empty($batch)) { + $updated += $this->flushPriceBatch($fk_soc, $batch); + } + + fclose($handle); + return $updated; + } + + /** + * Flush price batch to database + * + * @param int $fk_soc Supplier ID + * @param array $prices Array of article_number => price + * @return int Number of rows updated + */ + protected function flushPriceBatch($fk_soc, $prices) + { + global $conf; + + if (empty($prices)) { + return 0; + } + + $updated = 0; + + // Build CASE statement for batch update + $cases = array(); + $articleNumbers = array(); + + foreach ($prices as $artNum => $price) { + $cases[] = "WHEN '" . $this->db->escape($artNum) . "' THEN " . (float)$price; + $articleNumbers[] = "'" . $this->db->escape($artNum) . "'"; + } + + if (!empty($cases)) { + $sql = "UPDATE " . MAIN_DB_PREFIX . "importzugferd_datanorm SET "; + $sql .= "price = CASE article_number "; + $sql .= implode(" ", $cases); + $sql .= " END "; + $sql .= "WHERE fk_soc = " . (int)$fk_soc; + $sql .= " AND entity = " . (int)$conf->entity; + $sql .= " AND article_number IN (" . implode(",", $articleNumbers) . ")"; + + $resql = $this->db->query($sql); + if ($resql) { + $updated = $this->db->affected_rows($resql); + } + } + + return $updated; + } + + /** + * Get full description for product creation + * + * @return string Full description + */ + public function getFullDescription() + { + $desc = ''; + + if (!empty($this->short_text1)) { + $desc .= $this->short_text1; + } + if (!empty($this->short_text2)) { + $desc .= ($desc ? "\n" : '') . $this->short_text2; + } + if (!empty($this->long_text)) { + $desc .= ($desc ? "\n\n" : '') . $this->long_text; + } + + // Add metadata + $meta = array(); + if (!empty($this->manufacturer_name)) { + $meta[] = 'Hersteller: ' . $this->manufacturer_name; + } + if (!empty($this->manufacturer_ref)) { + $meta[] = 'Hersteller-Nr: ' . $this->manufacturer_ref; + } + if (!empty($this->ean)) { + $meta[] = 'EAN: ' . $this->ean; + } + if (!empty($this->product_group)) { + $meta[] = 'Warengruppe: ' . $this->product_group; + } + + if (!empty($meta)) { + $desc .= ($desc ? "\n\n" : '') . implode("\n", $meta); + } + + return $desc; + } + + /** + * Calculate selling price with markup + * + * @param float $markupPercent Markup percentage + * @return float Selling price + */ + public function getSellingPrice($markupPercent = 0) + { + $basePrice = $this->price; + + // Adjust for price unit + if ($this->price_unit > 1) { + $basePrice = $basePrice / $this->price_unit; + } + + if ($markupPercent > 0) { + return $basePrice * (1 + $markupPercent / 100); + } + + return $basePrice; + } +} diff --git a/class/datanormparser.class.php b/class/datanormparser.class.php new file mode 100644 index 0000000..356ff0e --- /dev/null +++ b/class/datanormparser.class.php @@ -0,0 +1,909 @@ + + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + */ + +/** + * \file class/datanormparser.class.php + * \ingroup importzugferd + * \brief Parser for Datanorm 4.0 and 5.0 catalog files + */ + +/** + * Class DatanormParser + * Parses Datanorm catalog files (Version 4.0 and 5.0) + */ +class DatanormParser +{ + /** + * @var string Detected Datanorm version + */ + public $version = ''; + + /** + * @var array Parsed articles (only used for small imports) + */ + public $articles = array(); + + /** + * @var array Parsed price information + */ + public $prices = array(); + + /** + * @var array Product groups/categories + */ + public $groups = array(); + + /** + * @var string Error message + */ + public $error = ''; + + /** + * @var array Error messages + */ + public $errors = array(); + + /** + * @var callable Callback for batch processing articles + */ + protected $batchCallback = null; + + /** + * @var int Batch size for database inserts + */ + protected $batchSize = 1000; + + /** + * @var array Current batch of articles + */ + protected $batchArticles = array(); + + /** + * @var bool Whether to use streaming mode (for large files) + */ + protected $streamingMode = false; + + /** + * Enable streaming mode for large files + * In streaming mode, articles are processed in batches via callback + * + * @param callable $callback Function to call with batch of articles + * @param int $batchSize Number of articles per batch + */ + public function enableStreaming($callback, $batchSize = 1000) + { + $this->streamingMode = true; + $this->batchCallback = $callback; + $this->batchSize = $batchSize; + $this->batchArticles = array(); + } + + /** + * Disable streaming mode + */ + public function disableStreaming() + { + $this->streamingMode = false; + $this->batchCallback = null; + $this->batchArticles = array(); + } + + /** + * Add article to batch (streaming mode) or to articles array + * + * @param array $article Article data + */ + protected function addArticle($article) + { + if ($this->streamingMode && $this->batchCallback) { + $this->batchArticles[$article['article_number']] = $article; + + if (count($this->batchArticles) >= $this->batchSize) { + $this->flushBatch(); + } + } else { + $this->articles[$article['article_number']] = $article; + } + } + + /** + * Flush current batch to callback + */ + protected function flushBatch() + { + if (!empty($this->batchArticles) && $this->batchCallback) { + // Merge prices into batch articles before flushing + foreach ($this->batchArticles as $artNum => &$article) { + if (isset($this->prices[$artNum])) { + $article['price'] = $this->prices[$artNum]['price']; + unset($this->prices[$artNum]); // Free memory + } + } + unset($article); + + call_user_func($this->batchCallback, $this->batchArticles); + $this->batchArticles = array(); + } + } + + /** + * Parse a Datanorm file or directory + * + * @param string $path Path to file or directory + * @return int Number of articles parsed, -1 on error + */ + public function parse($path) + { + if (is_dir($path)) { + return $this->parseDirectory($path); + } else { + return $this->parseFile($path); + } + } + + /** + * Parse all Datanorm files in a directory + * + * @param string $dir Directory path + * @return int Number of articles parsed, -1 on error + */ + public function parseDirectory($dir) + { + $totalArticles = 0; + + // For non-streaming mode, load prices first + // For streaming mode with very large files, prices must be handled separately + if (!$this->streamingMode) { + $priceFiles = glob($dir . '/DATPREIS.*'); + if (!empty($priceFiles)) { + $this->version = '4.0'; + foreach ($priceFiles as $file) { + $ext = strtoupper(pathinfo($file, PATHINFO_EXTENSION)); + if (preg_match('/^\d{3}$/', $ext)) { + $this->parseDatapreis4File($file); + } + } + } + } + + // Look for Datanorm 4.0 files (DATANORM.xxx) + $files = glob($dir . '/DATANORM.*'); + if (!empty($files)) { + $this->version = '4.0'; + foreach ($files as $file) { + $ext = strtoupper(pathinfo($file, PATHINFO_EXTENSION)); + if (preg_match('/^\d{3}$/', $ext)) { + // Main article file (DATANORM.001, etc.) + $count = $this->parseDatanorm4File($file); + if ($count > 0) { + $totalArticles += $count; + } + } elseif ($ext === 'WRG') { + // Product groups file + $this->parseDatanorm4Groups($file); + } elseif ($ext === 'RAB') { + // Discount groups file + $this->parseDatanorm4Discounts($file); + } + } + } + + // Merge prices into articles (non-streaming mode only) + // In streaming mode, prices are merged in flushBatch() + if (!$this->streamingMode && !empty($this->prices)) { + $this->mergePricesIntoArticles(); + } + + // Look for Datanorm 5.0 files (*.xml) + $xmlFiles = glob($dir . '/*.xml'); + foreach ($xmlFiles as $file) { + if ($this->isDatanorm5File($file)) { + $this->version = '5.0'; + $count = $this->parseDatanorm5File($file); + if ($count > 0) { + $totalArticles += $count; + } + } + } + + return $totalArticles; + } + + /** + * Parse a single file (auto-detect format) + * + * @param string $file File path + * @return int Number of articles parsed, -1 on error + */ + public function parseFile($file) + { + if (!file_exists($file)) { + $this->error = 'File not found: ' . $file; + return -1; + } + + // Check if XML (Datanorm 5.0) + $content = file_get_contents($file, false, null, 0, 1000); + if (strpos($content, 'version = '5.0'; + return $this->parseDatanorm5File($file); + } + + // Assume Datanorm 4.0 + $this->version = '4.0'; + return $this->parseDatanorm4File($file); + } + + /** + * Parse Datanorm 4.0 file (fixed-width format) + * Uses streaming to handle large files + * + * @param string $file File path + * @return int Number of articles parsed + */ + protected function parseDatanorm4File($file) + { + $handle = fopen($file, 'r'); + if ($handle === false) { + $this->error = 'Cannot read file: ' . $file; + return -1; + } + + $count = 0; + $currentArticle = null; + + while (($line = fgets($handle)) !== false) { + $line = rtrim($line, "\r\n"); + + // Convert encoding if needed (Datanorm 4 often uses ISO-8859-1 or CP850) + if (!mb_check_encoding($line, 'UTF-8')) { + $line = mb_convert_encoding($line, 'UTF-8', 'ISO-8859-1'); + } + + if (strlen($line) < 2) { + continue; + } + + $recordType = substr($line, 0, 1); + + switch ($recordType) { + case 'A': + // Article master record + $article = $this->parseDatanorm4TypeA($line); + if ($article) { + $this->addArticle($article); + $currentArticle = $article['article_number']; + $count++; + } + break; + + case 'B': + // Article info/long text + if ($currentArticle) { + $this->parseDatanorm4TypeB($line, $currentArticle); + } + break; + + case 'P': + // Price record + $this->parseDatanorm4TypeP($line); + break; + } + } + + fclose($handle); + + // Flush any remaining batch in streaming mode + if ($this->streamingMode) { + $this->flushBatch(); + } else { + // Merge prices into articles (only in non-streaming mode) + $this->mergePricesIntoArticles(); + } + + return $count; + } + + /** + * Parse Datanorm 4.0 Type A record (Article master) + * Field positions based on Datanorm 4.0 specification + * + * @param string $line Record line + * @return array|null Article data + */ + protected function parseDatanorm4TypeA($line) + { + // Minimum length check + if (strlen($line) < 50) { + return null; + } + + // Datanorm 4.0 Type A field layout (semicolon-separated in newer versions) + if (strpos($line, ';') !== false) { + return $this->parseDatanorm4TypeASemicolon($line); + } + + // Fixed-width format (classic) + $article = array( + 'article_number' => trim(substr($line, 1, 15)), // Pos 2-16: Artikelnummer + 'matchcode' => trim(substr($line, 16, 12)), // Pos 17-28: Matchcode + 'short_text1' => trim(substr($line, 28, 40)), // Pos 29-68: Kurztext 1 + 'short_text2' => trim(substr($line, 68, 40)), // Pos 69-108: Kurztext 2 + 'unit_code' => trim(substr($line, 108, 3)), // Pos 109-111: Mengeneinheit + 'price_unit' => (int)trim(substr($line, 111, 5)), // Pos 112-116: Preiseinheit + 'discount_group' => trim(substr($line, 116, 4)), // Pos 117-120: Rabattgruppe + 'product_group' => trim(substr($line, 120, 7)), // Pos 121-127: Warengruppe + 'manufacturer_ref' => trim(substr($line, 127, 15)), // Pos 128-142: Hersteller-Artikelnummer + 'manufacturer_name' => trim(substr($line, 142, 20)), // Pos 143-162: Herstellername + 'ean' => '', + 'long_text' => '', + 'price' => 0, + ); + + // EAN if available (extended format) + if (strlen($line) >= 175) { + $article['ean'] = trim(substr($line, 162, 13)); + } + + if (empty($article['article_number'])) { + return null; + } + + // Default price unit to 1 if not set + if ($article['price_unit'] <= 0) { + $article['price_unit'] = 1; + } + + return $article; + } + + /** + * Parse Datanorm 4.0 Type A record (semicolon-separated format) + * + * @param string $line Record line + * @return array|null Article data + */ + protected function parseDatanorm4TypeASemicolon($line) + { + $parts = explode(';', $line); + + if (count($parts) < 6) { + return null; + } + + // Detect format variant + // Sonepar format: A;N;ArtNr;WG;Kurztext1;Kurztext2;PE;ME;METext;RabGrp;PreisGrp;WG2;... + // Standard format: A;ArtNr;Matchcode;Kurztext1;Kurztext2;ME;PE;RabGrp;WG;... + + $firstField = trim($parts[0] ?? ''); + + if ($firstField === 'A' && isset($parts[1]) && strlen(trim($parts[1])) <= 2) { + // Sonepar format: A;N;ArtNr;WG;Kurztext1;Kurztext2;PE;ME;METext;RabGrp;PreisGrp;WG2;... + $article = array( + 'article_number' => trim($parts[2] ?? ''), + 'matchcode' => '', // Will be set from B record + 'short_text1' => trim($parts[4] ?? ''), + 'short_text2' => trim($parts[5] ?? ''), + 'unit_code' => trim($parts[8] ?? trim($parts[7] ?? '')), // METext or ME + 'price_unit' => (int)trim($parts[6] ?? '1'), // PE + 'discount_group' => trim($parts[9] ?? ''), + 'product_group' => trim($parts[3] ?? ''), // WG at position 3 + 'manufacturer_ref' => '', + 'manufacturer_name' => '', + 'ean' => '', + 'long_text' => '', + 'price' => 0, + ); + } else { + // Standard format + $article = array( + 'article_number' => trim($parts[1] ?? ''), + 'matchcode' => trim($parts[2] ?? ''), + 'short_text1' => trim($parts[3] ?? ''), + 'short_text2' => trim($parts[4] ?? ''), + 'unit_code' => trim($parts[5] ?? ''), + 'price_unit' => (int)trim($parts[6] ?? '1'), + 'discount_group' => trim($parts[7] ?? ''), + 'product_group' => trim($parts[8] ?? ''), + 'manufacturer_ref' => trim($parts[14] ?? ''), + 'manufacturer_name' => trim($parts[15] ?? ''), + 'ean' => trim($parts[16] ?? ''), + 'long_text' => '', + 'price' => 0, + ); + } + + if (empty($article['article_number'])) { + return null; + } + + if ($article['price_unit'] <= 0) { + $article['price_unit'] = 1; + } + + return $article; + } + + /** + * Get article reference for modification (handles both streaming and non-streaming mode) + * + * @param string $articleNumber Article number + * @return array|null Reference to article or null + */ + protected function &getArticleRef($articleNumber) + { + $null = null; + if ($this->streamingMode) { + if (isset($this->batchArticles[$articleNumber])) { + return $this->batchArticles[$articleNumber]; + } + } else { + if (isset($this->articles[$articleNumber])) { + return $this->articles[$articleNumber]; + } + } + return $null; + } + + /** + * Parse Datanorm 4.0 Type B record (Article info/long text) + * + * @param string $line Record line + * @param string $articleNumber Current article number + */ + protected function parseDatanorm4TypeB($line, $articleNumber) + { + $article = &$this->getArticleRef($articleNumber); + if ($article === null) { + return; + } + + if (strpos($line, ';') !== false) { + $parts = explode(';', $line); + + // Sonepar format: B;N;ArtNr;Matchcode;... + if (isset($parts[1]) && strlen(trim($parts[1])) <= 2) { + // Get article number from B record to verify + $bArticleNumber = trim($parts[2] ?? ''); + if ($bArticleNumber === $articleNumber) { + // Matchcode is at position 3 + $matchcode = trim($parts[3] ?? ''); + if (!empty($matchcode) && empty($article['matchcode'])) { + $article['matchcode'] = $matchcode; + } + } + } else { + // Standard format: text at position 2 + $text = trim($parts[2] ?? ''); + if (!empty($text)) { + if (!empty($article['long_text'])) { + $article['long_text'] .= "\n"; + } + $article['long_text'] .= $text; + } + } + } else { + $text = trim(substr($line, 16)); + if (!empty($text)) { + if (!empty($article['long_text'])) { + $article['long_text'] .= "\n"; + } + $article['long_text'] .= $text; + } + } + } + + /** + * Parse Datanorm 4.0 Type P record (Price) + * + * @param string $line Record line + */ + protected function parseDatanorm4TypeP($line) + { + if (strpos($line, ';') !== false) { + $parts = explode(';', $line); + $articleNumber = trim($parts[1] ?? ''); + $priceType = trim($parts[2] ?? ''); + $price = $this->parsePrice(trim($parts[3] ?? '0')); + } else { + $articleNumber = trim(substr($line, 1, 15)); + $priceType = trim(substr($line, 16, 1)); + $price = $this->parsePrice(trim(substr($line, 17, 12))); + } + + if (!empty($articleNumber) && $price > 0) { + $this->prices[$articleNumber] = array( + 'price' => $price, + 'price_type' => $priceType, + ); + } + } + + /** + * Parse Datanorm 4.0 product groups file (DATANORM.WRG) + * + * @param string $file File path + */ + protected function parseDatanorm4Groups($file) + { + $content = file_get_contents($file); + if ($content === false) { + return; + } + + if (!mb_check_encoding($content, 'UTF-8')) { + $content = mb_convert_encoding($content, 'UTF-8', 'ISO-8859-1'); + } + + $lines = explode("\n", $content); + foreach ($lines as $line) { + $line = rtrim($line, "\r\n"); + if (strlen($line) < 10) { + continue; + } + + if (strpos($line, ';') !== false) { + $parts = explode(';', $line); + $code = trim($parts[0] ?? ''); + $name = trim($parts[1] ?? ''); + } else { + $code = trim(substr($line, 0, 7)); + $name = trim(substr($line, 7)); + } + + if (!empty($code)) { + $this->groups[$code] = $name; + } + } + } + + /** + * Parse Datanorm 4.0 discount groups file (DATANORM.RAB) + * + * @param string $file File path + */ + protected function parseDatanorm4Discounts($file) + { + // Discount parsing - can be extended if needed + } + + /** + * Parse DATPREIS.xxx price file + * Uses streaming to handle large files + * + * @param string $file File path + */ + protected function parseDatapreis4File($file) + { + $handle = fopen($file, 'r'); + if ($handle === false) { + return; + } + + while (($line = fgets($handle)) !== false) { + $line = rtrim($line, "\r\n"); + + // Convert encoding if needed + if (!mb_check_encoding($line, 'UTF-8')) { + $line = mb_convert_encoding($line, 'UTF-8', 'ISO-8859-1'); + } + + if (strlen($line) < 10) { + continue; + } + + // DATPREIS format - semicolon separated + if (strpos($line, ';') !== false) { + $parts = explode(';', $line); + $recordType = trim($parts[0] ?? ''); + + // P;A format - multiple articles per line + // Format: P;A;ArtNr;PreisKz;Preis;PE;x;x;x;x;ArtNr2;PreisKz2;Preis2;... + if ($recordType === 'P' && isset($parts[1]) && $parts[1] === 'A') { + // Parse multiple price entries per line + // Each entry is: ArtNr;PreisKz;Preis;PE;0;1;0;1;0 + $i = 2; // Start after P;A + while ($i < count($parts) - 2) { + $articleNumber = trim($parts[$i] ?? ''); + $priceType = trim($parts[$i + 1] ?? ''); + $priceRaw = trim($parts[$i + 2] ?? '0'); + + // Price is in cents, convert to euros + $price = (float)$priceRaw / 100; + + if (!empty($articleNumber) && $price > 0) { + $this->prices[$articleNumber] = array( + 'price' => $price, + 'price_type' => $priceType, + ); + } + + // Move to next article (9 fields per article: ArtNr;Kz;Preis;PE;0;1;0;1;0) + $i += 9; + } + } elseif ($recordType === 'P' || $recordType === '0') { + // Simple format: P;ArtNr;PreisKz;Preis + $articleNumber = trim($parts[1] ?? ''); + $priceType = trim($parts[2] ?? ''); + $priceRaw = trim($parts[3] ?? '0'); + + // Check if price is in cents (no decimal point) + if (strpos($priceRaw, ',') === false && strpos($priceRaw, '.') === false) { + $price = (float)$priceRaw / 100; + } else { + $price = $this->parsePrice($priceRaw); + } + + if (!empty($articleNumber) && $price > 0) { + $this->prices[$articleNumber] = array( + 'price' => $price, + 'price_type' => $priceType, + ); + } + } + } else { + // Fixed width format + $recordType = substr($line, 0, 1); + + if ($recordType === 'P' || $recordType === '0') { + $articleNumber = trim(substr($line, 1, 15)); + $priceType = trim(substr($line, 16, 1)); + $priceRaw = trim(substr($line, 17, 12)); + + // Check if price is in cents + if (strpos($priceRaw, ',') === false && strpos($priceRaw, '.') === false) { + $price = (float)$priceRaw / 100; + } else { + $price = $this->parsePrice($priceRaw); + } + + if (!empty($articleNumber) && $price > 0) { + $this->prices[$articleNumber] = array( + 'price' => $price, + 'price_type' => $priceType, + ); + } + } + } + } + + fclose($handle); + } + + /** + * Merge prices into articles + */ + protected function mergePricesIntoArticles() + { + foreach ($this->prices as $articleNumber => $priceData) { + if (isset($this->articles[$articleNumber])) { + $this->articles[$articleNumber]['price'] = $priceData['price']; + } + } + } + + /** + * Check if file is Datanorm 5.0 format + * + * @param string $file File path + * @return bool + */ + protected function isDatanorm5File($file) + { + $content = file_get_contents($file, false, null, 0, 2000); + return (strpos($content, 'error = 'XML parse error: ' . ($errors[0]->message ?? 'Unknown error'); + libxml_clear_errors(); + return -1; + } + + $count = 0; + + // Register namespaces if present + $namespaces = $xml->getNamespaces(true); + + // Find article nodes (various possible node names) + $articleNodes = $xml->xpath('//Artikel') ?: $xml->xpath('//Article') ?: $xml->xpath('//article') ?: array(); + + foreach ($articleNodes as $node) { + $article = $this->parseDatanorm5Article($node); + if ($article) { + $this->articles[$article['article_number']] = $article; + $count++; + } + } + + return $count; + } + + /** + * Parse Datanorm 5.0 article node + * + * @param SimpleXMLElement $node Article XML node + * @return array|null Article data + */ + protected function parseDatanorm5Article($node) + { + $article = array( + 'article_number' => $this->getXmlValue($node, array('Artikelnummer', 'ArticleNumber', 'ArtNr', 'artNr')), + 'matchcode' => $this->getXmlValue($node, array('Matchcode', 'matchcode')), + 'short_text1' => $this->getXmlValue($node, array('Kurztext1', 'Kurztext', 'ShortText1', 'ShortText', 'Bezeichnung', 'Name')), + 'short_text2' => $this->getXmlValue($node, array('Kurztext2', 'ShortText2')), + 'long_text' => $this->getXmlValue($node, array('Langtext', 'LongText', 'Beschreibung', 'Description')), + 'unit_code' => $this->getXmlValue($node, array('Mengeneinheit', 'Unit', 'ME')), + 'price_unit' => (int)$this->getXmlValue($node, array('Preiseinheit', 'PriceUnit', 'PE')) ?: 1, + 'price' => $this->parsePrice($this->getXmlValue($node, array('Preis', 'Price', 'Listenpreis', 'ListPrice'))), + 'discount_group' => $this->getXmlValue($node, array('Rabattgruppe', 'DiscountGroup', 'RG')), + 'product_group' => $this->getXmlValue($node, array('Warengruppe', 'ProductGroup', 'WG')), + 'manufacturer_ref' => $this->getXmlValue($node, array('HerstellerArtNr', 'ManufacturerArticleNumber')), + 'manufacturer_name' => $this->getXmlValue($node, array('Hersteller', 'Manufacturer')), + 'ean' => $this->getXmlValue($node, array('EAN', 'GTIN', 'Barcode')), + ); + + if (empty($article['article_number'])) { + return null; + } + + return $article; + } + + /** + * Get value from XML node trying multiple possible element names + * + * @param SimpleXMLElement $node XML node + * @param array $names Possible element names + * @return string Value or empty string + */ + protected function getXmlValue($node, $names) + { + foreach ($names as $name) { + // Try as child element + if (isset($node->$name)) { + return trim((string)$node->$name); + } + // Try as attribute + if (isset($node[$name])) { + return trim((string)$node[$name]); + } + } + return ''; + } + + /** + * Parse price string to float + * + * @param string $priceStr Price string + * @return float Price value + */ + protected function parsePrice($priceStr) + { + if (empty($priceStr)) { + return 0.0; + } + + // Remove currency symbols and whitespace + $priceStr = preg_replace('/[^\d,.\-]/', '', $priceStr); + + // Handle German number format (1.234,56) + if (preg_match('/^\d{1,3}(\.\d{3})*,\d{2}$/', $priceStr)) { + $priceStr = str_replace('.', '', $priceStr); + $priceStr = str_replace(',', '.', $priceStr); + } elseif (strpos($priceStr, ',') !== false && strpos($priceStr, '.') === false) { + // Simple comma as decimal separator + $priceStr = str_replace(',', '.', $priceStr); + } + + return (float)$priceStr; + } + + /** + * Convert Datanorm unit code to UN/ECE code + * + * @param string $datanormUnit Datanorm unit code + * @return string UN/ECE unit code + */ + public static function convertUnitCode($datanormUnit) + { + $mapping = array( + 'ST' => 'C62', // Stück + 'STK' => 'C62', // Stück + 'PCE' => 'C62', // Piece + 'M' => 'MTR', // Meter + 'MTR' => 'MTR', // Meter + 'CM' => 'CMT', // Zentimeter + 'MM' => 'MMT', // Millimeter + 'L' => 'LTR', // Liter + 'LTR' => 'LTR', // Liter + 'KG' => 'KGM', // Kilogramm + 'G' => 'GRM', // Gramm + 'M2' => 'MTK', // Quadratmeter + 'M3' => 'MTQ', // Kubikmeter + 'PAK' => 'PK', // Packung + 'PAC' => 'PK', // Package + 'SET' => 'SET', // Set + 'ROL' => 'RL', // Rolle + 'RLL' => 'RL', // Roll + 'BDL' => 'BE', // Bündel + 'KRT' => 'CT', // Karton + 'CTN' => 'CT', // Carton + ); + + $unit = strtoupper(trim($datanormUnit)); + return $mapping[$unit] ?? 'C62'; // Default to piece + } + + /** + * Get all parsed articles + * + * @return array Articles + */ + public function getArticles() + { + return $this->articles; + } + + /** + * Find article by number + * + * @param string $articleNumber Article number to find + * @return array|null Article data or null + */ + public function findArticle($articleNumber) + { + return $this->articles[$articleNumber] ?? null; + } + + /** + * Search articles by text + * + * @param string $searchText Search text + * @param int $limit Maximum results + * @return array Matching articles + */ + public function searchArticles($searchText, $limit = 50) + { + $results = array(); + $searchText = strtolower($searchText); + + foreach ($this->articles as $article) { + $searchFields = strtolower( + $article['article_number'] . ' ' . + $article['matchcode'] . ' ' . + $article['short_text1'] . ' ' . + $article['short_text2'] . ' ' . + $article['ean'] . ' ' . + $article['manufacturer_ref'] + ); + + if (strpos($searchFields, $searchText) !== false) { + $results[] = $article; + if (count($results) >= $limit) { + break; + } + } + } + + return $results; + } +} diff --git a/class/importnotification.class.php b/class/importnotification.class.php new file mode 100644 index 0000000..8fedf26 --- /dev/null +++ b/class/importnotification.class.php @@ -0,0 +1,389 @@ +db = $db; + } + + /** + * Check if notifications are enabled + * + * @return bool True if enabled + */ + public function isEnabled() + { + return getDolGlobalString('IMPORTZUGFERD_NOTIFY_ENABLED') && getDolGlobalString('IMPORTZUGFERD_NOTIFY_EMAIL'); + } + + /** + * Get notification email address + * + * @return string Email address + */ + public function getNotifyEmail() + { + return getDolGlobalString('IMPORTZUGFERD_NOTIFY_EMAIL'); + } + + /** + * Send notification for manual intervention required + * + * @param ZugferdImport $import Import object + * @param array $lines Import lines + * @return int 1 if sent, 0 if not needed, -1 on error + */ + public function sendManualInterventionNotification($import, $lines = array()) + { + global $conf, $langs; + + if (!$this->isEnabled() || !getDolGlobalString('IMPORTZUGFERD_NOTIFY_MANUAL')) { + return 0; + } + + $langs->load('importzugferd@importzugferd'); + + $subject = $langs->trans('NotifySubjectManualIntervention', $import->invoice_number); + + $body = $langs->trans('NotifyBodyManualIntervention', $import->invoice_number, $import->seller_name); + $body .= "\n\n"; + $body .= $langs->trans('InvoiceNumber').': '.$import->invoice_number."\n"; + $body .= $langs->trans('Supplier').': '.$import->seller_name."\n"; + $body .= $langs->trans('InvoiceDate').': '.dol_print_date($import->invoice_date, 'day')."\n"; + $body .= $langs->trans('TotalTTC').': '.price($import->total_ttc).' '.$import->currency."\n"; + $body .= "\n"; + + // List issues + $missingProducts = 0; + $missingSupplier = ($import->fk_soc <= 0); + + if (!empty($lines)) { + foreach ($lines as $line) { + if ($line->fk_product <= 0) { + $missingProducts++; + } + } + } + + if ($missingSupplier) { + $body .= "- ".$langs->trans('SupplierNotAssigned')."\n"; + } + if ($missingProducts > 0) { + $body .= "- ".$missingProducts." ".$langs->trans('ProductsNotAssigned')."\n"; + } + + $body .= "\n"; + $body .= $langs->trans('NotifyLinkToImport').': '.dol_buildpath('/importzugferd/import.php', 2).'?action=edit&id='.$import->id; + + return $this->sendEmail($subject, $body); + } + + /** + * Send notification for import error + * + * @param ZugferdImport $import Import object (may be partial) + * @param string $errorMessage Error message + * @param string $filename Original filename + * @return int 1 if sent, 0 if not needed, -1 on error + */ + public function sendErrorNotification($import, $errorMessage, $filename = '') + { + global $conf, $langs; + + if (!$this->isEnabled() || !getDolGlobalString('IMPORTZUGFERD_NOTIFY_ERROR')) { + return 0; + } + + $langs->load('importzugferd@importzugferd'); + + $invoiceNum = !empty($import->invoice_number) ? $import->invoice_number : $filename; + $subject = $langs->trans('NotifySubjectError', $invoiceNum); + + $body = $langs->trans('NotifyBodyError', $invoiceNum); + $body .= "\n\n"; + + if (!empty($import->invoice_number)) { + $body .= $langs->trans('InvoiceNumber').': '.$import->invoice_number."\n"; + } + if (!empty($import->seller_name)) { + $body .= $langs->trans('Supplier').': '.$import->seller_name."\n"; + } + if (!empty($filename)) { + $body .= $langs->trans('File').': '.$filename."\n"; + } + + $body .= "\n"; + $body .= $langs->trans('ErrorMessage').":\n"; + $body .= $errorMessage."\n"; + + if ($import->id > 0) { + $body .= "\n"; + $body .= $langs->trans('NotifyLinkToImport').': '.dol_buildpath('/importzugferd/import.php', 2).'?action=edit&id='.$import->id; + } + + return $this->sendEmail($subject, $body); + } + + /** + * Send notification for significant price differences + * + * @param ZugferdImport $import Import object + * @param array $priceDiffs Array of price differences: array of ['line' => ImportLine, 'product' => Product, 'old_price' => float, 'new_price' => float, 'diff_percent' => float] + * @return int 1 if sent, 0 if not needed, -1 on error + */ + public function sendPriceDifferenceNotification($import, $priceDiffs) + { + global $conf, $langs; + + if (!$this->isEnabled() || !getDolGlobalString('IMPORTZUGFERD_NOTIFY_PRICE_DIFF')) { + return 0; + } + + if (empty($priceDiffs)) { + return 0; + } + + $langs->load('importzugferd@importzugferd'); + + $threshold = getDolGlobalInt('IMPORTZUGFERD_PRICE_DIFF_THRESHOLD', 10); + $subject = $langs->trans('NotifySubjectPriceDiff', $import->invoice_number, count($priceDiffs)); + + $body = $langs->trans('NotifyBodyPriceDiff', $import->invoice_number, $import->seller_name, $threshold); + $body .= "\n\n"; + $body .= $langs->trans('InvoiceNumber').': '.$import->invoice_number."\n"; + $body .= $langs->trans('Supplier').': '.$import->seller_name."\n"; + $body .= $langs->trans('InvoiceDate').': '.dol_print_date($import->invoice_date, 'day')."\n"; + $body .= "\n"; + + // Table header + $body .= str_pad($langs->trans('Product'), 40)." | "; + $body .= str_pad($langs->trans('OldPrice'), 12)." | "; + $body .= str_pad($langs->trans('NewPrice'), 12)." | "; + $body .= str_pad($langs->trans('Difference'), 10)."\n"; + $body .= str_repeat('-', 80)."\n"; + + // List products with price differences + foreach ($priceDiffs as $diff) { + $productName = $diff['product']->ref.' - '.$diff['product']->label; + if (strlen($productName) > 38) { + $productName = substr($productName, 0, 35).'...'; + } + + $oldPrice = price($diff['old_price']).' '.$import->currency; + $newPrice = price($diff['new_price']).' '.$import->currency; + $diffPercent = ($diff['diff_percent'] > 0 ? '+' : '').number_format($diff['diff_percent'], 1).'%'; + + $body .= str_pad($productName, 40)." | "; + $body .= str_pad($oldPrice, 12)." | "; + $body .= str_pad($newPrice, 12)." | "; + $body .= str_pad($diffPercent, 10)."\n"; + } + + $body .= "\n"; + $body .= $langs->trans('NotifyLinkToImport').': '.dol_buildpath('/importzugferd/import.php', 2).'?action=edit&id='.$import->id; + + return $this->sendEmail($subject, $body); + } + + /** + * Check for price differences and send notification if needed + * + * @param ZugferdImport $import Import object + * @param array $lines Import lines with fk_product set + * @return int 1 if notification sent, 0 if not needed, -1 on error + */ + public function checkAndNotifyPriceDifferences($import, $lines) + { + global $conf; + + if (!$this->isEnabled() || !getDolGlobalString('IMPORTZUGFERD_NOTIFY_PRICE_DIFF')) { + return 0; + } + + $threshold = getDolGlobalInt('IMPORTZUGFERD_PRICE_DIFF_THRESHOLD', 10); + $priceDiffs = array(); + + require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php'; + require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.product.class.php'; + + foreach ($lines as $line) { + if ($line->fk_product <= 0) { + continue; + } + + // Get current supplier price + $productFourn = new ProductFournisseur($this->db); + $result = $productFourn->find_min_price_product_fournisseur($line->fk_product, 1, $import->fk_soc); + + if ($result > 0 && $productFourn->fourn_price > 0) { + $oldPrice = $productFourn->fourn_price; + $newPrice = $line->unit_price; + + // Calculate percentage difference + $diffPercent = (($newPrice - $oldPrice) / $oldPrice) * 100; + + if (abs($diffPercent) >= $threshold) { + $product = new Product($this->db); + $product->fetch($line->fk_product); + + $priceDiffs[] = array( + 'line' => $line, + 'product' => $product, + 'old_price' => $oldPrice, + 'new_price' => $newPrice, + 'diff_percent' => $diffPercent + ); + } + } + } + + if (!empty($priceDiffs)) { + return $this->sendPriceDifferenceNotification($import, $priceDiffs); + } + + return 0; + } + + /** + * Send test notification email + * + * @return int 1 if sent, -1 on error + */ + public function sendTestNotification() + { + global $conf, $langs; + + if (!$this->isEnabled()) { + $this->error = $langs->trans('NotificationsNotEnabled'); + return -1; + } + + $langs->load('importzugferd@importzugferd'); + + $subject = $langs->trans('NotifySubjectTest'); + + $body = $langs->trans('NotifyBodyTest'); + $body .= "\n\n"; + $body .= $langs->trans('NotifyTestInfo')."\n\n"; + + // Show current notification settings + $body .= $langs->trans('CurrentSettings').":\n"; + $body .= "- ".$langs->trans('NotifyEmail').": ".$this->getNotifyEmail()."\n"; + $body .= "- ".$langs->trans('IMPORTZUGFERD_NOTIFY_MANUAL').": ".(getDolGlobalString('IMPORTZUGFERD_NOTIFY_MANUAL') ? $langs->trans('Yes') : $langs->trans('No'))."\n"; + $body .= "- ".$langs->trans('IMPORTZUGFERD_NOTIFY_ERROR').": ".(getDolGlobalString('IMPORTZUGFERD_NOTIFY_ERROR') ? $langs->trans('Yes') : $langs->trans('No'))."\n"; + $body .= "- ".$langs->trans('IMPORTZUGFERD_NOTIFY_PRICE_DIFF').": ".(getDolGlobalString('IMPORTZUGFERD_NOTIFY_PRICE_DIFF') ? $langs->trans('Yes') : $langs->trans('No'))."\n"; + + if (getDolGlobalString('IMPORTZUGFERD_NOTIFY_PRICE_DIFF')) { + $body .= "- ".$langs->trans('IMPORTZUGFERD_PRICE_DIFF_THRESHOLD').": ".getDolGlobalInt('IMPORTZUGFERD_PRICE_DIFF_THRESHOLD', 10)."%\n"; + } + + $body .= "\n"; + $body .= $langs->trans('NotifyTestSuccess'); + + return $this->sendEmail($subject, $body); + } + + /** + * Send email using Dolibarr's mail system + * + * @param string $subject Email subject + * @param string $body Email body (plain text) + * @return int 1 if sent, -1 on error + */ + protected function sendEmail($subject, $body) + { + global $conf, $langs, $mysoc; + + $to = $this->getNotifyEmail(); + if (empty($to)) { + $this->error = 'No notification email configured'; + return -1; + } + + // Get sender + $from = getDolGlobalString('MAIN_MAIL_EMAIL_FROM'); + if (empty($from)) { + $from = $mysoc->email; + } + if (empty($from)) { + $this->error = 'No sender email configured'; + return -1; + } + + // Add module prefix to subject + $subject = '[ZUGFeRD Import] '.$subject; + + // Create mail object + $mailfile = new CMailFile( + $subject, + $to, + $from, + $body, + array(), // files + array(), // mimefiles + array(), // ccfiles + '', // cc + '', // bcc + 0, // deliveryreceipt + 0, // msgishtml + '', // errors_to + '', // css + '', // trackid + '', // moreinheader + 'standard', // sendcontext + '' // replyto + ); + + $result = $mailfile->sendfile(); + + if ($result) { + dol_syslog("ImportNotification: Email sent to ".$to." - Subject: ".$subject, LOG_INFO); + return 1; + } else { + $this->error = $mailfile->error; + $this->errors = $mailfile->errors; + dol_syslog("ImportNotification: Failed to send email - ".$this->error, LOG_ERR); + return -1; + } + } +} diff --git a/class/zugferdimport.class.php b/class/zugferdimport.class.php index cd83fd3..344bcc5 100644 --- a/class/zugferdimport.class.php +++ b/class/zugferdimport.class.php @@ -362,25 +362,27 @@ class ZugferdImport extends CommonObject $sql = "UPDATE " . MAIN_DB_PREFIX . $this->table_element . " SET"; $sql .= " ref = '" . $this->db->escape($this->ref) . "',"; $sql .= " invoice_number = '" . $this->db->escape($this->invoice_number) . "',"; - $sql .= " invoice_date = '" . $this->db->escape($this->invoice_date) . "',"; + $sql .= " invoice_date = " . ($this->invoice_date ? "'" . $this->db->idate($this->invoice_date) . "'" : "null") . ","; $sql .= " seller_name = '" . $this->db->escape($this->seller_name) . "',"; $sql .= " seller_vat = '" . $this->db->escape($this->seller_vat) . "',"; $sql .= " buyer_reference = '" . $this->db->escape($this->buyer_reference) . "',"; $sql .= " total_ht = " . price2num($this->total_ht) . ","; $sql .= " total_ttc = " . price2num($this->total_ttc) . ","; $sql .= " currency = '" . $this->db->escape($this->currency) . "',"; - $sql .= " fk_soc = " . ($this->fk_soc > 0 ? $this->fk_soc : "null") . ","; - $sql .= " fk_facture_fourn = " . ($this->fk_facture_fourn > 0 ? $this->fk_facture_fourn : "null") . ","; + $sql .= " fk_soc = " . ($this->fk_soc > 0 ? (int) $this->fk_soc : "null") . ","; + $sql .= " fk_facture_fourn = " . ($this->fk_facture_fourn > 0 ? (int) $this->fk_facture_fourn : "null") . ","; $sql .= " status = " . (int) $this->status . ","; - $sql .= " error_message = '" . $this->db->escape($this->error_message) . "',"; + $sql .= " date_import = " . ($this->date_import ? "'" . $this->db->idate($this->date_import) . "'" : "null") . ","; + $sql .= " error_message = " . ($this->error_message ? "'" . $this->db->escape($this->error_message) . "'" : "null") . ","; $sql .= " fk_user_modif = " . (int) $this->fk_user_modif; $sql .= " WHERE rowid = " . (int) $this->id; - dol_syslog(get_class($this) . "::update", LOG_DEBUG); + dol_syslog(get_class($this) . "::update sql=" . $sql, LOG_DEBUG); $resql = $this->db->query($sql); if (!$resql) { $this->error = $this->db->lasterror(); + dol_syslog(get_class($this) . "::update error=" . $this->error, LOG_ERR); return -1; } @@ -514,6 +516,211 @@ class ZugferdImport extends CommonObject return $xml; } + /** + * Import a ZUGFeRD invoice from PDF file + * This is the main entry point for batch/automated imports + * + * @param User $user User performing import + * @param string $file_path Path to PDF file + * @param bool $auto_create_invoice Whether to auto-create supplier invoice + * @return int >0 (import ID) if OK, -2 if duplicate, <0 if error + */ + public function importFromFile($user, $file_path, $auto_create_invoice = false) + { + global $conf, $langs; + + $langs->load('importzugferd@importzugferd'); + + dol_include_once('/importzugferd/class/zugferdparser.class.php'); + dol_include_once('/importzugferd/class/productmapping.class.php'); + dol_include_once('/importzugferd/class/importline.class.php'); + dol_include_once('/importzugferd/class/importnotification.class.php'); + + // Parse PDF + $parser = new ZugferdParser($this->db); + $result = $parser->extractFromPdf($file_path); + if ($result < 0) { + $this->error = $parser->error; + return -1; + } + + $result = $parser->parse(); + if ($result < 0) { + $this->error = $parser->error; + return -1; + } + + $invoice_data = $parser->getInvoiceData(); + + // Check for duplicates + $file_hash = $parser->getFileHash($file_path); + if ($this->isDuplicate($file_hash)) { + $this->error = $langs->trans('ErrorDuplicateInvoice'); + return -2; // Duplicate + } + + // Find supplier + $supplier_id = $this->findSupplier($invoice_data); + + // Set import record data + $this->invoice_number = $invoice_data['invoice_number']; + $this->invoice_date = $invoice_data['invoice_date']; + $this->seller_name = $invoice_data['seller']['name']; + $this->seller_vat = $invoice_data['seller']['vat_id']; + $this->buyer_reference = $invoice_data['buyer']['reference'] ?: $invoice_data['buyer']['id']; + $this->total_ht = $invoice_data['totals']['net']; + $this->total_ttc = $invoice_data['totals']['gross']; + $this->currency = $invoice_data['totals']['currency'] ?: 'EUR'; + $this->fk_soc = $supplier_id; + $this->xml_content = $parser->getXmlContent(); + $this->pdf_filename = basename($file_path); + $this->file_hash = $file_hash; + $this->date_import = dol_now(); + + // Create import record + $import_id = $this->create($user); + if ($import_id < 0) { + return -3; + } + + // Process and store line items + $mapping = new ProductMapping($this->db); + $unmatched_count = 0; + $matched_count = 0; + $total_lines = count($invoice_data['lines']); + + foreach ($invoice_data['lines'] as $line_data) { + $line = new ImportLine($this->db); + $line->fk_import = $import_id; + $line->line_id = $line_data['line_id']; + $line->supplier_ref = $line_data['product']['seller_id']; + $line->product_name = $line_data['product']['name']; + $line->description = $line_data['product']['description']; + $line->quantity = $line_data['quantity']; + $line->unit_code = $line_data['unit_code']; + $line->unit_price = $line_data['unit_price']; + $line->unit_price_raw = isset($line_data['unit_price_raw']) ? $line_data['unit_price_raw'] : $line_data['unit_price']; + $line->basis_quantity = isset($line_data['basis_quantity']) ? $line_data['basis_quantity'] : 1; + $line->basis_quantity_unit = isset($line_data['basis_quantity_unit']) ? $line_data['basis_quantity_unit'] : ''; + $line->line_total = $line_data['line_total']; + $line->tax_percent = $line_data['tax_percent']; + $line->ean = $line_data['product']['global_id']; + + // Try to match product + $fk_product = 0; + $match_method = ''; + + if ($supplier_id > 0) { + $match = $mapping->findProduct($supplier_id, $line_data['product']); + if (!empty($match) && $match['fk_product'] > 0) { + $fk_product = $match['fk_product']; + $match_method = $match['method']; + } + } + + $line->fk_product = $fk_product; + $line->match_method = $match_method; + + if ($fk_product == 0) { + $unmatched_count++; + } else { + $matched_count++; + } + + $line->create($user); + } + + // Determine status based on matching results + // STATUS_IMPORTED only if: supplier found, has lines, and ALL lines have matched products + if ($supplier_id == 0 || $total_lines == 0 || $unmatched_count > 0 || $matched_count == 0) { + // Missing supplier, no lines, unmatched products, or no matches at all - needs manual intervention + $this->status = self::STATUS_PENDING; + } else { + // All lines matched + $this->status = self::STATUS_IMPORTED; + } + + // Copy PDF to documents + $destdir = $conf->importzugferd->dir_output . '/imports'; + if (!is_dir($destdir)) { + dol_mkdir($destdir); + } + $destfile = $destdir . '/' . $this->ref . '_' . basename($file_path); + copy($file_path, $destfile); + + // Update status + $this->update($user); + + // Send notification if manual intervention required + if ($this->status == self::STATUS_PENDING && class_exists('ImportNotification')) { + $notification = new ImportNotification($this->db); + $importLine = new ImportLine($this->db); + $storedLines = $importLine->fetchAllByImport($this->id); + $notification->sendManualInterventionNotification($this, $storedLines); + } + + return $import_id; + } + + /** + * Find supplier by buyer reference or VAT ID + * + * @param array $invoice_data Parsed invoice data + * @return int Supplier ID or 0 + */ + protected function findSupplier($invoice_data) + { + global $conf; + + $buyer_ref = $invoice_data['buyer']['reference'] ?: $invoice_data['buyer']['id']; + $seller_vat = $invoice_data['seller']['vat_id']; + $seller_name = $invoice_data['seller']['name']; + + // 1. Search by buyer reference in extrafield + if (!empty($buyer_ref)) { + $sql = "SELECT fk_object FROM " . MAIN_DB_PREFIX . "societe_extrafields"; + $sql .= " WHERE supplier_customer_number = '" . $this->db->escape($buyer_ref) . "'"; + + $resql = $this->db->query($sql); + if ($resql && $this->db->num_rows($resql) > 0) { + $obj = $this->db->fetch_object($resql); + return (int) $obj->fk_object; + } + } + + // 2. Search by VAT ID + if (!empty($seller_vat)) { + $sql = "SELECT rowid FROM " . MAIN_DB_PREFIX . "societe"; + $sql .= " WHERE tva_intra = '" . $this->db->escape($seller_vat) . "'"; + $sql .= " AND fournisseur = 1"; + $sql .= " AND entity IN (" . getEntity('societe') . ")"; + + $resql = $this->db->query($sql); + if ($resql && $this->db->num_rows($resql) > 0) { + $obj = $this->db->fetch_object($resql); + return (int) $obj->rowid; + } + } + + // 3. Search by name (fuzzy) + if (!empty($seller_name)) { + $sql = "SELECT rowid FROM " . MAIN_DB_PREFIX . "societe"; + $sql .= " WHERE (nom LIKE '" . $this->db->escape($seller_name) . "%'"; + $sql .= " OR nom LIKE '%" . $this->db->escape(substr($seller_name, 0, 20)) . "%')"; + $sql .= " AND fournisseur = 1"; + $sql .= " AND entity IN (" . getEntity('societe') . ")"; + $sql .= " LIMIT 1"; + + $resql = $this->db->query($sql); + if ($resql && $this->db->num_rows($resql) > 0) { + $obj = $this->db->fetch_object($resql); + return (int) $obj->rowid; + } + } + + return 0; + } + /** * Get status label * diff --git a/core/modules/modImportZugferd.class.php b/core/modules/modImportZugferd.class.php index e7d14b7..08895fa 100755 --- a/core/modules/modImportZugferd.class.php +++ b/core/modules/modImportZugferd.class.php @@ -76,7 +76,7 @@ class modImportZugferd extends DolibarrModules $this->editor_squarred_logo = ''; // Must be image filename into the module/img directory followed with @modulename. Example: 'myimage.png@importzugferd' // Possible values for version are: 'development', 'experimental', 'dolibarr', 'dolibarr_deprecated', 'experimental_deprecated' or a version string like 'x.y.z' - $this->version = '1.1'; + $this->version = '2.0'; // Url to the file with your last numberversion of this module //$this->url_last_version = 'http://www.example.com/versionmodule.txt'; @@ -136,7 +136,7 @@ class modImportZugferd extends DolibarrModules ); // Data directories to create when module is enabled. - $this->dirs = array("/importzugferd/temp", "/importzugferd/imports"); + $this->dirs = array("/importzugferd/temp", "/importzugferd/imports", "/importzugferd/datanorm"); // Config pages. Put here list of php page, stored into importzugferd/admin directory, to use to setup module. $this->config_page_url = array("setup.php@importzugferd"); @@ -268,16 +268,16 @@ class modImportZugferd extends DolibarrModules /* BEGIN MODULEBUILDER CRON */ $this->cronjobs = array( 0 => array( - 'label' => 'ImportZugferdFromMailbox', + 'label' => 'ImportZugferdScheduled', 'jobtype' => 'method', 'class' => '/importzugferd/class/cron_importzugferd.class.php', 'objectname' => 'CronImportZugferd', - 'method' => 'fetchFromMailbox', + 'method' => 'runScheduledImport', 'parameters' => '', - 'comment' => 'Fetch ZUGFeRD invoices from configured mailbox', + 'comment' => 'Scheduled import from folder and mailbox (frequency controlled by module settings)', 'frequency' => 15, 'unitfrequency' => 60, - 'status' => 0, + 'status' => 1, 'test' => 'isModEnabled("importzugferd")', 'priority' => 50, ), @@ -316,6 +316,12 @@ class modImportZugferd extends DolibarrModules $this->rights[$r][5] = 'write'; $r++; + $this->rights[$r][0] = $this->numero . sprintf("%02d", 5); + $this->rights[$r][1] = 'Manage Datanorm catalogs'; + $this->rights[$r][4] = 'datanorm'; + $this->rights[$r][5] = 'write'; + $r++; + // Main menu entries to add $this->menu = array(); @@ -407,6 +413,23 @@ class modImportZugferd extends DolibarrModules 'user' => 2, ); + // Left menu: Datanorm Catalogs + $this->menu[$r++] = array( + 'fk_menu' => 'fk_mainmenu=importzugferd', + 'type' => 'left', + 'titre' => 'DatanormCatalogs', + 'prefix' => img_picto('', 'fa-database', 'class="pictofixedwidth valignmiddle paddingright"'), + 'mainmenu' => 'importzugferd', + 'leftmenu' => 'zugferd_datanorm', + 'url' => '/importzugferd/datanorm.php', + 'langs' => 'importzugferd@importzugferd', + 'position' => 1000 + $r, + 'enabled' => 'isModEnabled("importzugferd")', + 'perms' => '$user->hasRight("importzugferd", "datanorm", "write")', + 'target' => '', + 'user' => 2, + ); + // Exports profiles provided by this module $r = 0; diff --git a/datanorm.php b/datanorm.php new file mode 100644 index 0000000..4b47224 --- /dev/null +++ b/datanorm.php @@ -0,0 +1,309 @@ + + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + */ + +/** + * \file datanorm.php + * \ingroup importzugferd + * \brief Datanorm catalog management page + */ + +// Load Dolibarr environment +$res = 0; +if (!$res && !empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) { + $res = @include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php"; +} +$tmp = empty($_SERVER['SCRIPT_FILENAME']) ? '' : $_SERVER['SCRIPT_FILENAME']; +$tmp2 = realpath(__FILE__); +$i = strlen($tmp) - 1; +$j = strlen($tmp2) - 1; +while ($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i] == $tmp2[$j]) { + $i--; + $j--; +} +if (!$res && $i > 0 && file_exists(substr($tmp, 0, ($i + 1))."/main.inc.php")) { + $res = @include substr($tmp, 0, ($i + 1))."/main.inc.php"; +} +if (!$res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php")) { + $res = @include dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php"; +} +if (!$res && file_exists("../main.inc.php")) { + $res = @include "../main.inc.php"; +} +if (!$res && file_exists("../../main.inc.php")) { + $res = @include "../../main.inc.php"; +} +if (!$res) { + die("Include of main fails"); +} + +require_once DOL_DOCUMENT_ROOT.'/core/class/html.form.class.php'; +require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; +require_once './class/datanorm.class.php'; +require_once './class/datanormparser.class.php'; +require_once './lib/importzugferd.lib.php'; + +$langs->loadLangs(array('importzugferd@importzugferd', 'companies', 'products')); + +// Access control +if (!$user->hasRight('importzugferd', 'datanorm', 'write')) { + accessforbidden(); +} + +// Parameters +$action = GETPOST('action', 'aZ09'); +$confirm = GETPOST('confirm', 'alpha'); +$fk_soc = GETPOSTINT('fk_soc'); +$id = GETPOSTINT('id'); + +// Objects +$form = new Form($db); +$datanorm = new Datanorm($db); + +/* + * Actions + */ + +// Upload Datanorm file +if ($action == 'upload' && !empty($_FILES['datanormfile']['name']) && $fk_soc > 0) { + $error = 0; + + // Check supplier exists and is a supplier + $supplier = new Societe($db); + if ($supplier->fetch($fk_soc) <= 0 || $supplier->fournisseur != 1) { + setEventMessages($langs->trans('ErrorSupplierNotFound'), null, 'errors'); + $error++; + } + + if (!$error) { + // Create upload directory + $upload_dir = $conf->importzugferd->dir_output.'/datanorm/'.$fk_soc; + if (!dol_is_dir($upload_dir)) { + dol_mkdir($upload_dir); + } + + // Handle file upload + $uploaded_files = array(); + + // Check if multiple files or single file + if (is_array($_FILES['datanormfile']['name'])) { + $file_count = count($_FILES['datanormfile']['name']); + for ($i = 0; $i < $file_count; $i++) { + if ($_FILES['datanormfile']['error'][$i] == UPLOAD_ERR_OK) { + $tmp_name = $_FILES['datanormfile']['tmp_name'][$i]; + $name = $_FILES['datanormfile']['name'][$i]; + $dest = $upload_dir.'/'.$name; + + if (dol_move_uploaded_file($tmp_name, $dest, 1) > 0) { + $uploaded_files[] = $dest; + } + } + } + } else { + if ($_FILES['datanormfile']['error'] == UPLOAD_ERR_OK) { + $tmp_name = $_FILES['datanormfile']['tmp_name']; + $name = $_FILES['datanormfile']['name']; + $dest = $upload_dir.'/'.$name; + + if (dol_move_uploaded_file($tmp_name, $dest, 1) > 0) { + $uploaded_files[] = $dest; + } + } + } + + if (empty($uploaded_files)) { + setEventMessages($langs->trans('ErrorUploadFailed'), null, 'errors'); + $error++; + } + } + + if (!$error && !empty($uploaded_files)) { + // Use streaming import for large files (directory-based) + $delete_existing = GETPOST('delete_existing', 'int') ? true : false; + $imported = $datanorm->importFromDirectoryStreaming($user, $fk_soc, $upload_dir, $delete_existing); + + if ($imported > 0) { + setEventMessages($langs->trans('DatanormImportSuccess', $imported), null, 'mesgs'); + } elseif ($imported == 0) { + setEventMessages($langs->trans('DatanormNoArticlesFound'), null, 'warnings'); + } else { + setEventMessages($langs->trans('DatanormImportFailed').': '.$datanorm->error, null, 'errors'); + } + } +} + +// Delete all articles for supplier +if ($action == 'delete' && $confirm == 'yes' && $fk_soc > 0) { + $result = $datanorm->deleteAllBySupplier($user, $fk_soc); + if ($result >= 0) { + setEventMessages($langs->trans('DatanormDeleted', $result), null, 'mesgs'); + } else { + setEventMessages($langs->trans('DatanormDeleteFailed').': '.$datanorm->error, null, 'errors'); + } + $action = ''; +} + +/* + * View + */ + +$title = $langs->trans('DatanormCatalogs'); +llxHeader('', $title, '', '', 0, 0, '', '', '', 'mod-importzugferd page-datanorm'); + +print load_fiche_titre($title, '', 'fa-database'); + +// Confirmation dialog for delete +if ($action == 'delete' && $fk_soc > 0) { + $supplier = new Societe($db); + $supplier->fetch($fk_soc); + + $formconfirm = $form->formconfirm( + $_SERVER["PHP_SELF"].'?fk_soc='.$fk_soc, + $langs->trans('DeleteDatanorm'), + $langs->trans('ConfirmDeleteDatanorm', $supplier->name), + 'delete', + '', + 0, + 1 + ); + print $formconfirm; +} + +// Upload form +print '
'; + +print '
'; +print ''; +print ''; +print ''; +print ''; + +print ''; +print ''; +print ''; +print '
'.$langs->trans('UploadDatanorm').'
'; + +print '
'; +print ''; +print ''; + +print ''; + +// Supplier selection +print ''; +print ''; +print ''; +print ''; + +// File upload +print ''; +print ''; +print ''; +print ''; + +// Delete existing option +print ''; +print ''; +print ''; +print ''; + +// Submit button +print ''; +print ''; +print ''; +print ''; + +print '
'.$langs->trans('Supplier').' *'; +print $form->select_company($fk_soc, 'fk_soc', 's.fournisseur = 1', 1, 0, 0, array(), 0, 'minwidth300'); +print '
'.$langs->trans('DatanormFiles').' *'; +print ''; +print '
'.$langs->trans('DatanormFileHelp').''; +print '
'.$langs->trans('DeleteExisting').''; +print ''; +print ' '.$langs->trans('DeleteExistingHelp').''; +print '
'; +print ''; +print '
'; +print '
'; + +print '
'; +print '
'; + +print '
'; + +// List of suppliers with Datanorm data +$suppliers = $datanorm->getSuppliersWithData(); + +print '
'; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; + +if (!empty($suppliers)) { + foreach ($suppliers as $sup) { + print ''; + + // Supplier name with link + print ''; + + // Article count + print ''; + + // Last import + print ''; + + // Actions + print ''; + print ''; + } +} else { + print ''; + print ''; + print ''; +} + +print '
'.$langs->trans('Supplier').''.$langs->trans('ArticleCount').''.$langs->trans('LastImport').''.$langs->trans('Actions').'
'; + $supplier = new Societe($db); + $supplier->fetch($sup['fk_soc']); + print $supplier->getNomUrl(1, 'supplier'); + print ''; + print ''.$sup['article_count'].''; + print ''; + print dol_print_date($sup['last_import'], 'dayhour'); + print ''; + + // View articles button + print ''; + print img_picto($langs->trans('ViewArticles'), 'list'); + print ''; + + // Delete button + print ''; + print img_picto($langs->trans('Delete'), 'delete'); + print ''; + + print '
'.$langs->trans('NoDatanormData').'
'; +print '
'; + +print '
'; + +// Settings info +print '
'; +print '
'; +print ''; +print $langs->trans('DatanormSettingsInfo'); +print ' '.$langs->trans('Settings').''; +print '
'; + +llxFooter(); +$db->close(); diff --git a/datanorm_list.php b/datanorm_list.php new file mode 100644 index 0000000..37ff8a5 --- /dev/null +++ b/datanorm_list.php @@ -0,0 +1,258 @@ + + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + */ + +/** + * \file datanorm_list.php + * \ingroup importzugferd + * \brief List of Datanorm articles for a supplier + */ + +// Load Dolibarr environment +$res = 0; +if (!$res && !empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) { + $res = @include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php"; +} +$tmp = empty($_SERVER['SCRIPT_FILENAME']) ? '' : $_SERVER['SCRIPT_FILENAME']; +$tmp2 = realpath(__FILE__); +$i = strlen($tmp) - 1; +$j = strlen($tmp2) - 1; +while ($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i] == $tmp2[$j]) { + $i--; + $j--; +} +if (!$res && $i > 0 && file_exists(substr($tmp, 0, ($i + 1))."/main.inc.php")) { + $res = @include substr($tmp, 0, ($i + 1))."/main.inc.php"; +} +if (!$res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php")) { + $res = @include dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php"; +} +if (!$res && file_exists("../main.inc.php")) { + $res = @include "../main.inc.php"; +} +if (!$res && file_exists("../../main.inc.php")) { + $res = @include "../../main.inc.php"; +} +if (!$res) { + die("Include of main fails"); +} + +require_once DOL_DOCUMENT_ROOT.'/core/class/html.form.class.php'; +require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php'; +require_once './class/datanorm.class.php'; +require_once './lib/importzugferd.lib.php'; + +$langs->loadLangs(array('importzugferd@importzugferd', 'companies', 'products')); + +// Access control +if (!$user->hasRight('importzugferd', 'datanorm', 'write')) { + accessforbidden(); +} + +// Parameters +$fk_soc = GETPOSTINT('fk_soc'); +$search_article = GETPOST('search_article', 'alpha'); +$search_text = GETPOST('search_text', 'alpha'); +$limit = GETPOSTINT('limit') ?: $conf->liste_limit; +$page = GETPOSTINT('page'); +$offset = $limit * $page; +$sortfield = GETPOST('sortfield', 'aZ09comma'); +$sortorder = GETPOST('sortorder', 'aZ09comma'); + +if (empty($sortfield)) { + $sortfield = 'article_number'; +} +if (empty($sortorder)) { + $sortorder = 'ASC'; +} + +// Check supplier +if ($fk_soc <= 0) { + header('Location: datanorm.php'); + exit; +} + +$supplier = new Societe($db); +if ($supplier->fetch($fk_soc) <= 0) { + header('Location: datanorm.php'); + exit; +} + +// Objects +$form = new Form($db); +$datanorm = new Datanorm($db); + +/* + * View + */ + +$title = $langs->trans('DatanormArticles').' - '.$supplier->name; +llxHeader('', $title, '', '', 0, 0, '', '', '', 'mod-importzugferd page-datanorm-list'); + +// Build SQL +$sql = "SELECT rowid, article_number, short_text1, short_text2, ean,"; +$sql .= " manufacturer_ref, manufacturer_name, unit_code, price, price_unit,"; +$sql .= " discount_group, product_group"; +$sql .= " FROM ".MAIN_DB_PREFIX."importzugferd_datanorm"; +$sql .= " WHERE fk_soc = ".(int)$fk_soc; +$sql .= " AND entity = ".(int)$conf->entity; +$sql .= " AND active = 1"; + +// Search filters +if (!empty($search_article)) { + $sql .= " AND (article_number LIKE '%".$db->escape($search_article)."%'"; + $sql .= " OR ean LIKE '%".$db->escape($search_article)."%'"; + $sql .= " OR manufacturer_ref LIKE '%".$db->escape($search_article)."%')"; +} +if (!empty($search_text)) { + $sql .= " AND (short_text1 LIKE '%".$db->escape($search_text)."%'"; + $sql .= " OR short_text2 LIKE '%".$db->escape($search_text)."%')"; +} + +// Count total +$sqlcount = preg_replace('/^SELECT .* FROM/', 'SELECT COUNT(*) as nb FROM', $sql); +$resqlcount = $db->query($sqlcount); +$total = 0; +if ($resqlcount) { + $objcount = $db->fetch_object($resqlcount); + $total = $objcount->nb; +} + +// Sort and limit +$sql .= $db->order($sortfield, $sortorder); +$sql .= $db->plimit($limit + 1, $offset); + +// Header with back link +$linkback = ''.$langs->trans("Back").''; +print load_fiche_titre($title, $linkback, 'fa-database'); + +// Search form +print '
'; +print ''; + +print '
'; +print ''; + +// Header row +print ''; +print_liste_field_titre('ArticleNumber', $_SERVER['PHP_SELF'], 'article_number', '', '&fk_soc='.$fk_soc, '', $sortfield, $sortorder); +print_liste_field_titre('Description', $_SERVER['PHP_SELF'], 'short_text1', '', '&fk_soc='.$fk_soc, '', $sortfield, $sortorder); +print_liste_field_titre('EAN', $_SERVER['PHP_SELF'], 'ean', '', '&fk_soc='.$fk_soc, '', $sortfield, $sortorder); +print_liste_field_titre('Manufacturer', $_SERVER['PHP_SELF'], 'manufacturer_name', '', '&fk_soc='.$fk_soc, '', $sortfield, $sortorder); +print_liste_field_titre('Price', $_SERVER['PHP_SELF'], 'price', '', '&fk_soc='.$fk_soc, 'class="right"', $sortfield, $sortorder); +print_liste_field_titre('Unit', $_SERVER['PHP_SELF'], 'unit_code', '', '&fk_soc='.$fk_soc, 'class="center"', $sortfield, $sortorder); +print ''; +print ''; + +// Search row +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; + +// Data rows +$resql = $db->query($sql); +if ($resql) { + $num = $db->num_rows($resql); + $i = 0; + + while ($i < min($num, $limit)) { + $obj = $db->fetch_object($resql); + + print ''; + + // Article number + print ''; + + // Description + print ''; + + // EAN + print ''; + + // Manufacturer + print ''; + + // Price + print ''; + + // Unit + print ''; + + // Actions placeholder + print ''; + + print ''; + + $i++; + } + + if ($num == 0) { + print ''; + print ''; + print ''; + } + + $db->free($resql); +} else { + dol_print_error($db); +} + +print '
'; +print ''; +print ' '.$langs->trans('Reset').''; +print '
'; + print ''.dol_escape_htmltag($obj->article_number).''; + print ''; + print dol_escape_htmltag($obj->short_text1); + if (!empty($obj->short_text2)) { + print '
'.dol_escape_htmltag($obj->short_text2).''; + } + print '
'; + if (!empty($obj->ean)) { + print ''; + print dol_escape_htmltag($obj->ean); + } + print ''; + if (!empty($obj->manufacturer_name)) { + print dol_escape_htmltag($obj->manufacturer_name); + } + if (!empty($obj->manufacturer_ref)) { + print '
'.dol_escape_htmltag($obj->manufacturer_ref).''; + } + print '
'; + $price = $obj->price; + if ($obj->price_unit > 1) { + print price($price).' / '.$obj->price_unit; + } else { + print price($price); + } + print ''; + print dol_escape_htmltag($obj->unit_code); + print ''; + print '
'.$langs->trans('NoRecordsFound').'
'; +print '
'; + +print '
'; + +// Pagination +print_barre_liste('', $page, $_SERVER['PHP_SELF'], '&fk_soc='.$fk_soc.'&search_article='.urlencode($search_article).'&search_text='.urlencode($search_text), $sortfield, $sortorder, '', $num, $total, '', 0, '', '', $limit); + +// Stats +print '
'; +print '
'; +print $langs->trans('TotalArticles').': '.$total.''; +print '
'; + +llxFooter(); +$db->close(); diff --git a/datanorm_update.php b/datanorm_update.php new file mode 100644 index 0000000..387d513 --- /dev/null +++ b/datanorm_update.php @@ -0,0 +1,868 @@ + 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i] == $tmp2[$j]) { + $i--; + $j--; +} +if (!$res && $i > 0 && file_exists(substr($tmp, 0, ($i + 1))."/main.inc.php")) { + $res = @include substr($tmp, 0, ($i + 1))."/main.inc.php"; +} +if (!$res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php")) { + $res = @include dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php"; +} +if (!$res && file_exists("../main.inc.php")) { + $res = @include "../main.inc.php"; +} +if (!$res && file_exists("../../main.inc.php")) { + $res = @include "../../main.inc.php"; +} +if (!$res && file_exists("../../../main.inc.php")) { + $res = @include "../../../main.inc.php"; +} +if (!$res) { + die("Include of main fails"); +} + +require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'; +require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php'; +require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.product.class.php'; +dol_include_once('/importzugferd/class/datanorm.class.php'); +dol_include_once('/importzugferd/lib/importzugferd.lib.php'); + +// Load translations +$langs->loadLangs(array("importzugferd@importzugferd", "products", "bills")); + +// Security check +if (!$user->hasRight('produit', 'creer')) { + accessforbidden(); +} + +// Get parameters +$action = GETPOST('action', 'aZ09'); +$fk_soc = GETPOSTINT('fk_soc'); +$search_mode = GETPOST('search_mode', 'alpha') ?: 'supplier'; // supplier, manual +$search_term = GETPOST('search_term', 'alphanohtml'); +$search_by_name = GETPOSTINT('search_by_name'); +$search_by_ean = GETPOSTINT('search_by_ean'); +$search_by_ref = GETPOSTINT('search_by_ref'); + +// Filters for what to update +$filter_price = GETPOSTISSET('filter_price') ? GETPOSTINT('filter_price') : 1; +$filter_description = GETPOSTISSET('filter_description') ? GETPOSTINT('filter_description') : 1; +$filter_label = GETPOSTISSET('filter_label') ? GETPOSTINT('filter_label') : 0; + +// Only show differences +$only_differences = GETPOSTINT('only_differences'); + +// Initialize objects +$form = new Form($db); +$formcompany = new FormCompany($db); +$datanorm = new Datanorm($db); + +// Store pending changes in session +if (!isset($_SESSION['datanorm_pending_changes'])) { + $_SESSION['datanorm_pending_changes'] = array(); +} + +/* + * Actions + */ + +// Apply single row update +if ($action == 'apply_single' && GETPOSTINT('product_id') && GETPOST('datanorm_key', 'alphanohtml')) { + $product_id = GETPOSTINT('product_id'); + $datanorm_key = GETPOST('datanorm_key', 'alphanohtml'); + $apply_price = GETPOSTINT('apply_price'); + $apply_description = GETPOSTINT('apply_description'); + $apply_label = GETPOSTINT('apply_label'); + + $result = applyDatanormUpdate($db, $user, $product_id, $datanorm_key, $fk_soc, $apply_price, $apply_description, $apply_label); + + if ($result > 0) { + setEventMessages($langs->trans('ProductUpdated'), null, 'mesgs'); + } else { + setEventMessages($langs->trans('ErrorUpdatingProduct'), null, 'errors'); + } + + // Redirect to same page with same parameters + header('Location: '.$_SERVER['PHP_SELF'].'?fk_soc='.$fk_soc.'&search_mode='.$search_mode.'&search_term='.urlencode($search_term).'&filter_price='.$filter_price.'&filter_description='.$filter_description.'&filter_label='.$filter_label.'&only_differences='.$only_differences); + exit; +} + +// Add to pending changes +if ($action == 'add_pending') { + $product_id = GETPOSTINT('product_id'); + $datanorm_key = GETPOST('datanorm_key', 'alphanohtml'); + $apply_fields = GETPOST('apply_fields', 'array'); + + if ($product_id > 0 && !empty($datanorm_key)) { + $_SESSION['datanorm_pending_changes'][$product_id] = array( + 'datanorm_key' => $datanorm_key, + 'fk_soc' => $fk_soc, + 'apply_fields' => $apply_fields + ); + setEventMessages($langs->trans('AddedToPendingChanges'), null, 'mesgs'); + } +} + +// Remove from pending +if ($action == 'remove_pending') { + $product_id = GETPOSTINT('product_id'); + unset($_SESSION['datanorm_pending_changes'][$product_id]); +} + +// Clear all pending +if ($action == 'clear_pending') { + $_SESSION['datanorm_pending_changes'] = array(); + setEventMessages($langs->trans('PendingChangesCleared'), null, 'mesgs'); +} + +// Show confirmation dialog +if ($action == 'confirm_apply_all') { + // Will be handled in view section +} + +// Apply all pending changes +if ($action == 'apply_all_confirmed' && GETPOST('confirm', 'alpha') == 'yes') { + $success = 0; + $errors = 0; + + foreach ($_SESSION['datanorm_pending_changes'] as $product_id => $change) { + $apply_price = in_array('price', $change['apply_fields']) ? 1 : 0; + $apply_description = in_array('description', $change['apply_fields']) ? 1 : 0; + $apply_label = in_array('label', $change['apply_fields']) ? 1 : 0; + + $result = applyDatanormUpdate($db, $user, $product_id, $change['datanorm_key'], $change['fk_soc'], $apply_price, $apply_description, $apply_label); + + if ($result > 0) { + $success++; + } else { + $errors++; + } + } + + $_SESSION['datanorm_pending_changes'] = array(); + setEventMessages($langs->trans('DatanormMassUpdateComplete', $success, $errors), null, 'mesgs'); + + header('Location: '.$_SERVER['PHP_SELF']); + exit; +} + +/* + * View + */ + +$title = $langs->trans('DatanormMassUpdate'); +llxHeader('', $title, '', '', 0, 0, '', '', '', 'mod-importzugferd page-datanorm-update'); + +print load_fiche_titre($title, '', 'fa-sync'); + +// Check if Datanorm data exists +$sql = "SELECT COUNT(*) as cnt FROM ".MAIN_DB_PREFIX."importzugferd_datanorm"; +$resql = $db->query($sql); +$obj = $db->fetch_object($resql); +if ($obj->cnt == 0) { + print '
'.$langs->trans('NoDatanormData').'
'; + print '
'.$langs->trans('UploadDatanorm').''; + llxFooter(); + $db->close(); + exit; +} + +// Search form +print '
'; +print ''; +print ''; + +print '
'; +print '
'; +print ''; + +// Supplier selection +print ''; +print ''; +print ''; + +print ''; +print ''; +print ''; +print ''; + +// Search mode +print ''; +print ''; +print ''; +print ''; + +// Manual search term +print ''; +print ''; +print ''; +print ''; + +// Additional search options +print ''; +print ''; +print ''; +print ''; + +// Filter: What to compare/update +print ''; +print ''; +print ''; + +print ''; +print ''; +print ''; +print ''; + +// Only show differences +print ''; +print ''; +print ''; +print ''; + +print '
'.$langs->trans('SelectSupplier').'
'.$langs->trans('Supplier').''; +// Get suppliers with Datanorm data +$sql = "SELECT DISTINCT s.rowid, s.nom FROM ".MAIN_DB_PREFIX."societe s"; +$sql .= " INNER JOIN ".MAIN_DB_PREFIX."importzugferd_datanorm d ON d.fk_soc = s.rowid"; +$sql .= " WHERE s.fournisseur = 1"; +$sql .= " ORDER BY s.nom"; +$resql = $db->query($sql); +print ''; +print '
'.$langs->trans('SearchMode').''; +print ''; +print ''; +print '     '; +print ''; +print ''; +print '
'.$langs->trans('SearchTerm').''; +print ''; +print '
'.$langs->trans('AdditionalSearchOptions').''; +print ''; +print ''; +print '   '; +print ''; +print ''; +print '   '; +print ''; +print ''; +print '
'.$langs->trans('FieldsToCompare').'
'.$langs->trans('Fields').''; +print ''; +print ''; +print '   '; +print ''; +print ''; +print '   '; +print ''; +print ''; +print '
'.$langs->trans('Display').''; +print ''; +print ''; +print '
'; +print '
'; +print '
'; + +print '
'; +print ''; +if (!empty($_SESSION['datanorm_pending_changes'])) { + print '   '.$langs->trans('ClearPendingChanges').' ('.count($_SESSION['datanorm_pending_changes']).')'; +} +print '
'; + +print '
'; + +// JavaScript for toggling manual search +print ''; + +// Results +if ($fk_soc > 0 && ($action == 'search' || GETPOST('search_mode'))) { + $comparison_results = array(); + + if ($search_mode == 'supplier') { + // Find all products linked to this supplier + $comparison_results = findProductsForSupplier($db, $fk_soc, $search_by_name, $search_by_ean, $search_by_ref); + } elseif ($search_mode == 'manual' && !empty($search_term)) { + // Manual search in Datanorm + $comparison_results = searchDatanormProducts($db, $fk_soc, $search_term, $search_by_name, $search_by_ean, $search_by_ref); + } + + // Filter results if needed + if ($only_differences) { + $comparison_results = array_filter($comparison_results, function($item) use ($filter_price, $filter_description, $filter_label) { + return ($filter_price && $item['price_differs']) || + ($filter_description && $item['description_differs']) || + ($filter_label && $item['label_differs']); + }); + } + + if (!empty($comparison_results)) { + print '
'; + print '
'; + print ''; + + // Header + print ''; + print ''; + print ''; + if ($filter_price) { + print ''; + print ''; + } + if ($filter_description) { + print ''; + print ''; + } + if ($filter_label) { + print ''; + print ''; + } + print ''; + print ''; + + foreach ($comparison_results as $item) { + $has_difference = ($filter_price && $item['price_differs']) || + ($filter_description && $item['description_differs']) || + ($filter_label && $item['label_differs']); + + $rowClass = $has_difference ? 'oddeven highlighted' : 'oddeven'; + + print ''; + + // Product + print ''; + + // Datanorm article + print ''; + + // Price comparison + if ($filter_price) { + $priceStyle = $item['price_differs'] ? 'background-color: #fcf8e3;' : ''; + print ''; + print ''; + } + + // Description comparison + if ($filter_description) { + $descStyle = $item['description_differs'] ? 'background-color: #fcf8e3;' : ''; + print ''; + print ''; + } + + // Label comparison + if ($filter_label) { + $labelStyle = $item['label_differs'] ? 'background-color: #fcf8e3;' : ''; + print ''; + print ''; + } + + // Actions + print ''; + + print ''; + } + + print '
'.$langs->trans('Product').''.$langs->trans('DatanormArticle').''.$langs->trans('CurrentPrice').''.$langs->trans('DatanormPrice').''.$langs->trans('CurrentDescription').''.$langs->trans('DatanormDescription').''.$langs->trans('CurrentLabel').''.$langs->trans('DatanormLabel').''.$langs->trans('Actions').'
'; + if ($item['product_id'] > 0) { + $product = new Product($db); + $product->fetch($item['product_id']); + print $product->getNomUrl(1, '', 0, 0, 0, 1, 1); // Open in new tab + print '
'.$product->ref.''; + } else { + print ''.$langs->trans('ProductNotInDatabase').''; + } + print '
'; + print ''.dol_escape_htmltag($item['datanorm_ref']).''; + print '
'.dol_escape_htmltag(dol_trunc($item['datanorm_name'], 50)).''; + print '
'; + if ($item['product_id'] > 0) { + print price($item['current_price']); + } else { + print '-'; + } + print ''; + print price($item['datanorm_price']); + if ($item['price_differs'] && $item['product_id'] > 0) { + $diff = $item['datanorm_price'] - $item['current_price']; + $diffPercent = ($item['current_price'] > 0) ? ($diff / $item['current_price'] * 100) : 0; + print '
'; + if ($diff > 0) { + print ' +'.number_format($diffPercent, 1).'%'; + } else { + print ' '.number_format($diffPercent, 1).'%'; + } + } + print '
'; + print dol_escape_htmltag(dol_trunc($item['current_description'], 80)); + print ''; + print dol_escape_htmltag(dol_trunc($item['datanorm_description'], 80)); + print ''; + print dol_escape_htmltag($item['current_label']); + print ''; + print dol_escape_htmltag($item['datanorm_label']); + print ''; + if ($item['product_id'] > 0 && $has_difference) { + // Quick apply form + print '
'; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + + // Checkboxes for what to apply + if ($filter_price && $item['price_differs']) { + print ''; + print 'P '; + } + if ($filter_description && $item['description_differs']) { + print ''; + print 'D '; + } + if ($filter_label && $item['label_differs']) { + print ''; + print 'L '; + } + + print ''; + print '
'; + + // Add to pending + $isPending = isset($_SESSION['datanorm_pending_changes'][$item['product_id']]); + if (!$isPending) { + print ' '; + print ''; + print ''; + } else { + print ' '.$langs->trans('Pending').''; + } + } elseif ($item['product_id'] == 0) { + // Create product link + print ''; + print ''; + print ''; + } else { + print ''.$langs->trans('NoChanges').''; + } + print '
'; + print '
'; + + // Summary and mass apply button + $pendingCount = count($_SESSION['datanorm_pending_changes']); + if ($pendingCount > 0) { + print '
'; + print ''; + } + + } else { + print '
'.$langs->trans('NoResultsFound').'
'; + } +} + +// Confirmation dialog for mass apply +if ($action == 'confirm_apply_all' && !empty($_SESSION['datanorm_pending_changes'])) { + print '

'; + print '
'; + print '

'.$langs->trans('ConfirmMassUpdate').'

'; + print '

'.$langs->trans('FollowingProductsWillBeUpdated').':

'; + + print ''; + print ''; + print ''; + print ''; + print ''; + + foreach ($_SESSION['datanorm_pending_changes'] as $product_id => $change) { + $product = new Product($db); + $product->fetch($product_id); + + print ''; + print ''; + print ''; + print ''; + } + + print '
'.$langs->trans('Product').''.$langs->trans('Changes').'
'.$product->getNomUrl(1).' - '.$product->label.''; + $changes = array(); + if (in_array('price', $change['apply_fields'])) $changes[] = $langs->trans('Price'); + if (in_array('description', $change['apply_fields'])) $changes[] = $langs->trans('Description'); + if (in_array('label', $change['apply_fields'])) $changes[] = $langs->trans('Label'); + print implode(', ', $changes); + print '
'; + + print '
'; + print '
'; + print ''; + print ''; + print ''; + print '
'; + print ''; + print '   '; + print ''.$langs->trans('Cancel').''; + print '
'; + print '
'; + + print '
'; +} + +print ''; + +llxFooter(); +$db->close(); + +/* + * Helper functions + */ + +/** + * Find products linked to a supplier and compare with Datanorm + */ +function findProductsForSupplier($db, $fk_soc, $search_by_name = 0, $search_by_ean = 0, $search_by_ref = 0) +{ + global $conf; + + $results = array(); + + // Get all supplier products + $sql = "SELECT DISTINCT pf.fk_product, pf.ref_fourn, pf.price as fourn_price, p.ref, p.label, p.description, p.barcode"; + $sql .= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price pf"; + $sql .= " INNER JOIN ".MAIN_DB_PREFIX."product p ON p.rowid = pf.fk_product"; + $sql .= " WHERE pf.fk_soc = ".((int)$fk_soc); + $sql .= " AND pf.entity IN (".getEntity('product').")"; + + $resql = $db->query($sql); + if ($resql) { + while ($obj = $db->fetch_object($resql)) { + // Try to find matching Datanorm article + $datanorm = findDatanormMatch($db, $fk_soc, $obj->ref_fourn, $obj->label, $obj->barcode, $obj->ref, $search_by_name, $search_by_ean, $search_by_ref); + + if ($datanorm) { + $results[] = buildComparisonResult($obj, $datanorm); + } + } + } + + return $results; +} + +/** + * Search Datanorm products manually + */ +function searchDatanormProducts($db, $fk_soc, $search_term, $search_by_name = 0, $search_by_ean = 0, $search_by_ref = 0) +{ + global $conf; + + $results = array(); + + // Search in Datanorm + $sql = "SELECT d.* FROM ".MAIN_DB_PREFIX."importzugferd_datanorm d"; + $sql .= " WHERE d.fk_soc = ".((int)$fk_soc); + $sql .= " AND (d.article_number LIKE '%".$db->escape($search_term)."%'"; + $sql .= " OR d.short_text1 LIKE '%".$db->escape($search_term)."%'"; + $sql .= " OR d.short_text2 LIKE '%".$db->escape($search_term)."%'"; + if ($search_by_ean) { + $sql .= " OR d.ean LIKE '%".$db->escape($search_term)."%'"; + } + $sql .= ")"; + $sql .= " ORDER BY d.article_number"; + $sql .= " LIMIT 100"; + + $resql = $db->query($sql); + if ($resql) { + while ($datanorm = $db->fetch_object($resql)) { + // Try to find matching product in database + $product = findProductMatch($db, $fk_soc, $datanorm); + + $results[] = array( + 'product_id' => $product ? $product->rowid : 0, + 'current_price' => $product ? getSupplierPrice($db, $product->rowid, $fk_soc) : 0, + 'current_description' => $product ? $product->description : '', + 'current_label' => $product ? $product->label : '', + 'datanorm_key' => $datanorm->article_number, + 'datanorm_ref' => $datanorm->article_number, + 'datanorm_name' => $datanorm->short_text1, + 'datanorm_price' => $datanorm->price, + 'datanorm_description' => trim($datanorm->short_text1.' '.$datanorm->short_text2), + 'datanorm_label' => $datanorm->short_text1, + 'price_differs' => $product && abs(getSupplierPrice($db, $product->rowid, $fk_soc) - $datanorm->price) > 0.01, + 'description_differs' => $product && $product->description != trim($datanorm->short_text1.' '.$datanorm->short_text2), + 'label_differs' => $product && $product->label != $datanorm->short_text1, + ); + } + } + + return $results; +} + +/** + * Find Datanorm match for a product + */ +function findDatanormMatch($db, $fk_soc, $ref_fourn, $label, $barcode, $ref, $search_by_name, $search_by_ean, $search_by_ref) +{ + // First try by supplier reference (article number) + $sql = "SELECT * FROM ".MAIN_DB_PREFIX."importzugferd_datanorm"; + $sql .= " WHERE fk_soc = ".((int)$fk_soc); + $sql .= " AND article_number = '".$db->escape($ref_fourn)."'"; + $sql .= " LIMIT 1"; + + $resql = $db->query($sql); + if ($resql && $db->num_rows($resql) > 0) { + return $db->fetch_object($resql); + } + + // Try by EAN if enabled + if ($search_by_ean && !empty($barcode)) { + $sql = "SELECT * FROM ".MAIN_DB_PREFIX."importzugferd_datanorm"; + $sql .= " WHERE fk_soc = ".((int)$fk_soc); + $sql .= " AND ean = '".$db->escape($barcode)."'"; + $sql .= " LIMIT 1"; + + $resql = $db->query($sql); + if ($resql && $db->num_rows($resql) > 0) { + return $db->fetch_object($resql); + } + } + + // Try by product ref if enabled + if ($search_by_ref && !empty($ref)) { + $sql = "SELECT * FROM ".MAIN_DB_PREFIX."importzugferd_datanorm"; + $sql .= " WHERE fk_soc = ".((int)$fk_soc); + $sql .= " AND article_number = '".$db->escape($ref)."'"; + $sql .= " LIMIT 1"; + + $resql = $db->query($sql); + if ($resql && $db->num_rows($resql) > 0) { + return $db->fetch_object($resql); + } + } + + return null; +} + +/** + * Find product match for Datanorm article + */ +function findProductMatch($db, $fk_soc, $datanorm) +{ + // Try by supplier reference + $sql = "SELECT p.* FROM ".MAIN_DB_PREFIX."product p"; + $sql .= " INNER JOIN ".MAIN_DB_PREFIX."product_fournisseur_price pf ON pf.fk_product = p.rowid"; + $sql .= " WHERE pf.fk_soc = ".((int)$fk_soc); + $sql .= " AND pf.ref_fourn = '".$db->escape($datanorm->article_number)."'"; + $sql .= " LIMIT 1"; + + $resql = $db->query($sql); + if ($resql && $db->num_rows($resql) > 0) { + return $db->fetch_object($resql); + } + + // Try by EAN + if (!empty($datanorm->ean)) { + $sql = "SELECT * FROM ".MAIN_DB_PREFIX."product"; + $sql .= " WHERE barcode = '".$db->escape($datanorm->ean)."'"; + $sql .= " LIMIT 1"; + + $resql = $db->query($sql); + if ($resql && $db->num_rows($resql) > 0) { + return $db->fetch_object($resql); + } + } + + return null; +} + +/** + * Get supplier price for a product + */ +function getSupplierPrice($db, $product_id, $fk_soc) +{ + $sql = "SELECT price FROM ".MAIN_DB_PREFIX."product_fournisseur_price"; + $sql .= " WHERE fk_product = ".((int)$product_id); + $sql .= " AND fk_soc = ".((int)$fk_soc); + $sql .= " ORDER BY rowid DESC LIMIT 1"; + + $resql = $db->query($sql); + if ($resql && $db->num_rows($resql) > 0) { + $obj = $db->fetch_object($resql); + return $obj->price; + } + return 0; +} + +/** + * Build comparison result array + */ +function buildComparisonResult($product, $datanorm) +{ + global $db; + + $fk_soc = $datanorm->fk_soc; + $current_price = $product->fourn_price; + + return array( + 'product_id' => $product->fk_product, + 'current_price' => $current_price, + 'current_description' => $product->description, + 'current_label' => $product->label, + 'datanorm_key' => $datanorm->article_number, + 'datanorm_ref' => $datanorm->article_number, + 'datanorm_name' => $datanorm->short_text1, + 'datanorm_price' => $datanorm->price, + 'datanorm_description' => trim($datanorm->short_text1.' '.$datanorm->short_text2), + 'datanorm_label' => $datanorm->short_text1, + 'price_differs' => abs($current_price - $datanorm->price) > 0.01, + 'description_differs' => $product->description != trim($datanorm->short_text1.' '.$datanorm->short_text2), + 'label_differs' => $product->label != $datanorm->short_text1, + ); +} + +/** + * Apply Datanorm update to a product + */ +function applyDatanormUpdate($db, $user, $product_id, $datanorm_key, $fk_soc, $apply_price, $apply_description, $apply_label) +{ + // Get Datanorm data + $sql = "SELECT * FROM ".MAIN_DB_PREFIX."importzugferd_datanorm"; + $sql .= " WHERE fk_soc = ".((int)$fk_soc); + $sql .= " AND article_number = '".$db->escape($datanorm_key)."'"; + + $resql = $db->query($sql); + if (!$resql || $db->num_rows($resql) == 0) { + return -1; + } + + $datanorm = $db->fetch_object($resql); + + // Load product + $product = new Product($db); + $result = $product->fetch($product_id); + if ($result <= 0) { + return -2; + } + + $updated = false; + + // Update label + if ($apply_label && $product->label != $datanorm->short_text1) { + $product->label = $datanorm->short_text1; + $updated = true; + } + + // Update description + if ($apply_description) { + $new_desc = trim($datanorm->short_text1.' '.$datanorm->short_text2); + if ($product->description != $new_desc) { + $product->description = $new_desc; + $updated = true; + } + } + + // Save product changes + if ($updated) { + $result = $product->update($product->id, $user); + if ($result < 0) { + return -3; + } + } + + // Update supplier price + if ($apply_price) { + $productFourn = new ProductFournisseur($db); + $productFourn->fetch($product_id); + + // Find existing supplier price + $sql = "SELECT rowid, quantity FROM ".MAIN_DB_PREFIX."product_fournisseur_price"; + $sql .= " WHERE fk_product = ".((int)$product_id); + $sql .= " AND fk_soc = ".((int)$fk_soc); + $sql .= " ORDER BY rowid DESC LIMIT 1"; + + $resql = $db->query($sql); + if ($resql && $db->num_rows($resql) > 0) { + $priceObj = $db->fetch_object($resql); + + // Update existing price + $result = $productFourn->update_buyprice( + $priceObj->quantity, + $datanorm->price, + $user, + 'HT', + $fk_soc, + 0, // availability + $datanorm->article_number, // ref_fourn + 0, // tva_tx + 0, // charges + 0, // remise_percent + 0, // remise + 0, // newnpr + 0, // delivery_time_days + '', // supplier_reputation + array(), // localtaxes + '', // newdefaultvatcode + 0, // multicurrency_buyprice + '', // multicurrency_price_base_type + 0, // multicurrency_tx + '', // multicurrency_code + '', // desc_fourn + '', // barcode + 0, // fk_barcode_type + array() // options + ); + + if ($result < 0) { + return -4; + } + } + } + + return 1; +} diff --git a/import.php b/import.php index 870e7b8..2283238 100644 --- a/import.php +++ b/import.php @@ -56,6 +56,9 @@ dol_include_once('/importzugferd/class/zugferdimport.class.php'); dol_include_once('/importzugferd/class/importline.class.php'); dol_include_once('/importzugferd/class/productmapping.class.php'); dol_include_once('/importzugferd/class/actions_importzugferd.class.php'); +dol_include_once('/importzugferd/class/datanorm.class.php'); +dol_include_once('/importzugferd/class/datanormparser.class.php'); +dol_include_once('/importzugferd/class/importnotification.class.php'); dol_include_once('/importzugferd/lib/importzugferd.lib.php'); // Load translation files @@ -81,6 +84,7 @@ $formfile = new FormFile($db); $actions = new ActionsImportZugferd($db); $import = new ZugferdImport($db); $importLine = new ImportLine($db); +$notification = new ImportNotification($db); $error = 0; $message = ''; @@ -160,15 +164,19 @@ if ($action == 'upload') { // Check if all lines have products $all_have_products = true; + $has_any_product = false; + $total_lines = count($processed_lines); foreach ($processed_lines as $line) { if ($line['fk_product'] <= 0) { $all_have_products = false; - break; + } else { + $has_any_product = true; } } // Set status based on product matching - if ($all_have_products && $supplier_id > 0) { + // STATUS_IMPORTED only if: supplier found, has lines, ALL lines have products + if ($all_have_products && $supplier_id > 0 && $total_lines > 0 && $has_any_product) { $import->status = ZugferdImport::STATUS_IMPORTED; } else { $import->status = ZugferdImport::STATUS_PENDING; @@ -207,6 +215,18 @@ if ($action == 'upload') { } rename($destfile, $final_dir.'/'.$filename); + // Send notification if manual intervention required + if ($import->status == ZugferdImport::STATUS_PENDING) { + $storedLines = $importLine->fetchAllByImport($import->id); + $notification->sendManualInterventionNotification($import, $storedLines); + } + + // Check for price differences + if ($import->status == ZugferdImport::STATUS_IMPORTED) { + $storedLines = $importLine->fetchAllByImport($import->id); + $notification->checkAndNotifyPriceDifferences($import, $storedLines); + } + // Redirect to edit page $id = $import->id; $action = 'edit'; @@ -215,6 +235,8 @@ if ($action == 'upload') { $error++; $message = $import->error; @unlink($destfile); + // Send error notification + $notification->sendErrorNotification($import, $message, $filename); } } else { $error++; @@ -270,6 +292,10 @@ if ($action == 'assignproduct' && $line_id > 0 && $product_id > 0) { if ($import->status == ZugferdImport::STATUS_PENDING) { $import->status = ZugferdImport::STATUS_IMPORTED; $import->update($user); + + // Check for price differences now that all products are assigned + $storedLines = $importLine->fetchAllByImport($id); + $notification->checkAndNotifyPriceDifferences($import, $storedLines); } } } @@ -368,6 +394,345 @@ if ($action == 'duplicateproduct' && $template_product_id > 0 && $line_id > 0) { $import->fetch($id); } +// Create product from Datanorm +if ($action == 'createfromdatanorm' && $line_id > 0) { + $lineObj = new ImportLine($db); + $result = $lineObj->fetch($line_id); + + if ($result > 0) { + $id = $lineObj->fk_import; + $import->fetch($id); + + // Get Datanorm settings + $markup = getDolGlobalString('IMPORTZUGFERD_DATANORM_MARKUP', 30); + $searchAll = getDolGlobalString('IMPORTZUGFERD_DATANORM_SEARCH_ALL', 0); + + // Search in Datanorm database + $datanorm = new Datanorm($db); + $results = $datanorm->searchByArticleNumber($lineObj->supplier_ref, $import->fk_soc, $searchAll, 1); + + if (empty($results)) { + // Try with EAN if available + if (!empty($lineObj->ean)) { + $results = $datanorm->searchByArticleNumber($lineObj->ean, $import->fk_soc, $searchAll, 1); + } + } + + if (!empty($results)) { + $datanormArticle = $results[0]; + $datanorm->fetch($datanormArticle['id']); + + // Load supplier for ref prefix + $supplier = new Societe($db); + $supplier->fetch($import->fk_soc); + $supplierPrefix = strtoupper(substr(preg_replace('/[^a-zA-Z]/', '', $supplier->name), 0, 3)); + + // Create new product + $newproduct = new Product($db); + $newproduct->type = 0; // Product + $newproduct->status = 1; // On sale + $newproduct->status_buy = 1; // On purchase + + // Generate reference + $newproduct->ref = 'NEW-'.$supplierPrefix.'-'.$datanorm->article_number; + + // Label from Datanorm + $newproduct->label = $datanorm->short_text1; + if (!empty($datanorm->short_text2) && strlen($newproduct->label) < 100) { + $newproduct->label .= ' '.$datanorm->short_text2; + } + + // Description + $newproduct->description = $datanorm->getFullDescription(); + + // Prices + $purchasePrice = $datanorm->price; + if ($datanorm->price_unit > 1) { + $purchasePrice = $datanorm->price / $datanorm->price_unit; + } + + // Selling price with markup + $sellingPrice = $purchasePrice * (1 + $markup / 100); + $newproduct->price = $sellingPrice; + $newproduct->price_base_type = 'HT'; + $newproduct->tva_tx = $lineObj->tax_percent ?: 19; + + // Weight if available + if (!empty($datanorm->weight)) { + $newproduct->weight = $datanorm->weight; + $newproduct->weight_units = 0; // kg + } + + // Let Dolibarr auto-generate barcode if configured + // Setting barcode to '-1' triggers automatic generation + if (isModEnabled('barcode') && getDolGlobalString('BARCODE_PRODUCT_ADDON_NUM')) { + $newproduct->barcode = '-1'; + } + + // Create the product + $result = $newproduct->create($user); + + if ($result > 0) { + // Add supplier price + require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.product.class.php'; + $prodfourn = new ProductFournisseur($db); + $prodfourn->id = $newproduct->id; + $prodfourn->fourn_ref = $datanorm->article_number; + + // Determine EAN for supplier price + $supplierEan = ''; + $supplierEanType = 0; + if (!empty($datanorm->ean)) { + $supplierEan = $datanorm->ean; + $supplierEanType = 2; // EAN13 + } elseif (!empty($lineObj->ean)) { + $supplierEan = $lineObj->ean; + $supplierEanType = 2; // EAN13 + } + + // Add supplier price entry with EAN + $res = $prodfourn->update_buyprice( + 1, // Quantity + $purchasePrice, // Price + $user, + 'HT', // Price base + $supplier, // Supplier + 0, // Availability + $datanorm->article_number, // Supplier ref + $lineObj->tax_percent ?: 19, // VAT + 0, // Charges + 0, // Remise + 0, // Remise percentage + 0, // No price minimum + 0, // Delivery delay + 0, // Reputation + array(), // Extra fields + 0, // Charges array + $supplierEan, // Barcode/EAN in supplier price + $supplierEanType // Barcode type (EAN13) + ); + + // Create product mapping for future imports + $mapping = new ProductMapping($db); + $mapping->fk_soc = $import->fk_soc; + $mapping->supplier_ref = $datanorm->article_number; + $mapping->fk_product = $newproduct->id; + $mapping->ean = $datanorm->ean; + $mapping->manufacturer_ref = $datanorm->manufacturer_ref; + $mapping->description = $datanorm->short_text1; + $mapping->create($user); + + // Assign to import line + $lineObj->setProduct($newproduct->id, 'datanorm', $user); + + setEventMessages($langs->trans('ProductCreatedFromDatanorm', $newproduct->ref), null, 'mesgs'); + + // Check if all lines now have products + $allHaveProducts = $importLine->allLinesHaveProducts($id); + if ($allHaveProducts) { + $import->status = ZugferdImport::STATUS_IMPORTED; + $import->update($user); + } + } else { + setEventMessages($newproduct->error, $newproduct->errors, 'errors'); + } + } else { + setEventMessages($langs->trans('DatanormArticleNotFound', $lineObj->supplier_ref), null, 'errors'); + } + } + $action = 'edit'; + $import->fetch($id); +} + +// Create ALL products from Datanorm (batch) +if ($action == 'createallfromdatanorm' && $id > 0) { + $import->fetch($id); + + if ($import->fk_soc > 0) { + // Get Datanorm settings + $markup = getDolGlobalString('IMPORTZUGFERD_DATANORM_MARKUP', 30); + $searchAll = getDolGlobalString('IMPORTZUGFERD_DATANORM_SEARCH_ALL', 0); + + // Load supplier + $supplier = new Societe($db); + $supplier->fetch($import->fk_soc); + $supplierPrefix = strtoupper(substr(preg_replace('/[^a-zA-Z]/', '', $supplier->name), 0, 3)); + + // Get all lines without product + $lines = $importLine->fetchAllByImport($import->id); + $datanorm = new Datanorm($db); + $createdCount = 0; + $assignedCount = 0; + $errorCount = 0; + + require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.product.class.php'; + + foreach ($lines as $lineObj) { + // Skip lines that already have a product + if ($lineObj->fk_product > 0) { + continue; + } + + // Skip lines without supplier_ref + if (empty($lineObj->supplier_ref)) { + continue; + } + + // Search in Datanorm database + $results = $datanorm->searchByArticleNumber($lineObj->supplier_ref, $import->fk_soc, $searchAll, 1); + + if (empty($results) && !empty($lineObj->ean)) { + $results = $datanorm->searchByArticleNumber($lineObj->ean, $import->fk_soc, $searchAll, 1); + } + + if (!empty($results)) { + $datanormArticle = $results[0]; + $datanorm->fetch($datanormArticle['id']); + + $purchasePrice = $datanorm->price; + if ($datanorm->price_unit > 1) { + $purchasePrice = $datanorm->price / $datanorm->price_unit; + } + + // Check if product already exists in Dolibarr + $existingProduct = new Product($db); + $productExists = false; + $existingProductId = 0; + + // 1. Check by supplier reference (ProductFournisseur) + $sqlCheck = "SELECT DISTINCT pf.fk_product FROM ".MAIN_DB_PREFIX."product_fournisseur_price as pf"; + $sqlCheck .= " WHERE pf.fk_soc = ".(int)$import->fk_soc; + $sqlCheck .= " AND pf.ref_fourn = '".$db->escape($datanorm->article_number)."'"; + $sqlCheck .= " AND pf.entity IN (".getEntity('product').")"; + $resqlCheck = $db->query($sqlCheck); + if ($resqlCheck && $db->num_rows($resqlCheck) > 0) { + $objCheck = $db->fetch_object($resqlCheck); + $existingProductId = $objCheck->fk_product; + $productExists = true; + } + + // 2. Check by product reference pattern + if (!$productExists) { + $expectedRef = 'NEW-'.$supplierPrefix.'-'.$datanorm->article_number; + $fetchResult = $existingProduct->fetch(0, $expectedRef); + if ($fetchResult > 0) { + $existingProductId = $existingProduct->id; + $productExists = true; + } + } + + // 3. Check by EAN if available + if (!$productExists && !empty($datanorm->ean)) { + $sqlEan = "SELECT rowid FROM ".MAIN_DB_PREFIX."product"; + $sqlEan .= " WHERE barcode = '".$db->escape($datanorm->ean)."'"; + $sqlEan .= " AND entity IN (".getEntity('product').")"; + $resqlEan = $db->query($sqlEan); + if ($resqlEan && $db->num_rows($resqlEan) > 0) { + $objEan = $db->fetch_object($resqlEan); + $existingProductId = $objEan->rowid; + $productExists = true; + } + } + + if ($productExists && $existingProductId > 0) { + // Product exists - just assign it to the line + $lineObj->setProduct($existingProductId, 'datanorm', $user); + $assignedCount++; + } else { + // Create new product + $newproduct = new Product($db); + $newproduct->type = 0; + $newproduct->status = 1; + $newproduct->status_buy = 1; + $newproduct->ref = 'NEW-'.$supplierPrefix.'-'.$datanorm->article_number; + $newproduct->label = $datanorm->short_text1; + if (!empty($datanorm->short_text2) && strlen($newproduct->label) < 100) { + $newproduct->label .= ' '.$datanorm->short_text2; + } + $newproduct->description = $datanorm->getFullDescription(); + + $sellingPrice = $purchasePrice * (1 + $markup / 100); + $newproduct->price = $sellingPrice; + $newproduct->price_base_type = 'HT'; + $newproduct->tva_tx = $lineObj->tax_percent ?: 19; + + if (!empty($datanorm->weight)) { + $newproduct->weight = $datanorm->weight; + $newproduct->weight_units = 0; + } + + if (isModEnabled('barcode') && getDolGlobalString('BARCODE_PRODUCT_ADDON_NUM')) { + $newproduct->barcode = '-1'; + } + + $result = $newproduct->create($user); + + if ($result > 0) { + // Add supplier price + $prodfourn = new ProductFournisseur($db); + $prodfourn->id = $newproduct->id; + $prodfourn->fourn_ref = $datanorm->article_number; + + $supplierEan = ''; + $supplierEanType = 0; + if (!empty($datanorm->ean)) { + $supplierEan = $datanorm->ean; + $supplierEanType = 2; + } elseif (!empty($lineObj->ean)) { + $supplierEan = $lineObj->ean; + $supplierEanType = 2; + } + + $prodfourn->update_buyprice( + 1, $purchasePrice, $user, 'HT', $supplier, 0, + $datanorm->article_number, $lineObj->tax_percent ?: 19, + 0, 0, 0, 0, 0, 0, array(), 0, $supplierEan, $supplierEanType + ); + + // Create product mapping + $mapping = new ProductMapping($db); + $mapping->fk_soc = $import->fk_soc; + $mapping->supplier_ref = $datanorm->article_number; + $mapping->fk_product = $newproduct->id; + $mapping->ean = $datanorm->ean; + $mapping->manufacturer_ref = $datanorm->manufacturer_ref; + $mapping->description = $datanorm->short_text1; + $mapping->create($user); + + // Assign to import line + $lineObj->setProduct($newproduct->id, 'datanorm', $user); + $createdCount++; + } else { + $errorCount++; + } + } + } + } + + if ($createdCount > 0) { + setEventMessages($langs->trans('DatanormBatchCreated', $createdCount), null, 'mesgs'); + } + if ($assignedCount > 0) { + setEventMessages($langs->trans('DatanormBatchAssigned', $assignedCount), null, 'mesgs'); + } + if ($errorCount > 0) { + setEventMessages($langs->trans('DatanormBatchErrors', $errorCount), null, 'warnings'); + } + if ($createdCount == 0 && $assignedCount == 0 && $errorCount == 0) { + setEventMessages($langs->trans('DatanormBatchNoMatches'), null, 'warnings'); + } + + // Check if all lines now have products + $allHaveProducts = $importLine->allLinesHaveProducts($id); + if ($allHaveProducts) { + $import->status = ZugferdImport::STATUS_IMPORTED; + $import->update($user); + } + } + $action = 'edit'; + $import->fetch($id); +} + // Create supplier invoice if ($action == 'createinvoice' && $id > 0) { $import->fetch($id); @@ -435,8 +800,7 @@ if ($action == 'createinvoice' && $id > 0) { } if (!$error) { - // Validate invoice - $invoice->validate($user); + // Invoice stays as draft - user can validate manually // Copy PDF to invoice $source_pdf = $conf->importzugferd->dir_output.'/imports/'.$import->id.'/'.$import->pdf_filename; @@ -473,6 +837,63 @@ if ($action == 'createinvoice' && $id > 0) { $action = 'edit'; } +// Finish import - check for existing invoice and update status +if ($action == 'finishimport' && $id > 0) { + $import->fetch($id); + + // Check all lines have products + $lines = $importLine->fetchAllByImport($id); + $allHaveProducts = true; + foreach ($lines as $line) { + if ($line->fk_product <= 0) { + $allHaveProducts = false; + break; + } + } + + if (!$allHaveProducts) { + $error++; + setEventMessages($langs->trans('ErrorNotAllProductsAssigned'), null, 'errors'); + } elseif ($import->fk_soc <= 0) { + $error++; + setEventMessages($langs->trans('ErrorSupplierRequired'), null, 'errors'); + } else { + // Search for existing supplier invoice with this ref_supplier + $sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."facture_fourn"; + $sql .= " WHERE fk_soc = ".((int) $import->fk_soc); + $sql .= " AND ref_supplier = '".$db->escape($import->invoice_number)."'"; + $sql .= " LIMIT 1"; + + $resql = $db->query($sql); + if ($resql && $db->num_rows($resql) > 0) { + $obj = $db->fetch_object($resql); + // Found existing invoice - link it + $import->fk_facture_fourn = $obj->rowid; + $import->status = ZugferdImport::STATUS_PROCESSED; + $import->date_import = dol_now(); + $result = $import->update($user); + + if ($result > 0) { + $invoiceLink = ''.$import->invoice_number.''; + setEventMessages($langs->trans('ImportLinkedToExistingInvoice', $invoiceLink), null, 'mesgs'); + } else { + setEventMessages($import->error, null, 'errors'); + } + } else { + // No existing invoice - mark as imported (ready for invoice creation) + $import->status = ZugferdImport::STATUS_IMPORTED; + $result = $import->update($user); + + if ($result > 0) { + setEventMessages($langs->trans('ImportFinished'), null, 'mesgs'); + } else { + setEventMessages($import->error, null, 'errors'); + } + } + } + $action = 'edit'; +} + // Delete import record if ($action == 'confirm_delete' && $confirm == 'yes' && $id > 0) { $import->fetch($id); @@ -600,21 +1021,28 @@ if (empty($action) || ($action == 'upload' && $error)) { print ''; } +/* + * Delete confirmation dialog + */ +if ($action == 'delete' && $id > 0) { + $import->fetch($id); + $formconfirm = $form->formconfirm( + $_SERVER['PHP_SELF'].'?id='.$import->id, + $langs->trans('DeleteImportRecord'), + $langs->trans('ConfirmDeleteImportRecord', $import->ref), + 'confirm_delete', + '', + 0, + 1 + ); + print $formconfirm; + $action = 'edit'; // Continue showing the edit form +} + /* * Edit/Review import */ if ($action == 'edit' && $import->id > 0) { - // Delete confirmation - if ($action == 'delete') { - $formconfirm = $form->formconfirm( - $_SERVER['PHP_SELF'].'?id='.$import->id, - $langs->trans('DeleteImportRecord'), - $langs->trans('ConfirmDeleteImportRecord', $import->ref), - 'confirm_delete' - ); - print $formconfirm; - } - // Fetch lines $lines = $importLine->fetchAllByImport($import->id); $missingProducts = $importLine->countLinesWithoutProduct($import->id); @@ -715,11 +1143,20 @@ if ($action == 'edit' && $import->id > 0) { print ''.$langs->trans('ProductDescription').''; print ''.$langs->trans('Qty').''; print ''.$langs->trans('UnitPrice').''; + print ''.$langs->trans('DolibarrPrice').''; print ''.$langs->trans('TotalHT').''; print ''.$langs->trans('MatchedProduct').''; print ''.$langs->trans('Action').''; print ''; + // Initialize totals for summary row + $totalDolibarrHT = 0; + $totalZugferdHT = 0; + $hasDolibarrPrices = false; + $allProductsMatched = true; + $matchedLinesCount = 0; + $totalLinesCount = count($lines); + foreach ($lines as $line) { $hasProduct = ($line->fk_product > 0); $rowClass = $hasProduct ? 'oddeven opacitymedium' : 'oddeven'; @@ -740,6 +1177,60 @@ if ($action == 'edit' && $import->id > 0) { print '
('.price($line->unit_price_raw).'/'.price2num($line->basis_quantity, 'MS').zugferdGetUnitLabel($line->basis_quantity_unit).')'; } print ''; + + // Dolibarr price column - show supplier price and difference + print ''; + $lineDolibarrTotal = 0; + if ($hasProduct && $import->fk_soc > 0) { + require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.product.class.php'; + $productFourn = new ProductFournisseur($db); + $result = $productFourn->find_min_price_product_fournisseur($line->fk_product, 1, $import->fk_soc); + + if ($result > 0 && $productFourn->fourn_price > 0) { + $dolibarrPrice = $productFourn->fourn_price; + $zugferdPrice = $line->unit_price; + $priceDiff = $zugferdPrice - $dolibarrPrice; + $priceDiffPercent = ($dolibarrPrice > 0) ? (($priceDiff / $dolibarrPrice) * 100) : 0; + + // Accumulate for summary + $lineDolibarrTotal = $dolibarrPrice * $line->quantity; + $totalDolibarrHT += $lineDolibarrTotal; + $hasDolibarrPrices = true; + $matchedLinesCount++; + + print price($dolibarrPrice); + + if (abs($priceDiffPercent) >= 0.01) { + $threshold = getDolGlobalInt('IMPORTZUGFERD_PRICE_DIFF_THRESHOLD', 10); + $isSignificant = (abs($priceDiffPercent) >= $threshold); + + print '
'; + if ($priceDiff > 0) { + // ZUGFeRD price is higher + $iconColor = $isSignificant ? 'color: #d9534f;' : 'color: #f0ad4e;'; + print ''; + print ' +'.number_format($priceDiffPercent, 1).'%'; + print ''; + } else { + // ZUGFeRD price is lower + $iconColor = $isSignificant ? 'color: #5cb85c;' : 'color: #5bc0de;'; + print ''; + print ' '.number_format($priceDiffPercent, 1).'%'; + print ''; + } + } else { + print '
'; + } + } else { + print ''.$langs->trans('NoPriceFound').''; + $allProductsMatched = false; // No price found for matched product + } + } else { + print '-'; + $allProductsMatched = false; // Product not matched + } + print ''; + print ''.price($line->line_total).''; print ''; @@ -810,11 +1301,93 @@ if ($action == 'edit' && $import->id > 0) { print ''; print ''; print ''; + + // Datanorm button (only if supplier is set and supplier_ref exists) + if ($import->fk_soc > 0 && !empty($line->supplier_ref)) { + // Check if Datanorm article exists + $datanormCheck = new Datanorm($db); + $searchAll = getDolGlobalString('IMPORTZUGFERD_DATANORM_SEARCH_ALL', 0); + $datanormResults = $datanormCheck->searchByArticleNumber($line->supplier_ref, $import->fk_soc, $searchAll, 1); + + if (!empty($datanormResults)) { + $datanormArticle = $datanormResults[0]; + print '
'; + print ''; + print ''.$langs->trans('CreateFromDatanorm'); + print ''; + print '
'; + print dol_trunc($datanormArticle['short_text1'], 40); + print ' - '.price($datanormArticle['price']); + print ''; + } + } } print ''; print ''; + + // Accumulate ZUGFeRD total + $totalZugferdHT += $line->line_total; } + // Summary row with total comparison + // Only show full comparison if ALL products are matched with Dolibarr prices + print ''; + print ''.$langs->trans('Total').' '.$langs->trans('TotalHT').''; + + if ($allProductsMatched && $hasDolibarrPrices) { + // Full comparison possible - all products matched with prices + $totalDiff = $totalZugferdHT - $totalDolibarrHT; + $totalDiffPercent = ($totalDolibarrHT > 0) ? (($totalDiff / $totalDolibarrHT) * 100) : 0; + + // Determine colors: green if close match, red if significant difference + $threshold = getDolGlobalInt('IMPORTZUGFERD_PRICE_DIFF_THRESHOLD', 10); + $isMatch = (abs($totalDiffPercent) < 0.5); // Less than 0.5% difference = match + $isSignificant = (abs($totalDiffPercent) >= $threshold); + + if ($isMatch) { + $cellStyle = 'background-color: #dff0d8;'; // Green + } elseif ($isSignificant) { + $cellStyle = 'background-color: #f2dede;'; // Red + } else { + $cellStyle = 'background-color: #fcf8e3;'; // Yellow/warning + } + + print ''; + print ''.price($totalDolibarrHT).''; + if (abs($totalDiffPercent) >= 0.01) { + print '
'; + if ($totalDiff > 0) { + print ' +'.number_format($totalDiffPercent, 1).'%'; + } elseif ($totalDiff < 0) { + print ' '.number_format($totalDiffPercent, 1).'%'; + } + } + print ''; + print ''.price($totalZugferdHT).''; + print ''; + if ($isMatch) { + print ' '.$langs->trans('SumValidationOk').''; + } else { + print ' '.$langs->trans('Difference').': '.price($totalDiff).' '.$import->currency.''; + } + print ''; + } else { + // Not all products matched - show totals but no comparison + print ''; + if ($hasDolibarrPrices) { + print ''.price($totalDolibarrHT).''; + print '
('.$matchedLinesCount.'/'.$totalLinesCount.')'; + } else { + print '-'; + } + print ''; + print ''.price($totalZugferdHT).''; + print ''; + print ' '.$langs->trans('ProductsNotAssigned').''; + print ''; + } + print ''; + print ''; print ''; @@ -828,9 +1401,33 @@ if ($action == 'edit' && $import->id > 0) { print '   '; } + // Finish import button - shown when pending status and all products assigned + if ($import->status == ZugferdImport::STATUS_PENDING && $allComplete) { + print ''; + print ''.$langs->trans('FinishImport'); + print ''; + print '   '; + } + + // Button to create all products from Datanorm + if ($missingProducts > 0 && $import->fk_soc > 0) { + print ''; + print ''.$langs->trans('CreateAllFromDatanorm'); + print ''; + print '   '; + } + print ''.$langs->trans('BackToList').''; - print '   '; - print ''.$langs->trans('Delete').''; + + // Delete button - show for pending imports or imports without linked invoice + $canDelete = ($import->status == ZugferdImport::STATUS_PENDING) || + ($import->status == ZugferdImport::STATUS_IMPORTED && $import->fk_facture_fourn <= 0); + if ($canDelete) { + print '   '; + print ''; + print ''.$langs->trans('Delete'); + print ''; + } print ''; diff --git a/langs/de_DE/importzugferd.lang b/langs/de_DE/importzugferd.lang index 8b501bb..98ce7bd 100644 --- a/langs/de_DE/importzugferd.lang +++ b/langs/de_DE/importzugferd.lang @@ -35,6 +35,8 @@ IMPORTZUGFERD_WATCH_FOLDER = Überwachungsordner IMPORTZUGFERD_WATCH_FOLDERTooltip = Ordner für eingehende ZUGFeRD-Rechnungen (lokaler Pfad) IMPORTZUGFERD_ARCHIVE_FOLDER = Archivordner IMPORTZUGFERD_ARCHIVE_FOLDERTooltip = Ordner für erfolgreich importierte Rechnungen +IMPORTZUGFERD_ERROR_FOLDER = Fehlerordner +IMPORTZUGFERD_ERROR_FOLDERTooltip = Ordner für fehlerhafte Rechnungen (nicht ZUGFeRD oder Importfehler) IMPORTZUGFERD_IMAP_ARCHIVE_FOLDER = IMAP Archivordner IMPORTZUGFERD_IMAP_ARCHIVE_FOLDERTooltip = IMAP-Ordner für archivierte E-Mails nach Import @@ -109,6 +111,7 @@ SupplierCustomerNumberHelp = Ihre Kundennummer bei diesem Lieferanten (für auto # Cronjob # ImportZugferdFromMailbox = ZUGFeRD Rechnungen aus Postfach importieren +ImportZugferdScheduled = ZUGFeRD geplanter Import (Ordner und E-Mail) # # Fehler @@ -213,3 +216,131 @@ ImportRecordCreated = Import-Datensatz erstellt ErrorNotAllProductsAssigned = Nicht alle Produkte zugeordnet BackToList = Zurück zur Liste ErrorRecordNotFound = Datensatz nicht gefunden +FinishImport = Abschließen +ImportFinished = Import abgeschlossen +ImportLinkedToExistingInvoice = Import mit bestehender Rechnung %s verknüpft + +# +# Datanorm +# +DatanormCatalogs = Datanorm Kataloge +DatanormSettings = Datanorm Einstellungen +IMPORTZUGFERD_DATANORM_MARKUP = Preisaufschlag (%) +IMPORTZUGFERD_DATANORM_MARKUPTooltip = Prozentualer Aufschlag auf den Datanorm-Einkaufspreis für den Verkaufspreis +IMPORTZUGFERD_DATANORM_SEARCH_ALL = In allen Lieferanten-Katalogen suchen +IMPORTZUGFERD_DATANORM_SEARCH_ALLTooltip = Bei Aktivierung wird nicht nur im Katalog des aktuellen Lieferanten gesucht, sondern in allen Datanorm-Katalogen +UploadDatanorm = Datanorm hochladen +DatanormFiles = Datanorm Dateien +DatanormFileHelp = DATANORM.001, DATANORM.WRG oder XML-Dateien (Datanorm 4.0/5.0) +DeleteExisting = Vorhandene Artikel löschen +DeleteExistingHelp = Löscht alle vorhandenen Artikel dieses Lieferanten vor dem Import +DatanormImportSuccess = %s Artikel erfolgreich importiert +DatanormImportFailed = Datanorm Import fehlgeschlagen +DatanormNoArticlesFound = Keine Artikel in der Datanorm-Datei gefunden +NoDatanormData = Keine Datanorm-Daten vorhanden +DatanormDeleted = %s Artikel gelöscht +DatanormDeleteFailed = Löschen fehlgeschlagen +DeleteDatanorm = Datanorm-Katalog löschen +ConfirmDeleteDatanorm = Möchten Sie alle Datanorm-Artikel von %s löschen? +DatanormArticles = Datanorm Artikel +ArticleNumber = Artikelnummer +ArticleCount = Artikelanzahl +LastImport = Letzter Import +ViewArticles = Artikel anzeigen +TotalArticles = Gesamtanzahl Artikel +DatanormSettingsInfo = Preisaufschlag und Suchverhalten können in den Moduleinstellungen konfiguriert werden: +CreateFromDatanorm = Aus Datanorm +CreateFromDatanormHelp = Neues Produkt aus Datanorm-Daten anlegen +ProductCreatedFromDatanorm = Produkt %s aus Datanorm erstellt +DatanormArticleNotFound = Kein Datanorm-Artikel für Artikelnummer '%s' gefunden +CreateAllFromDatanorm = Alle aus Datanorm +CreateAllFromDatanormHelp = Alle fehlenden Produkte aus Datanorm-Daten anlegen +DatanormBatchCreated = %s Produkte aus Datanorm erstellt +DatanormBatchAssigned = %s vorhandene Produkte zugeordnet +DatanormBatchErrors = %s Produkte konnten nicht erstellt werden +DatanormBatchNoMatches = Keine passenden Datanorm-Artikel gefunden + +# +# Scheduling +# +SchedulingSettings = Zeitplanung +IMPORTZUGFERD_IMPORT_FREQUENCY = Import-Häufigkeit +IMPORTZUGFERD_IMPORT_FREQUENCYTooltip = Wie oft sollen Ordner und E-Mails automatisch auf neue Rechnungen geprüft werden +FrequencyManual = Nur manuell +FrequencyHourly = Stündlich +FrequencyDaily = Täglich +FrequencyWeekly = Wöchentlich +ManualImportTrigger = Manueller Import + +# +# Folder Browser +# +FolderBrowser = Ordner-Auswahl +Browse = Durchsuchen +SelectFolder = Ordner auswählen +SelectThisFolder = Diesen Ordner wählen +CurrentPath = Aktueller Pfad +ParentFolder = Übergeordneter Ordner +NoSubfolders = Keine Unterordner +NotConfigured = Nicht konfiguriert +ErrorFolderNotFound = Ordner nicht gefunden +Go = Los +QuickLinks = Schnellzugriff + +# +# Folder Validation +# +FolderValidation = Ordner-Prüfung +FolderOK = OK +FolderNotFound = Ordner nicht gefunden +FolderNotReadable = Ordner nicht lesbar +FolderNotWritable = Ordner nicht beschreibbar + +# +# Email Notifications +# +NotificationSettings = E-Mail-Benachrichtigungen +IMPORTZUGFERD_NOTIFY_ENABLED = Benachrichtigungen aktivieren +IMPORTZUGFERD_NOTIFY_ENABLEDTooltip = E-Mail-Benachrichtigungen für Import-Ereignisse aktivieren +IMPORTZUGFERD_NOTIFY_EMAIL = Benachrichtigungs-E-Mail +IMPORTZUGFERD_NOTIFY_EMAILTooltip = E-Mail-Adresse für Import-Benachrichtigungen +IMPORTZUGFERD_NOTIFY_MANUAL = Bei manuellem Eingriff +IMPORTZUGFERD_NOTIFY_MANUALTooltip = E-Mail senden wenn ein Import manuellen Eingriff benötigt +IMPORTZUGFERD_NOTIFY_ERROR = Bei Fehlern +IMPORTZUGFERD_NOTIFY_ERRORTooltip = E-Mail senden wenn beim Import ein Fehler auftritt +IMPORTZUGFERD_NOTIFY_PRICE_DIFF = Bei Preisabweichungen +IMPORTZUGFERD_NOTIFY_PRICE_DIFFTooltip = E-Mail senden wenn Produktpreise um mehr als den Schwellenwert abweichen +IMPORTZUGFERD_PRICE_DIFF_THRESHOLD = Preisabweichung Schwelle (%) +IMPORTZUGFERD_PRICE_DIFF_THRESHOLDTooltip = Prozentuale Preisabweichung ab der eine Benachrichtigung gesendet wird + +# Email content +NotifySubjectManualIntervention = Manueller Eingriff erforderlich: Rechnung %s +NotifySubjectError = Import-Fehler: %s +NotifySubjectPriceDiff = Preisabweichungen erkannt: Rechnung %s (%s Produkte) +NotifyBodyManualIntervention = Der Import der Rechnung %s von %s erfordert manuellen Eingriff. +NotifyBodyError = Beim Import der Rechnung/Datei %s ist ein Fehler aufgetreten. +NotifyBodyPriceDiff = Bei der Rechnung %s von %s wurden Preisabweichungen von mehr als %s%% erkannt. +NotifyLinkToImport = Link zum Import +OldPrice = Alter Preis +NewPrice = Neuer Preis +File = Datei + +# Price comparison +DolibarrPrice = Dolibarr Preis +PriceIncrease = Preiserhöhung +PriceDecrease = Preissenkung +NoPriceFound = Kein Preis + +# Test Email +TestEmailNotification = E-Mail-Benachrichtigung testen +SendTestEmail = Test-E-Mail senden +TestEmailSent = Test-E-Mail erfolgreich gesendet an %s +TestEmailFailed = Test-E-Mail konnte nicht gesendet werden +SendTo = Senden an +NotifySubjectTest = Test-E-Mail Benachrichtigung +NotifyBodyTest = Dies ist eine Test-E-Mail vom ZUGFeRD Import Modul. +NotifyTestInfo = Diese E-Mail bestätigt, dass die E-Mail-Benachrichtigungen korrekt konfiguriert sind. +NotifyTestSuccess = Die E-Mail-Konfiguration funktioniert einwandfrei! +CurrentSettings = Aktuelle Einstellungen +NotificationsNotEnabled = Benachrichtigungen sind nicht aktiviert oder keine E-Mail-Adresse konfiguriert +NotifyEmail = Empfänger-E-Mail diff --git a/langs/en_US/importzugferd.lang b/langs/en_US/importzugferd.lang index 86fda5a..8dc2348 100755 --- a/langs/en_US/importzugferd.lang +++ b/langs/en_US/importzugferd.lang @@ -35,6 +35,8 @@ IMPORTZUGFERD_WATCH_FOLDER = Watch Folder IMPORTZUGFERD_WATCH_FOLDERTooltip = Folder for incoming ZUGFeRD invoices (local path) IMPORTZUGFERD_ARCHIVE_FOLDER = Archive Folder IMPORTZUGFERD_ARCHIVE_FOLDERTooltip = Folder for successfully imported invoices +IMPORTZUGFERD_ERROR_FOLDER = Error Folder +IMPORTZUGFERD_ERROR_FOLDERTooltip = Folder for failed invoices (not ZUGFeRD or import errors) IMPORTZUGFERD_IMAP_ARCHIVE_FOLDER = IMAP Archive Folder IMPORTZUGFERD_IMAP_ARCHIVE_FOLDERTooltip = IMAP folder for archived emails after import @@ -109,6 +111,7 @@ SupplierCustomerNumberHelp = Your customer number at this supplier (used for aut # Cronjob # ImportZugferdFromMailbox = Import ZUGFeRD invoices from mailbox +ImportZugferdScheduled = ZUGFeRD scheduled import (folder and email) # # Errors @@ -213,3 +216,131 @@ ImportRecordCreated = Import record created ErrorNotAllProductsAssigned = Not all products assigned BackToList = Back to list ErrorRecordNotFound = Record not found +FinishImport = Finish Import +ImportFinished = Import finished +ImportLinkedToExistingInvoice = Import linked to existing invoice %s + +# +# Datanorm +# +DatanormCatalogs = Datanorm Catalogs +DatanormSettings = Datanorm Settings +IMPORTZUGFERD_DATANORM_MARKUP = Price Markup (%) +IMPORTZUGFERD_DATANORM_MARKUPTooltip = Percentage markup on Datanorm purchase price for selling price +IMPORTZUGFERD_DATANORM_SEARCH_ALL = Search in all supplier catalogs +IMPORTZUGFERD_DATANORM_SEARCH_ALLTooltip = When enabled, search all Datanorm catalogs, not just the current supplier +UploadDatanorm = Upload Datanorm +DatanormFiles = Datanorm Files +DatanormFileHelp = DATANORM.001, DATANORM.WRG or XML files (Datanorm 4.0/5.0) +DeleteExisting = Delete existing articles +DeleteExistingHelp = Deletes all existing articles for this supplier before import +DatanormImportSuccess = %s articles imported successfully +DatanormImportFailed = Datanorm import failed +DatanormNoArticlesFound = No articles found in Datanorm file +NoDatanormData = No Datanorm data available +DatanormDeleted = %s articles deleted +DatanormDeleteFailed = Deletion failed +DeleteDatanorm = Delete Datanorm catalog +ConfirmDeleteDatanorm = Are you sure you want to delete all Datanorm articles from %s? +DatanormArticles = Datanorm Articles +ArticleNumber = Article Number +ArticleCount = Article Count +LastImport = Last Import +ViewArticles = View Articles +TotalArticles = Total Articles +DatanormSettingsInfo = Price markup and search behavior can be configured in module settings: +CreateFromDatanorm = From Datanorm +CreateFromDatanormHelp = Create new product from Datanorm data +ProductCreatedFromDatanorm = Product %s created from Datanorm +DatanormArticleNotFound = No Datanorm article found for article number '%s' +CreateAllFromDatanorm = All from Datanorm +CreateAllFromDatanormHelp = Create all missing products from Datanorm data +DatanormBatchCreated = %s products created from Datanorm +DatanormBatchAssigned = %s existing products assigned +DatanormBatchErrors = %s products could not be created +DatanormBatchNoMatches = No matching Datanorm articles found + +# +# Scheduling +# +SchedulingSettings = Scheduling +IMPORTZUGFERD_IMPORT_FREQUENCY = Import Frequency +IMPORTZUGFERD_IMPORT_FREQUENCYTooltip = How often should folders and emails be checked for new invoices automatically +FrequencyManual = Manual only +FrequencyHourly = Hourly +FrequencyDaily = Daily +FrequencyWeekly = Weekly +ManualImportTrigger = Manual Import + +# +# Folder Browser +# +FolderBrowser = Folder Selection +Browse = Browse +SelectFolder = Select Folder +SelectThisFolder = Select This Folder +CurrentPath = Current Path +ParentFolder = Parent Folder +NoSubfolders = No subfolders +NotConfigured = Not configured +ErrorFolderNotFound = Folder not found +Go = Go +QuickLinks = Quick links + +# +# Folder Validation +# +FolderValidation = Folder Validation +FolderOK = OK +FolderNotFound = Folder not found +FolderNotReadable = Folder not readable +FolderNotWritable = Folder not writable + +# +# Email Notifications +# +NotificationSettings = Email Notifications +IMPORTZUGFERD_NOTIFY_ENABLED = Enable notifications +IMPORTZUGFERD_NOTIFY_ENABLEDTooltip = Enable email notifications for import events +IMPORTZUGFERD_NOTIFY_EMAIL = Notification email +IMPORTZUGFERD_NOTIFY_EMAILTooltip = Email address for import notifications +IMPORTZUGFERD_NOTIFY_MANUAL = On manual intervention +IMPORTZUGFERD_NOTIFY_MANUALTooltip = Send email when an import requires manual intervention +IMPORTZUGFERD_NOTIFY_ERROR = On errors +IMPORTZUGFERD_NOTIFY_ERRORTooltip = Send email when an import error occurs +IMPORTZUGFERD_NOTIFY_PRICE_DIFF = On price differences +IMPORTZUGFERD_NOTIFY_PRICE_DIFFTooltip = Send email when product prices differ by more than the threshold +IMPORTZUGFERD_PRICE_DIFF_THRESHOLD = Price difference threshold (%) +IMPORTZUGFERD_PRICE_DIFF_THRESHOLDTooltip = Percentage price difference that triggers a notification + +# Email content +NotifySubjectManualIntervention = Manual intervention required: Invoice %s +NotifySubjectError = Import error: %s +NotifySubjectPriceDiff = Price differences detected: Invoice %s (%s products) +NotifyBodyManualIntervention = The import of invoice %s from %s requires manual intervention. +NotifyBodyError = An error occurred while importing invoice/file %s. +NotifyBodyPriceDiff = Invoice %s from %s has price differences of more than %s%%. +NotifyLinkToImport = Link to import +OldPrice = Old price +NewPrice = New price +File = File + +# Price comparison +DolibarrPrice = Dolibarr Price +PriceIncrease = Price increase +PriceDecrease = Price decrease +NoPriceFound = No price + +# Test Email +TestEmailNotification = Test Email Notification +SendTestEmail = Send Test Email +TestEmailSent = Test email successfully sent to %s +TestEmailFailed = Failed to send test email +SendTo = Send to +NotifySubjectTest = Test Email Notification +NotifyBodyTest = This is a test email from the ZUGFeRD Import module. +NotifyTestInfo = This email confirms that email notifications are correctly configured. +NotifyTestSuccess = The email configuration is working properly! +CurrentSettings = Current settings +NotificationsNotEnabled = Notifications are not enabled or no email address configured +NotifyEmail = Recipient email diff --git a/sql/llx_importzugferd_datanorm.key.sql b/sql/llx_importzugferd_datanorm.key.sql new file mode 100644 index 0000000..fd1a842 --- /dev/null +++ b/sql/llx_importzugferd_datanorm.key.sql @@ -0,0 +1,13 @@ +-- ============================================================================ +-- Copyright (C) 2026 ZUGFeRD Import Module +-- ============================================================================ + +ALTER TABLE llx_importzugferd_datanorm ADD INDEX idx_datanorm_fk_soc (fk_soc); +ALTER TABLE llx_importzugferd_datanorm ADD INDEX idx_datanorm_article_number (article_number); +ALTER TABLE llx_importzugferd_datanorm ADD INDEX idx_datanorm_ean (ean); +ALTER TABLE llx_importzugferd_datanorm ADD INDEX idx_datanorm_manufacturer_ref (manufacturer_ref); +ALTER TABLE llx_importzugferd_datanorm ADD INDEX idx_datanorm_matchcode (matchcode); +ALTER TABLE llx_importzugferd_datanorm ADD UNIQUE INDEX uk_datanorm_soc_article (fk_soc, article_number, entity); + +ALTER TABLE llx_importzugferd_datanorm ADD CONSTRAINT fk_datanorm_fk_soc FOREIGN KEY (fk_soc) REFERENCES llx_societe(rowid); +ALTER TABLE llx_importzugferd_datanorm ADD CONSTRAINT fk_datanorm_fk_user_creat FOREIGN KEY (fk_user_creat) REFERENCES llx_user(rowid); diff --git a/sql/llx_importzugferd_datanorm.sql b/sql/llx_importzugferd_datanorm.sql new file mode 100644 index 0000000..c914291 --- /dev/null +++ b/sql/llx_importzugferd_datanorm.sql @@ -0,0 +1,34 @@ +-- ============================================================================ +-- Copyright (C) 2026 ZUGFeRD Import Module +-- +-- Datanorm-Artikeltabelle: Importierte Artikeldaten aus Datanorm-Dateien +-- ============================================================================ + +CREATE TABLE llx_importzugferd_datanorm ( + rowid integer AUTO_INCREMENT PRIMARY KEY NOT NULL, + fk_soc integer NOT NULL, -- Lieferant + article_number varchar(128) NOT NULL, -- Artikelnummer (Typ A Feld 2) + short_text1 varchar(255), -- Kurztext 1 (Typ A Feld 4) + short_text2 varchar(255), -- Kurztext 2 (Typ A Feld 5) + long_text text, -- Langtext (Typ B) + ean varchar(32), -- EAN/GTIN (Typ A Feld 17) + manufacturer_ref varchar(128), -- Hersteller-Artikelnummer (Typ A Feld 15) + manufacturer_name varchar(128), -- Herstellername (Typ A Feld 16) + unit_code varchar(8), -- Mengeneinheit (Typ A Feld 6) + price double(24,8) DEFAULT 0, -- Listenpreis (Typ P) + price_unit integer DEFAULT 1, -- Preiseinheit (Stück pro Preis) + discount_group varchar(32), -- Rabattgruppe (Typ A Feld 8) + product_group varchar(64), -- Warengruppe (Typ A Feld 9) + alt_unit varchar(8), -- Alternative Mengeneinheit + alt_unit_factor double(10,4) DEFAULT 1, -- Umrechnungsfaktor + weight double(10,4), -- Gewicht in kg + matchcode varchar(128), -- Matchcode für Suche (Typ A Feld 3) + datanorm_version varchar(8), -- Datanorm Version (4.0, 5.0) + import_date datetime NOT NULL, -- Importzeitpunkt + active tinyint DEFAULT 1, -- Aktiv/Inaktiv + date_creation datetime NOT NULL, + tms timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + fk_user_creat integer, + fk_user_modif integer, + entity integer DEFAULT 1 NOT NULL +) ENGINE=innodb;