We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 14767
    • 15 Posts
    Hi,

    We are about to take on a project for a customer in wich i wanted to use modx as base.
    In this project we are going to use a lot of code we previously built as standalone PHP.
    that is completely custum code that uses data coming from an offline system.

    you can guess we want to protect our code from getting ripped by the customer or others.

    Is there a way to secure, compile or whatever our code used in the snippets and so on, without damaging the ease of use of modx?

    Thnx in advance.
      • 22098
      • 218 Posts
      there are PHP compilers/encrypters out there you could use....

      Olaf
        • 27376
        • 576 Posts
        This is weird... I’ve spent the last few months for the same thing you are and have been unsucessful. Just now I thought I’d do another search and BAM!

        TRYNT PHP Compression Web Service

        Enjoy! If you find one better, please link smiley
          • 31337
          • 258 Posts
          Just remember, that obfuscation makes it more difficult to get to your code but certainly not impossible. If someone really wants access to your code, it’s really, really, not that hard at all to get to it.
            • 30223
            • 1,010 Posts
            Well, lets test that... here’s a challenge,:

            <Trynt>
            −
            	<PHP-Compression>
            <Original-Size>865</Original-Size>
            <Compressed-Size>347</Compressed-Size>
            <Compression-Ratio>40.12</Compression-Ratio>
            −
            	<PHP>
            <?$x="RU5bCsMwDLuKPsJoYTtB6GDb/64QQuZ0hTWBPEqh9O6rU9L6x5Zk2YL56RhB1ofxqSM9TBq8ezG5YNIBYv".
                 "Sf+QrBC1sz3tmh54FX3nokCZtdcUGpTY4pZJOaS3G0CyDSd4i3O0N0Oy0ruZ+rdMWHzL9PkdHprP/R9ZRU".
                 "gU3RWgmsRyaayeREDSfhWtc/";
                 eval(gzinflate(base64_decode("U0grzUsuyczPUygpqswr0VApLinSVKhOLUvM0UivysxLy0ksSdVISixONTOJT0lNzk9JhajR1LRWqAUA"))); trynt($x)?>
            </PHP>
            </PHP-Compression>
            </Trynt>
            


              • 31337
              • 258 Posts
              PHP is an interpreted language. So no matter how tricky you encode something, it still has to decode to ASCII strings for the interpreter to parse. And if you make an interpreter level obfuscation tool, then if someone can access the byte code level (which is trivial to do) they have the workings of your program. In fact, even in a non interpreted compiled language this is possible with an assembly level debugger. For the record, your compression is trivial (at best). It’s just a uuencoded string that’s gzipped. That takes about 3 seconds to get to the raw code.

              Or did you mean to imply something else with your code example?

                • 22303 MODX Staff
                • 10,725 Posts
                <?php
                function trynt($str) {eval(gzinflate(base64_decode($str))); } 
                class eformBaseActionClass{ 
                    var $modx, $form, $config, $className; 
                    function __construct(&$form) {  
                        $this->form =&$form; 
                        $this->config =&$form->config; 
                        $this->modx =&$form->modx;
                        $this->className =get_class($this);  
                    }
                    function execute(){}
                }
                ?>


                Not much obfuscation there... wink
                  • 25663 MODX Staff
                  • 12,272 Posts
                  I’m definitely not a coder by an stretch, but even I managed to come up with the following that shows how it’s reversed:
                  <?php
                  
                  $x="RU5bCsMwDLuKPsJoYTtB6GDb/64QQuZ0hTWBPEqh9O6rU9L6x5Zk2YL56RhB1ofxqSM9TBq8ezG5YNIBYv".
                       "Sf+QrBC1sz3tmh54FX3nokCZtdcUGpTY4pZJOaS3G0CyDSd4i3O0N0Oy0ruZ+rdMWHzL9PkdHprP/R9ZRU".
                       "gU3RWgmsRyaayeREDSfhWtc/";
                  
                  $partA = gzinflate(base64_decode("U0grzUsuyczPUygpqswr0VApLinSVKhOLUvM0UivysxLy0ksSdVISixONTOJT0lNzk9JhajR1LRWqAUA"));
                  // which results in:
                  function trynt($str) {
                      eval(gzinflate(base64_decode($str)));
                      }
                      
                  $partB = gzinflate(base64_decode($x));
                  ?>
                  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
                      "http://www.w3.org/TR/html4/loose.dtd">
                  <html>
                  <head>
                      <meta http-equiv="Content-type" content="text/html; charset=utf-8">
                      <title>snippet</title>
                      
                  </head>
                  <body>
                  <!-- after figuring out part out and adding it to the php bit, I added in partB -->
                      <?php echo $partA . "\n"  . $partB ?>
                  </body>
                  </html>
                  
                  
                    Ryan Thrash, MODX Co-Founder
                    Follow me on Twitter at @rthrash or catch my occasional unofficial thoughts at thrash.me
                    • 30223
                    • 1,010 Posts
                    Quote from: vbrilon at Jul 23, 2007, 09:17 PM

                    PHP is an interpreted language. So no matter how tricky you encode something, it still has to decode to ASCII strings for the interpreter to parse. And if you make an interpreter level obfuscation tool, then if someone can access the byte code level (which is trivial to do) they have the workings of your program. In fact, even in a non interpreted compiled language this is possible with an assembly level debugger. For the record, your compression is trivial (at best). It’s just a uuencoded string that’s gzipped. That takes about 3 seconds to get to the raw code.

                    Or did you mean to imply something else with your code example?


                    No not at all, I was just teasing grin and it worked.
                      • 27376
                      • 576 Posts
                      I mostly use it for compression :-/

                      It also removes all the comments too though, which add a great deal of size to the file.

                      Try compressing the 0.9.6 document.parser.class.php wink

                      This method also slows down the parser slightly, so you can help speed it up a little by removing the compressed [tt]trynt()[/tt] function and replacing it with the [tt]$x[/tt] variable.
                      <?php
                      /**
                       * manager/includes/document.parser.class.inc.php
                       *
                       * Original-Size: 116365
                       * Compressed-Size: 24937
                       * Compression-Ratio: 21.43
                       */
                      eval(gzinflate(base64_decode(
                      	"7X1rWxtHsvD391c0c1iPZIMQdvacswbhECwnnLWBAE52HyDaQTPAxCONPDMCe73kt7916etcJIFxNrubPE".
                      	"nQ9KW6uru6urq6qloMkyDPxct0OB1F4+IgyPIoE5+ug0wsh+cbQtCv6BryVsRyH/+qxEkyvYzHMolShun4".
                      	"Ir7sifE0SWRSlkO1LMqnCdbP3yfw/yI4T6LBJIsu4g/wGUbn00v8K3HYDeF/8UUcZVbim6i4SkMr4dtoHG".
                      	"VBEdlpO+m4YESLvAgy/DGKx9ynA+hmhMiMgg+lFFV9//znaEi1o9EkAdg6IR/Hk0kkC2CVvEgn++O9tIiH".
                      	"EXxGH6LhFHD5fhplMcF8D78+HscjzB1OswzAHzEQq8G9gPKDJA4Yk+s4j4sU+w252cdJcBlZxV/HeRGPaa".
                      	"imo4kEh9WGV9Pxu51geBUZXNXnkMfk+OOE+4o1v3+tMNxJw4jazYppkLyMsWno+jC6SpMwosnLf86HWTyh".
                      	"hqyfSRqEUWgl6JkKJnLuL9LsJsjCvCeeAc1cTMfDIk7HJVprtcWn5eIqzle3EGT/A2CbQ7GW//Kb7YNdvy".
                      	"3STIRx1PJ30mkSinFaCCwoKFsQ+Xb8NjQgoYTnO5IMH+mU1S0mTVNKId4TQZYFH0WrvSFz8uYst89WvoJK".
                      	"6wToP7oRRx9zICNaHVaBPhd4ZJc3SFkrygb+dTyOB3lUtLwiC4bvBlGWpVnurQhv3cOO35qxdYcQ6LIYA4".
                      	"3BEF8m6XmQwCwFsPqA2gYFEMSGyG/iYngl7JJiCNlCjr54Hl+I1lI8HibTMBqk42Ek3uy//Mvgm+2j/uBg".
                      	"+/g70fFHwRgINVuTpfK1CDFA8lkLz4NJ3PFFx20YKnV45qBOZ3I1gWnOomKajcVFkOTRhplMHk3CZkOVKb".
                      	"IpFDnPouAddJ/xfcNIPATSMquDqC+EpazAqBpE6vENo4sAuKF47oK6vdWTeBkVb+JhliL7wOWRwLqHKZrm".
                      	"0RDXYzRs90T0YZLA2m35wl8RIyxdUOm2brTVugBqKNqCKoon+hMBQHu6uRy6fRiFcQa8DVrJEuIa03ExCA".
                      	"rkhEjpXeSKMHE94fvM0CfpOI+QfWASIIlDjoU/CoLRhqRSByP4w+VK4EWvJ9aR8hSn3JuOzqNs/0JhBQjE".
                      	"wKtxEAaH/e/f9o+OT3xYBf5ZW7woJ4nn3Q3BrTRAE1vPDNMZRXkO8/X9NC5aviqCwyKxA/TjJArFqpgkEV".
                      	"IarK1pFoniKhKK5YmP6fTUx8TsIzBoUaQwCQwJf0cfYALzjticbNkNvD18/Vxsxlu4OmDEgCY31+KtzbXJ".
                      	"FrIzOVzNnXgCg8YdzYtskuZy6rwXXltsdbGDBLQnPBiW5qH1TFMLl7+9pfGllQxz5x/2X+4e9neOYSZeHf".
                      	"aPvkN6WL6KgFlmmBtdAL1cPRfdDehyT3ZXNtsA6E3/eNuFsolJ4rvj44NVmO7dH3qehOuJnf294/7ecc+D".
                      	"ibdagAH1xNqWvyGi4VUqJKgNnI5iduvf9bdf9g998Y9/CEXSWAhpWihGSryMFwvs2fRTzsb0HCZEzgasG/".
                      	"hIIuDFqgJAgcbMJ9I9/O0ZOKLjwKgCAOyr83469hByj9ebM3av02GAJPdcuINfvwj2UuRjSTyORJAk6Q0Q".
                      	"fzw2BA3Vab+VRGCzAvHokcHKzlgR/rMuzOeSRg/wY/TcgghXpfNfs3cC1OIgS4eAa6vtMEzkYK9Y2Ggtx2".
                      	"Ezg5KQlGAi14mb2BPlUqvrZj+qyKhQPA4r+SyuQstx6FcyWYzU7QC7f+nktLDWCsJtS07mDFHzyKmByqJJ".
                      	"kEWHMhcHC2m+ZbiKBODjclpb73TFH7tdsQuCYjYG2j6Ksms4BPRRzMCZJulr82p9q394uH/4XBynqYAt76".
                      	"OQI6RYZb60uQalgM0dA3PMIpAwYeMaarHtPIIPkKwjkJRFOI2QNxYK1hTY6hDn9mKaVAB3NFd0J51QPADK".
                      	"bdEy4u7H4+v0XcSSl78/xmwQ1F/BlhPacqJDNJzEQiLtI2k2QOkbtpMXszKflzJpCdPZwz8Dotfj+1X3Kw".
                      	"FICI2FnhCnP2/HwRQIJ4v/HoULdMsu7itacRGaWkUk0rQ1lBrSxDijnsMzG4dkIeh2BWv/mVfNHl2oVjuT".
                      	"ZSBmFtZhFtZFecz0RFgnFDpCjHElGvYgDxGcqpd0ZtiFKkACuQ0LD4UfW3j2NTKRVee9yd6wRXlgtmkW7q".
                      	"CkBCs9r60LrOOwVMyBcRGBdH+Y3rT4HD5ibggSbTr0GwE6xV14wcUF9D8KoUw+C6ntcjkHSgxMKQMWOgvC".
                      	"rl2mMjtJmkeluQnj3JoeR5g+igo8N+ctuQssxfmATlcuHbed/d7OULuHPCsAX78AmXDAcl2rcrRAvUKRrw".
                      	"3xBL6GNEtn8U4cfuBDBCJuQDnHlLsDk7LAkoaI0FnhYpEm06B/1H8N8g2wGhqQwZj0D+rrOkiAJ7863H9D".
                      	"YoLenF5Nk+QYVTaormj5OR1sB7JW7qM4cnMF44H7VHpjtk9De1L945+nxRV331nXWO2ke3YGVfHXOq7t2w".
                      	"rLKNIRLv/hFaoNgAGI3qNSEaDXDybfcHqVrwQoH1oy4wwS40ZtyUkA2DpFcUoqZZXUpose7R5LqHj0yhT1".
                      	"WSd6JqbQlgBep3Dyfws0v/uyRSMENY/pwFVTBjNakt+rg5Es30YZTH2QVCsPp35bGJj+6DLz5X7hlIVkAi".
                      	"C3nPybYPgOuCuhVLcRefvjbyLYrSN56kWOuzuOC0/RpT63HfWPjnb39050ex3/bZ6xquYI50v12ozXowVq".
                      	"uedKuy830Tn2mdirPYolcoZiAzggZxZBQyPix+/6h30BmZjXO/VxRcQh5MBP2DSwybmgG8HWwnyQRUso3X".
                      	"1B2uNetxzrCA1qzZ+engMat8ZbS36I81cZqSeBwIjsgP6alwVRJ1HJqHlZVegNa9UQ2qiJ0qrljYDyEBNO".
                      	"XVRzroT7B5p36NidOfGcmb+dNTJQblQ3vUtqF7Vzq+ubJm4wijIQdJ2iKw7VkNjvMN1SVTurpqotCrx0zm".
                      	"ckXjtUo1VJ75lOpGzikYresyTgag04szlV4tCoVlTaOB1HXhNO5kwJo0H4EdOFU6Nz2pwlEmt1rq7PylFC".
                      	"34fTSj0wlJ+ifBjArlIaAq21ZDjQR6VczQdjwDqLh3VjYAnm1hHNLKQSGvG4AHquAILysvVbJSM6FR2hEo".
                      	"Si4bsjOD+i4lsKbLXM4AcYjBAvjpzpYhWtO11VzSw1cpBF13F0oxpRE+K2DzsQgiwjojv4dzwpIctzktSG".
                      	"DSf4a39B5OpTywMDZHJUBMWUhGDSNPFnI0FBni85v1Vcq2qrmNWU7FqyhDs+9SBMYs3QJ1Ewrlsq7/czlN".
                      	"0/KbajUujiiH+L3sxVA6V6siR8UD/enyit2/u2WF3niVkjeaInlHbuPen3VtfVyfs98M6mglhI1B7QQdKk".
                      	"5SnlTTXCspi5meuJMM5wE0CctBRq57cqaYQN7EIvfF+rKkwuQgEsUdg1cF3FoA0eN6xb6laRDbKIrgnLvb".
                      	"nIYljzyUcUiOUNLypCPA8vHGV7i1bPpxfl6ryWDOd5T2toqaRfk/ekJ8vvURtxp1HHojXDuIS9x6bisTo5".
                      	"vl+x5IAd2HXD3TBvNWFShniGFNGmE2fDrC3UXJfBWCfhWv2j4p7vzTprKs87hVvFJYn5Tag2asZdTzAPPk".
                      	"wzcBkcXiJ5axne3glBl9nRCRkPWAiTDs6vQCjqwS5un6UBchwOPCmDex3URvHZGs7VHtOafcw3kGrGW1sj".
                      	"ANMDKr9IpCkC7G0jvqhDGkZwDhy3qGIXOmlFPPsf0lgG5sLP21xaXR0M4KT5gbA9miTAzLLBYHV1C5eJVf".
                      	"mpXDFDVg4FbUnlaugC4FcA3ezJ++c/91ARC4sLhvnvgCsWMZyLi5z4kyy+hs7iCeuMyFRubyqf0QNm/W2W".
                      	"Tif5YCClgglMQE/fnYKc9m02yW15GiV9XY3UbCF+YSHd/xWPjQ0aW5I83Ch5ZEOIAh5VA5KQZKIIcrH8Tv".
                      	"S2xPJ1m+vpNXe9otu30Hcuc2GjZe0L5pUEgpkaWOj0eRJeNh8mPEVag0vqGp6o8erW0TjyScGTJwWgYzoQ".
                      	"MGh59NB3lJrSffF6983usVjf8NTORXD5ajiJRzHQ4uhj/j5BRjvISIfHJeShXpfjCxRbD1vVYKsLtzLrqQ".
                      	"iHqpgcUyKqMk0d/d8RG19ImirbbMBOP6PCRiPgv9TDbQTrQqU1U8HVocoKzTqIVXIddJovkLjShrWi8czW".
                      	"xLEtJrWu63jueSSdFpOpMqRqLY9TaY2iLxVLmFDxXhlBWd+5kahgQdzIkhDd3p34xCdxPcjteUZRvJ2V0r".
                      	"PK8mcUn0zPkzi/wiOAvfEr+bFEU4YcynBqZlKLmro6D4ILe1HQtZAN4Fvn+r9uZuCof7IE0ujW6nrz5NkC".
                      	"GRbHSif+SgU1Kl5DjXVgls4QzNnZDDBNcNQtJupxlcB/lE4zIy5WQN3KDepnZzc5jC5h546yKNxJYgSCAv".
                      	"90IseUDyFNSIDseql74621Nk/X8NJ0q70We2QIB4z0dHx6uu41d/B2IaQsbBbH5TwNP94Rl4Vo5YmhlVFQ".
                      	"wPqz9WuEByWD+Ja0/F9OT06ftDqPX7RPn5ye/dI01WRzSbDUdiM/UbZYhJis8itsf9TUydkUlUU3GchKb0".
                      	"HobKQkQnB3b3CwfXjUP8RF2EcW4eGu79EUkQJ9qXJPpI0sT0qgzVmVrJXuVEE894roQ7F2VYwS4NPq2l6y".
                      	"11WszjYd0qhuQ8jrj565wam/HVFdVWenkmZjBlfmtgdhnE9Sl3821GCJHacaT5mVvaJUTCrXP80pjYJUER".
                      	"cJXSDLokAz8WRQBJcwvWTMaOcUKZqyZOUcZ235a486T15srPmSzGTRhrInP512/hCs/r27+icxWD0r16qv".
                      	"dJo/oYKr80r+Y/XJPxoKQjdH3A/KJ8LXtj6KNl7i/OQxm/0ERQGb6Yi2ZDyEEBwkEfyh6cpY3KC+NS2CBC".
                      	"0QjV6hZJe4KpPZ1poO98roWU+bToFcOFapPAUbYNglrPo5nDHGxUXL+8PTzlcXIvdsm2ragwx+dWV1dttu".
                      	"ua6kzCTxmnaZCs2VJJYXnrJl9WB9kpTiSeTjyDJVZCAl03DDAkoZZLa4DOKXudd0mZMrTLEZNzIkrNJxBx".
                      	"ztgZAo0jIn9U5+ev/TmRpLtlRPeU+vLVuYwsqYfUbxCZeWAzq7rISsp2l26ZxL8/zoooqDSSHVbKClG8of".
                      	"o3M8YwB3y8jCly4n2SawfqDT8wEUHFwk0/zKtSZgNsnio6VPJSKQ9ohMaV0y26Yb+ZKG1dOXy94ZbNyV+3".
                      	"0JPR5fqkt+pC607t3DOx028xVPyhpNstkapBcXAG6AhbT2toyc2OxpeMToKwWWAH8618EZUPS8twcvt4/7".
                      	"wmu0CfBInyp3Bq/d8cRR/1hoKbu3vmI+0nHP63AnoByfUe8CGQANUH1vurC99/IuEDoKwlKvS3UNnl2p9v".
                      	"l6qelSjsx06o2HvT4taDpEXYhA0KIhEze0FJYcQ1oTe+wLQ3IZ/gABQw1ys+VFqSeiMsxdd5i7anTvAnI6".
                      	"bhjguwDpGCjVQV7/pwwypuOaK993zFqNEtHlq2Acov4wnQBXiLOWBkZI4n6aw1LHKqz9CyMycaxkyLtZOk".
                      	"qTKWyLKvfgKB6EBJhbamuDI8zG1ejBXONKNd8dr9y2ZRBuBHU4LpwazeYaKQiVBrMGTQlDIro0HSfx+J3p".
                      	"LwzQGhLChVRe3t7eDtEUy8ad7fKAcvLtLLNdaJjMparqze5eS5FIW2wfiVGMJMP6qzvRGtN4hWg/i8hesc".
                      	"k/kNVFPA4V7ZJlP3asCEaT3KKu5WI0OZxx3467GvcPi1BZEMcpQTNp2X+Y2723r2lfV2N4QtfslI1tVYbR".
                      	"rDU1kNPPGsoaDvAbHMxpdTin5QGdzhvSqRxUS0muiigfijG6BbEKDCpY+eamzCrSxQ7cg9XgDn8x6YmvL5".
                      	"DHuAuuQSZYEd7NuVbgXkwA2a8vknT4Dj9WxOv9nT8P+n9B77ELOvVysgdVxWl1xzedEB7VKUF6u0eptNqp".
                      	"NVr8WixyTPPdm5/fttrvnpM10xTuKLiOpMhJXNeapPoZNjdRTYqA6v0UTr/XVkKa4QjurcF8JlC5ZRBaKl".
                      	"NZPX8Oar6nLmoQhGNVgpeVaTIdjcstmRVfuqzRcObpRh31uujpezZ1PyShbCgt+RHdasHRwtxu1YHHCjTN".
                      	"+lrOqQ/dnXUBVxkorQm/gJNFbi3CMI4cW3QRkPeD2ziSTmnR1d2qsluodB7OKzYEJc8BRZvSFYP0B9YRh4".
                      	"yqtJ1U/3j7mBQqyid6tq7nKsjfRR9v0iy00BDLKs26DoVhsK+0/yxLkAcjmi8FUNg7LQT+FKimEKeeAnPq".
                      	"CblvQeKylXo69mr0yvW4+V1fXWc1lsfGUZ9k9wW/bYWuHiKcK329iKXobnFMd4vDNKH5CC5dZRSkw/QFl/".
                      	"KWJ7gku76e0Bn0TTouhFh8THTmVVFMBtH7aXyNTir0ucqf4rmPA+argSSnPjWUGg4OHfx2x1K1qMbydsZg".
                      	"2oNjDSY1iWtXEozoVfTXlibdOz1dPx2fFrByWK3F1S0nfOPRqpMcwy+HXvXFlUWuy7LpOZrsx6zJfqw02R".
                      	"KAo71evg6ACQDzJH+LnpBCg9JPr9MsLrillB2QPSIfNAznU0QsNt3mMO3JE+wQkHFPWK2eLMdIIZSsjAjg".
                      	"g8yT1unW3/8vX7xwsiD9Of7C9aKIrnaqsZC+OdVX41iDjim294Kzq4FklgD+eQd6BagqH2qUJefXGaYjGJ".
                      	"8wt2otg0zorXe7f8DfMLjesy6e1xXysBKPf0ClZxJ8fEUtSizp1kD+XDc/n5qfz8zPr8jqUFEMjmtPZpFo".
                      	"KmlixvWEqjqXgF36VQarC9JvzeWMe+4zZN1qnQSrfz8dnCFxt5uJm8wCNRaN1F0hUaeOJlHEhm10gXq0BY".
                      	"1LsSvu+sD93h13Z/WUKp991nzczp2QHQqpoWZDcsjPm4xPn4jD3N7SFAx1rJIvNwOuJtpECakMZtvqmTv4".
                      	"zXXMAcgRQB8vePDEKy0ZqsSROu9escO3GVCRjVbYknmAt0HjyzLRYQV/w2t2t5BS6bK0g9FXh7aXnTqI0n".
                      	"7HhjCblrw1Y9B6ZG/hDrVnueDPMts3N+8zGyDTfV+OEEkO7sSWs+Ecp4hxsXWkFoO1jIZKyi3vywcmlszD".
                      	"Lqbq1XP9ghouvIyG9g57zeauDTutuxdKcwUrag7dn1bZH+27dcWB81336nLszXf5mrz70ZedzI2ce3QibW".
                      	"XLV96+kFV+iRmOYGM8oJA1LRkMSoYTmgRZMEJzuGXptdcjZ9IPKvDNBn/K+Ddk6gHlMZd/VQ6FEiBAjD7g".
                      	"YadQSSui/5fjw8HRn3cPENv0nK26yZwMsBM2YnSwyEEAh1LAW5TqiwR3eeNDRubKsw4L29aNIIZw6B1IVx".
                      	"raJWVQYWeuCP9lBBQ7JC8Dx8wkSS/5HLa+Ip6B9HsunJriXJxn+C+2bc5HfR4m6Hd8HfGII8NcFfxbKxjk".
                      	"cc/22itBSCIYHG8b5g5bFOmQwnyEUuOL0YNQMXfAkU7yiMOcsF4IUKdFM4IzDohwLNWR8oexbRvLX75bg0".
                      	"RI0rRanXDnZg2nS4a0aqkYVr8VUiJ8eoqiJHL/uuTkxiNjSpIfvyFSmk04ii9hLzs0JQ3ElLd0ZDI2IoPx".
                      	"q9tNTng3OZO7iVvHPQRqSlQkaIyaGuU2tj12dxxTw2w8aLRBTJrIoCww+y8At6622oUyVkgVslBm6lcnvY".
                      	"rAjVVMRJmSaGTptBUg9vlwy5X2ELV6yPalBHFDh6M7oFJyR1JL83Z5nKlpOk6/jQq118pBqYxYqbgeNlGV".
                      	"du0wePXyrhIiMeWENSZndcdqt5yWnPSGPbMlnqp5RyFYgwdZyvcgVaC49lwkJlAYll8c5QvioRswYru4n9".
                      	"x+L5n9y8vrFtOqk9W1RnSegN1AFCQ089edKcKqWyue33lqLYBmXhVku751RPs1aB2IyXHf8+Z0jpjL7e3C".
                      	"q5z5RlRE7r0yl92zrQXdHa5XP61SNKisTRvLFbeqzTcOdKkK/JlzYNejERDC7pht/WyKtqq1yTDR7eiB5N".
                      	"pVpmsboZvIeE41vr+NdGBRBcwxxXrhSW+8Wgg433gbQh3xHnlueLoKbAD1KBhNNmTAurmNc2Gs5a3UlGaT".
                      	"8hoYiFJLY9ZQ1RkzdxuvK85E+4GJ9gNqYcrVMV1rYhrH4GT5A+7rPdrX1d2KJodjKG65PvVq+40g2BJlYi".
                      	"QHBwTpPf2/+aTX4EKzSxGx4JWTCShH96qJlYC7Urm+kTyqkBHak/UVAkI+s6bMSak4hyAogyBmcatj7R5Z".
                      	"S04vm7pTRJmZrVig21WrSllJ7Rh0lvEu4igJUbxIoksQh0GwtvkOfMp0tNYOsigQfMVyE4fFlfjvrriK4s".
                      	"urQjztdicfcLtEJRbeoPLarusSbnybawre1uaaQmFrEwT6tS1UGpWk1LLZ5IknRWOFZqd22UJDZ2ReWYdG".
                      	"RRQm2dxyx7eyHCVq8C56JZ093x6+BoLIKDjx9OJCRTwmGyTHr5mTTQRTzCbfW3Rh9ugLTW5RikB4omNcly".
                      	"XEDrVgI+IY/VdOAjN9VKV3qhIdZJhma++xrvsIApWQPr90+QcNj6yqJ5TA0Q2AZltKDudU9kRGXiheOEmi".
                      	"46/hpR5GFJEZ2lj+djkewwAtwQnml9ZJd/VPZ0/ap7+cni3FOV4AAgq56k+vuaeONy4bOa+L511apFl0UQ".
                      	"kSUOvmvcHTO7uwcuomXWZE7QL6eoBOT9fPUO92gXHyBqomhcf0TpV1kUtajCK3bYAKFD7GaTG4LyQPY7Sc".
                      	"rvsof7Y9ZZfsfbIG9Fae5T/pVm+RC5cbxMRaTG6FNJxw1rBzWwqzy+bOtetQChaNFOBrtONxGJHd0Is47F".
                      	"HX1v3Pa7uRBYi62CYysKWMS0KxLZUBCYkd50k+nOEL65qqbdzLeVa7MF9mkxk+x22hy1RMSiCV3bHJVKNn".
                      	"qUmsOEYvvHzYMR7SvS6yrHU2onECkRymCUvwvtg/FKYSZEElWOutJdkowEQgUCq8LFv47O4p1AS7CNuHun".
                      	"xoPILhN/z7uv/qWPzfPtZiL2H4d3/Phoul4lCe7OA34s3Thgc+oDR2JLbsf9C+V46Jci0WtSe2UrBDPLBI".
                      	"SWv+NYsqyzcti/tZK5sExH+JoxW0bfIz7KopwIhFqlIyskNQ2IRcq/U3BSqOa3Kr4ICANWF5ylEkTJkztu".
                      	"2wAjDcPoR3uG3U9c/1ErcK1ziJY3jAhmi6NYf60qIorjuPV8Tuq1ZxPezQ3f5Sz/dX9Bf86sgg7QOUv9q4".
                      	"lXO8LY8XGBnULKYuURYNrC4prh0Qu3t7/UNejYsCGqgb65y8IYrrYpLgAqYfHVkIprqH3YS/dnNm7S/cmu".
                      	"S51HvV4pDbG5rWetwW8gFMl5UIi7m2gw6GTJSyL7KjBkzF/FOWYCZKHKdK/gvymrzCZ4hoK7oJlW2UEg0a".
                      	"JTpTqtkvK4GkBGmnrkj9jTT4Up8hW7RUEgasQzXp0ha2vXFbWRlOsDQ3c8XgWLepcyFnU691y861PK0kK/".
                      	"fZlV4prmopGzbNpzo+USlPX3qX3m2pgHSzAeR618B0M+nsyUCaGq1M/ETVtDTOkEFeHJyHp1rkjnzJSoJ9".
                      	"rsSlhQ6Zm+aIx8dJOOrxQbLnD9MkzZ6L//rfp+t/XP+fDX+LHJTFwfbREa5mROXJOp8Zz+GwKOtjHO6LFI".
                      	"O444lEnYdFC9AJxh/b4iaCUxTNKAbkzsgoH5AU2KHOZhhfq+bpIPscra98AZLu5RgwijBeuL9VayWoHK9z".
                      	"KRU2GEwf2MTkMauu98FUrnmVAvXmf3rg68tXzK3mlHetgeYUrtrONldwL6rmAK4zprgjha3BnNbrEurpmb".
                      	"Q+QP4Nq4xJ/hNeiTURfV6g2AUF2mrRPXlCIbI1s8krygOpiDAPBBGo6yjD4HEDjCEfZFELTjMyqdVeEd4f".
                      	"O91OF7WDWz00jEc3SA4zzo5JWUsyXb60YytsEi080V7pD7Zfv25L3/M7VdWPA5UChBPKTdGkzeZrYlPreB".
                      	"HztRE4K0rRB0eKwx/6hyc+/x0c7b86/nH7sE/x58ldO08vitXd3SPn/QV+7qMnTP3v3/YP/zo4Oj7c3fuW".
                      	"zucR+m+VX7N4puYVHwlBc5Svul/RQxlWwh/p5Y53PSMMI57f9o+hrrrVxc+T5Xeo6rNTVTBEndOIIIYKm5".
                      	"z4dKAgdN/DiY1YGY5Ua0aQOROwmS8tnS5+1W63S8pyqxmcO26D4/qZHPSSvnYswN9fW/bf120r0uPyGLHn".
                      	"ERhrCx3dz4PvDuD361fWtUs1gjXGfJ0oBdGGcMN2Kujyt11QB6xSlmSl4JDt2schntGbEPGQXBaugzgh/x".
                      	"w1ULXja8o5Qa/qnCPqY1DaEKRDmVQbYVE3TlHl+FBuSYWP46isjQLpfEz0mwWlhuocw6uuCAoNs/5fOjnW".
                      	"ywIzkGuIGVvXlD6L1WVSYBMKSdscQJAHbB4QDo9bhVI3sk3H7Kaa87ugW79TfE2pe9RKWK5mRcdkRWw52V".
                      	"HGNuHcdOtPbc5UA8wdv4pSgGBa14wNB+eGmGCLtNBU42xGmEalk6gV+6QHkgoU/5kuTQDwdXqJAL+TgefV".
                      	"HWr1HRzLZbGcuQB7soJLzqDWGmKVkMh127NaqnQjCMuegw0Mbe4bQrUTUyE9B/FypnOlPjMAT12fVUHpZl".
                      	"6ZwiqFzoJS8t3sqtWuNp+rID+IslHM8YV9DGM0IPdeWWuBqNSllzjqtl5zH6O8dybs9Qo0ukbR3xXewG40".
                      	"Orl8RVC+17E8DTEv5+cC5UfLyljdonjx1tw6r0PYBbWPZvPE2sWzlPzHatTQOhyULss7mulEa+YQ3s6cPe".
                      	"Oo62XRBYZhGdKmU47nW19b6pNY/Gp0G1aFzJkpeIfXfvOhWgGsG+KjlatgqLRfSvL04ojNikNWh5w16Oad".
                      	"xrkYdlm6NWLcs+66eJNew1EfZzUYQ7nkoz9v4YUA8SouKsu3iVGzE7yzNpv1dhUXX81yvZPHsi+PzzwTpP".
                      	"ZeJmuWyvQONmturU6TNrNeGbmIh8m9bj+2rClwwizsjqEyPdA3picbMT6K7oK8UYepv8jSkQ6UYoVd0BHc".
                      	"dUuLWsw17ZmkldT0aD/pU7/ruWqg2TvxArEhd7QPA/5zm8mwi4P8alqE6c14oCSB6uHeBDOg833jkcN5le".
                      	"qSzCmI8+byEUI2+oBh7LLJCW4Lxnqg/Umm7XLQ6LIxgd65gwkdJEfBpI+PQktDOFmRZcw8CrLhlWxWF5S0".
                      	"owqbin9Grxa3pirUKJyqs56GUALnaRBkmSK7e2KKSJMeKmLFT5ajtLpawpY0T5xnWso1jFxHwHIH3uoHVz".
                      	"ZDbyu4ZdKG+1CYCeNOAxlGE/TipekbYhbUceZvqJ46v8Pc2ZbKKhlv9tiEa8gY9ISbtyERqJk4WWPuvKn6".
                      	"uhU5a7I+TdrwRGfhbMksmiUaCzVJxpti2Da7uEqSI2X6Q8Omf8LEDc1pxS6gDnrUlhOse0ijSGWboWpyMN".
                      	"NIuWomrVlkiUX7NslU557jJjrfJheHZXLBYG0ZCe/s9RGEYQ5S3VWUt+rNmNGrw3kR1vb7x2dc2T2b/bO9".
                      	"n4PrgOP6Pqc2AhTuvcHgR4VGm7aUizHQnKeRtPM/eaV3Y9fpPuB2w3IvJKiULV54N/EYGGEnkY/Ddq7Q0g".
                      	"d3OKtrhChvaGR4RaEmixEOBWNLKAkGhYpTjCaDEQlPPXIQYQcNbPfUg4XUFbKW5xyTLPsJgm6cTYBt22Fy".
                      	"ZbaKESrf9YUk98kT9zCwPCEbLHzTJDLR5ydkKOtIwpawq8MITUZ048116RNY2kgKQ8YNhQo49KNdc5aj64".
                      	"LYCQrBK0KSk9Lv+6zk9jVdNRKTFZ+ytoxWu3OD5lUd+tTnUgwUK51VKZLtur35U658HZtyn+EuJ6Wu3b2j".
                      	"/uGx2N073p8pPZGrzgD6z+JWi75hBKj/Q1jSBYanW5HBHMOISQLGbAWPPW2E7f2w/fpt/0h2hYcO02Xww4".
                      	"4ne8vk5SDjHJW08RaGHvmah+192W1gCXL1DQmdaqQPE79TiZdixm0JBjXV8lPHs94PtR+4NG5T5ectAWYc".
                      	"qtfy0FoIAwuL5+q9GxuGZVOkgCwtBsXe07aTZEfyN35zsEvUlxX40lA0npJlGHk80Rsv20c7PgWJwwsi0u".
                      	"OsCH3UXxH2bAneRFeE1GohNNYI/GomXQbPfNjxRUdZbPkr+L1Sjpz902nOQUfgP2VU7a+Y/pLuXw3OZ0JE".
                      	"KATvP9Hu7OXu0fHuHvyQA7uIFRq+7Npshca0hoZbwjY3+/Zw/+2B+Oavsvj+4cv+IX7S8Au2GF7gJBYxO9".
                      	"lGCca173WMAL6eeVCTlgEsnk0wdKwLeEV83XSMskVTp055MZMH8O/r+ff1/G+2njFF6WrFukqSqmPR/U9e".
                      	"89q2Ra96Hju19k1kXbG+ooPPcp5aTt5jpLybqyhDkdPXHMPTHMNTHMMDjoEf0sKTTzzyQwU7kdcYLzw2Ee".
                      	"VUOiBsiH95RtFiOuqpPkK/Hox3EOugaeAn5dpmUpDCMSI/ff/OZR6Wy6gVU+U1ZvmUmc6y/sETNoMFkQEe".
                      	"Uc0Lr5YdSaclT66ff0f2REozS7258mswJitwb4yHOHkzWHpEVCo/7sDEfudivzEu9p/MxOA3m+z/nMYk8+".
                      	"MlxQrxk38KO/t342a17MycrVxW1cjUlFNSHM7mQsVooiKQxyG74DnhZC1+ykXtRk2LGjFeqeo//RYxgsXV".
                      	"qW6nLcv+nJ79bHg3+ta90EIjnYsURc7LCAdkFTvNcah4ABY6WLK3qvFuv4zmjtKvwH5lP45w9crf6oEfXj".
                      	"sd69EKuZw6asK7eqf4Ajz8P5BtPiS3VBRmJlgs7KLo8q2JXAC9Zs5i7gBU4TJL4dtJoPvPXEBKQWMWEq8i".
                      	"fq6PoDfaamXyEl571k/0CnzB4R2eGzKzlj1dXDC6hkTVMrWRaFzK8nrNJuMm+B7jyaIR9Ufe4Jke4PNZpS".
                      	"R6OOuh+uVMnPSh2CUNvG2j6ARRkMqxeczKhECq91Orc9OUVE3Rz5vCJdWjZPlvetLWpJaGbbc3jktgnofW".
                      	"SWbv7JaE/yMTXKJ61eHi5LyilURBxoaU93+DgV4k+c97m2fmmzxNT/LIieGnqxt2fid0B9nN8SKRIRpwiw".
                      	"qyS/UzB4xGEUv/0pWEAqYaQ2lOqPGXbngoxv+bL1+o9v8m4lyMUzJlwloC+gFofaS084jc0/hJGYVr29dm".
                      	"4ogkn0usp0DmxPYQaMqhLs8RgAydXgpg1AhKx8CgEH1tK0iOJJYhucY8wqOSHMQXvrmu5xbX5b22rLDUY1".
                      	"h2BfqtZ9CCbBd8tAjkR6UKCrK5CzbjOHeAHhqJO7hBMX1qPKVT0wIzha1R1fI7qbXhStyhvzt+PYWfXE4k".
                      	"+88CU4nIwpV13+xQM8pEKEgOiItqz6UgMVFlXlhf2odB4hAkElX7sVaFqZWK1h8m+YC4z8OP9YY0ttF1HK".
                      	"KXvMYJaKIYhyq5fJXmVa8i4zylJGxmYobIy+bInM9OkKas8dRC09oj8mzS/LBVyZVvc+B449+cLW4VihIs".
                      	"0scFSA2+/UJwyVsNRBlZuuM/X1vzWUo3bQ2+2z86psFu7nfd0vqABjSS1MwmXjq3PGq9WMLwa23Yp3QgNu".
                      	"oEtGd7x5DFUHmTaSpYlrh2CKWWfOfWV5Ju9bVlehEAS5HZXEnusLPnb3fQ7A/sRvoyKAIS9RZ5t7P8fMea".
                      	"9EW1X6y4tuMUXqM1bBgNdPBF/YUlT3xZn7Lkb87IR0GSDOxsJ4ULTSiabRJdR4nPlpb6mwsgdQ2CyUQ3by".
                      	"eYQ8x1OYgX8hhk4aRfWZ4mWZribSr+8SmBFzmef6fnA1/aOUkpIc1CfOlcboaYh1Ix4GR7cBjTQfpjTai3".
                      	"OU22NpN465sgFHASLzbX4GNzDVKVy7IhDWi1rQyXYNtBCzWKwYb1ZDg2MiOSxkSWrkFXICNIQDHn35UYAA".
                      	"p7E/wBC8vndagyNsb2carvuLTJOueFLOyliSB/EDWaQmGAT+7geYWLTWcVs01OmcTQQPJd9JG9Tel1lrJh".
                      	"pn6zRWPJ7wZzc6cFDjRKkggFH5Q3ZlWGDjhAipl2XMaEnZVmTN3kEFjzLp48Jb853SZOKL80pLX0s3DjMC".
                      	"wY5UDXu3WrNA775lqabDkjTIREQBT1K0j2IkCjtNfp5WUU7o7puIIJYVQEcVJ+paBOyWJF/DY6lZvo/AfY".
                      	"3UKK6C3dWiywJ34iG8SVylK7m4/HMsd8ESDuYjyGcZD8OWKHaKcCfuil71Q7ukqzQoe2rVRi1x1Yz1AUA8".
                      	"qpobIKOvoANQTGAq52BEaX2QOPAEC8zwhAtUVHQLL8OaMwc6fRz5yxermqNF6eocaRZ3HUDPxZP6jWpHVg".
                      	"wUE/eCZ1pLLeX+ygftWqstbgAxTzK6o6BbMjf1heOAYxtPzcPtJlRTnUkYMK3mQcCWwNQwvpOjAqlKbQ0W".
                      	"o+SpXaX0xdloGOHuBJF+upOndpW5GsKvsC5c2NCFRp4kQHbZYp7CajaEsVK+lcTFiRzyAhN0rcqOg8JrPb".
                      	"xfyp1MNvbN8LtanuXYJZqblzIQ0BEsw//OnIDJjcHmLHl1IyPBQWq5n80NaplSPNuVMvX6Y8tCmA9H/LCq".
                      	"EHmn3VEM6/20BDRCgP8jzawzmoE74MuCI89Syfm6VDRXnmLUCrhPNAYHvDEJbCwQmTOh2X4+bifOkXOGy/".
                      	"l3nB9q36TsRsPSzNxVHnbsfVnlP+XyisvYX1PymmfcNwzgtPP3c+7h+OfgGCqIspPylHUL+1IjobLCsh1C".
                      	"d27HSnhhMhzWSY92esLZ+Bz3quhuq2N8q+ZVNU29LTXUwEcHqwQguYF710kTPr4UA3Btu0DlwJw7o2nQAI".
                      	"ODzlEuQjBb/lvbM82nmfPBm7mb5ulenNku31xbWs05sSgDivNxsvy9dLQqo90ShY7gsk6ihCJxeJ54rQhx".
                      	"WqY1sAUEJpfuhu1VUAyAcq76QFwGe0x/h015oFs6NSpWJATxRd8JMRghC1cXOV0efxDzBbZcvP4joOcd3N".
                      	"tLpKh7UWVZzsGFYV166pQ3Eta2bB+J1JMHXooqLBfKFqreraMaB3+mNfvhojsXHwMs45kKQvpSRNqdfyJP".
                      	"vUe7W5Tm3p7hgbKAz8iXZQ8Ne5qMfvO1zUK8BsbqVGqSV/uSZXn92Ua3SlZ5xaeQzNLJOcAx8UgnNzC59E".
                      	"5UfgZIaj0NT1T7pnckTiEC/s4Qem8+4HElwL9zFtVADIeDa9ab+qB7NTgF/umws06zUqGFXQUsFc29IaFj".
                      	"ik/ZAsXfhVkxAfWOekQ3OpWW+AsPuKQpyyosH+JeyYsPcLCes7IWH9+4eE9etDwvpfJiSs3xwS1r9vSFia".
                      	"kob4r5hP1EuHSIJQCQgrYdB0mtALepnQsjFwjRWbXKSGl4k5cWPlyaHeMq32JRB1HvhQsVaDRmtt1HKyTx".
                      	"PvEKWW7JazJ3JSo46vwhcwIF88VnuzfHdSr962qCCljh/EBAg+VfKsUweTO2B6a1ndQuUSOObJzLtKVneQ".
                      	"3mRuZ+9zHOrzS252v72Nq8znXC7osDqD8rGke2vM9CitGAZ4gjHczuxemO0kb6uZOTHl1fsUmL8h6qbQFV".
                      	"YsPFAPwZc3nlexnZRs2CvbURoVBlm6yA20wTKwdGRym89VMA8Jq22ZSXLz7mSy2aQl3Sv6tUwnX6gB6p4Z".
                      	"D9vbpgHIVdMOnS42Dsb6XUlcDsniGGnodGn5mEwcLCncrHBgANowXu7ZMw0uq6KU2ttZseSpRVOjXHJiTe".
                      	"n9t04BZdorFXMsb+VE0TKrEO2S4o+llXVry35fSPJbzMz+MxtxJb7Pk/c+R9r7YrLeP13s+l3q+iJSV6PM".
                      	"VfLLbJS1FvMGsDbEOrnjS4hX84WretFK4XQn6apmt23Ya9SmX7PhzNlq77Q1pDKYu2XKEGTEZq1xwb0Ix6".
                      	"VmK3qhyz13d+e8bc5mKlgJfUKd0vfzWVvOHJGA0F2x994mIYAtYVkAMBZ8tRLceZAvYLJaVg8hG3V0SxIM".
                      	"GnEq/tTh55AtO5L5VYbpCJoKc6tSg0RZdqaRymMlA+JxWb8EP4A95ArZLptDLKvPKMRYfzIRanv4LgD+hu".
                      	"HwnnW78rUsIJqydhmn5oeX/ILFK+rmF3gDQ82yffpI5fMBt6XV5LJcvJasmBPJuO5kKhXi9JKau/M3KxSg".
                      	"VaLgKNHG8A3NuDve3zxHgTsKJmg9h2cMikuFxrtKbFa6VcqjoPlIZl7HvKZZwFY7iTIVVwrjhe8fyejstJ".
                      	"b9H3f32GozOM/ZJtB5GfD0FEkeLY6BAyYTjUnb8maQNdEVTP1UVs4kpb/w9G8UKcyHMf6yg1/JnpLRKPHR".
                      	"NRRmcDgZP2PK9nJ/5+2b/t7x4HB//xg3FxZvTFH9XKAJfb9zuHtwPHi1+7q/t/2m73PgeN133UlPQ+Fh9R".
                      	"6qvy5RWe80sClbhaYmpkRuDNUMkLwGyIqlBW+E0pOFHGhFagHDZyam6u0XbbulLO2Af6cyfrAsxRd4Uxlu".
                      	"GB+65wKD68CCpayvDf+3qpuNVibWq/a5Uw6yantVmnzGt+06qi1Qw+2hYw8ldy3Va2MkVYNOrg2gvE8S8u".
                      	"0nbPBWWGSv7rTcOSzX8PR8VuhHxnUiDgGYXCbpeZDwChiQ0eQyxSXUCaKjTFPWfMsdqbhyqOBS3q/dBazt".
                      	"cjELNoamldHypOlXkSJby9IRXRwpeuPYZ9J7TFor6K+W+tnm1ydrnAeKlC2FnCNEHM6/45XjM0B7Hb6uZa".
                      	"FXGQUhwnOk08bbWH452apYeQUqxR0219YXt5V+4UB9sZ5RyNcv1TcEXuqd6sSi8eIobrb0BOEeQL/JSFOx".
                      	"C5lJZBZlQIXDeIJBAYUkGIEhW9GUTJVEpx2hYsix1aeCxQEJaUxwzhXNOdHlUL3X9QWHXGweNVsNVo7I9m".
                      	"l5pGMN4uju7g3ebO9tf9s/HLzZf9mnXRrN2nxZlE3csOTR3u7BQf94AOPWP9zeOd79oV+pgjW8GK3dgmGh".
                      	"NABu5aPj7devmyrmRZAkniUfjcqswg6jt0znSBQDNRdVSbXGfTqz45ds/FRzdUVLxntlR4v7GFVWmqsxk6".
                      	"y2c2fLxWozVVvE24bhVa5zX6Knjl3jl+qn20hDL49hCT5cL6Up6sP1yLLsdG04pXVJ2U6AnUinMQWjZWb3".
                      	"/4Tzj2Tgo2lH8eEV/EDHNbTpw4+g87hU6R68HuCUgCxohkdMNyiKLD6fqhjngBNqlPBPLKkXhbTR1DhY82".
                      	"/s+oL3ZuUXQo3HKZvUzbFhyrXWFw94njLH9dBBqZSCtz48PpaFBZSpzOCP0fmdJvHGnsQbexJv7jOJQLz2".
                      	"BN7ccwIVmPIk3vAk3pQm8caaxJvf9CRCx2omUFQWoVE6U0SP5DraReW/43Z5B1bzEvXTCA6doBbkR8sUcq".
                      	"IJDCq3Lse9Gc1NcCpz9s5rzjW3Tvexsp/frypbLPfLBaP6VVNAoWzd81xKGz1JAHqmjJ95eGkJMOZ4Bm20".
                      	"7ULjhlIsNxNGRkM52yFfaRGpR+SCxW75YXUlKFGcROmyY76OzFO66rjEhdhGkNKtvGFl4F0SoX6i7nuhz9".
                      	"p0Um2qDZGysWoz0fTsIZsxU6qcM86VO3p1u1PWY1Tvf1ypeHgVjC8jyXAPJN9sLcOJ+OAGtbDj6AZ+EOso".
                      	"HHHZYOzZy86zXiGZOcMWk509rzVTOjuctDeDL4Z34ouhE3zBU9sK93EU/lGNk4o4oB4qU4O2+d+Wp5waXP".
                      	"ScL9JU5CiWLXm2lMT1ytfr3l/TqQjjcOwXIp/AyeriowiEQobUyIg4nSc1PPOMmBrOtwcvt4/7PJJH/WMD".
                      	"ADpCIypbx8tEPdQ9f/5Yq3GrPiG2Q8SlOu6ZaxZEFS86lSW8tH/w1C5u5egkla9ngcpIpNvtDTeCgislWm".
                      	"+vqOod8kyz1tHQQRamFqnfzELTQqFSpZNm/ibCB172L6A4LbvWMjGyPfcSqF020TWF2uVLDbGsOELDdoVo".
                      	"favr1+xY5QJ606ogoVFYYA2XGTRUeDpn1VvxnRxdys3luMzEMcmStgg6JJL4dClU81RMXqpyMtLJPC6xYQ".
                      	"+p6w2ykybT0VjeBq6oF3jE7PHsGXhouKw1qmZSWamqXhulXVJdUoKAOGpB6oqwx98h6bIxhXEMUS8w7Bwd".
                      	"gVyYDVGNF4Vx0LNUqrYvSJIGYRT+zNGL8hOswpLHzHzrwDWjnK0nkVE57Fc1oAi+BLxJ3r6e9TwXKnlnlM".
                      	"eIKl7pdVypxNXtK4M3N5l2awBTUf4uUA99hkXHp9ah/0mPHZbzqyiCDPKi9lA3sjbEh4jodQ7P72BrHeCb".
                      	"fqfF8yBe+DwfmEm/KJueqOz4a1ulI6x5UaMIsmI6UQ9r8MxOkiCWuh5bkNZe1jhiZHNUfduSAdTNXdsVxx".
                      	"+KAAyyytlXPxuy+LSVHn6rpSaq49LHvdq5Sy1FHPK9FIsazEsxngDQMO2CiAJKe1uba5zVPOuLTPevN1H1".
                      	"I/HQ03SXVhav8xBT1Lwuvzt+8/qbJB2+k2/eaNbStICx1AqPbj3gBSDOAYW+bBP2PeUiy0GCsxAq+0B+BT".
                      	"6eDIqaQrSB91xDOP+X05PTx63O4xft08enZ7/4bI6xXLDkV1f6hEufLVZ6iUsvLVa6xaXbi5V+wqWfLFD6".
                      	"0ycqe3vrlqx37wrCkORcDLkQjZHGo2vtjZlMQdSQHl98ppaZuMctOfnunr4cGWGLS1EjJ6q+NONSnD6iV5".
                      	"jm1bHO3LI12/4pSlyM6ck8izBH6XVU39Ny58qdUQ/Gz0CtvAqwse0kcduDdhpBtTdqum512H6sxzqcWJMF".
                      	"vOCg1nu2sV9SWp7fuXvMrjTycbxl4OxK5XLteBPp+0CdR37PFU8cna1tiey57iFGyp4Ivh5J3KgKoru6Bc".
                      	"sD+kkJ8s3iNmeMZX3GnNM4VuMBwe/ZDUn9SN2YSX9KU5aVWzIzDaPSiFXLb6iWDqpOsA11alyS7+eRzCAd".
                      	"h2TtYey259PZJIxzhBD2ur+ia/G8saxzLuYCGP3IX3yA7+FkfId5rvUyruBV8TWe4Wpcqqw04Jq7Ks7Qbj".
                      	"vw6h2RbVZiqUTQB5lXRMvqrO2FrGYaVxubwKmw94oZUAwKk22Vx0ENLvFqfEkJberRzuqC9GyVPUN2PZYb".
                      	"fLE/HpF7fJtf+HRGQcVe0GNWqtLmYNqKwSojeu8R2by6ZateWkqqUwDa2mHLifiosk+WP2Bsxx7s3l1mIs".
                      	"ejidVoj7Z0uzStjmu3FMZM47M4Vj9ZP9Nm/lQSEuiuHqMQcfBKTn52pmdND9KJBad7RiKsKqxeS3YBL9UA".
                      	"fnoXwE/pftd+QZUrlC0HdscFsbJDUom6ni9sLeJZbz7Qb+n1MvOpB+4O2W3MdhCSgK0XCtg1g1kop6q3ah".
                      	"wnDl2yKea9Ufwu+hBOs66KTX6avCGMjkr2QmLy7xZwHziORS4WtZADyhgNp8zkl916QN5tUSGZ0EgRsycC".
                      	"IZiJsI2WtDLbCbcmkag1YZS+DzKEWs/Tz+VqSy9lX6iLqohmK9qRRzlQ+HbAM3/F03F7Ml6i8JsfgrBcOR".
                      	"bY+mc4ZE4n4fzpuO/avff0/YssaJeOyvch/zokdD+OM9vNt//B3hM49CmRDKrSlZtKkCtSIzP7WhfSz91A".
                      	"uHGHBEmbbycgIk4CoeOkWNvQvwrZcic6GK28Q/hvmJmE6dlJx2MygMbxkRMjJ0VNyO+71dQm5PvScf3W9j".
                      	"Bkec/98c5kUENS2NDvu6jcRR+YTH71LfchKeI3wwd/35hLhLrw/KJqr8jxusGWf97Ewyw9Jpt5+RqHep4c".
                      	"LQrZNmbYDL3hGQjvVRAn/LgDvxUvJAx29RHFVaToTD3DbjvfcLN5lKCLUnjesig0GoeN6C8XaREk6ADQ45".
                      	"JiVfbY0ZWF09Hk6PvXBnNymEatC83QJtNPJONN93y8DVoNkvhy/DyJLgp/azOJLgH61kuFuunc5prMA9LI".
                      	"JxmsnouWV1MOB+EPubgBIuUBCkU8Fn942vnqQuSanaxYXWpTrGOF29bmeSbWtjjWtenEsey7myKeGDBloQ".
                      	"4dONnBdhQVV6l2N1ZB40glAtQsfx72v3/bPzoevOkff7f/kmiqRiGtQFlujjJNqUr4S7E0XaEEv1r4YP/o".
                      	"2K7waHmASdajFFbhb/vlspAiF7HLMkmJbeFomIkE1+RVruPWSab16JFxliQftu6KUCZf0u+N9LLmQ97Vwh".
                      	"CTRiqOhpGlCFvW0bgJ2lMZeRYBUMmTdetO4ASzbO9BZlezclm9xF1Qk9FUvkY1SP8Y0epq0s+yFF0dkT/g".
                      	"upFusbSvjfXN9JiEoi5vZfzxv5ZxSV6kk/3xXlrEw8i4cJt9TtpvSc6NbkK4TbfMwzss+0HFWCfTvsSpeK".
                      	"FJRnJBMrxi/0fKOSEcxer6meUGqCpRWHlRx+oOvjsQB6gZFdR5j6MKIY5o95WZEWBQZmBoRJxI/RZY9HDq".
                      	"CX86ZnO+GBhEhOAxuIgMEkLBi2AAKL1nWpQ5/PKRfI6VO0EfyglIYqDeNJEPERjTsW9f73+z/frIetMA7c".
                      	"WqqfwEiXkIoQaC9WSCA8NKl1BIxRy+4YFgvW8PI+OOEnGF7mD0rpp4s//yg9jhuBhCumvp9xZEFryfphZC".
                      	"shK/HnD8Unyz//KvwLguUnx3Lv57JNbXJx/48yIYxclHAZBCgAoTzpUs4wBBFhDGNsAyk00nH4/TnSSeAH".
                      	"D0F6WSMXD87Bh/wZb2HXmRWmk76QRnVpfmvQCzDtGUUOVHH6LhDkcHwKSPiBi3ToNynoYfhQruoghCauPL".
                      	"o0lb3NUz2bFhmqToiheKhAaNBtYiZjmWUJ5c4qElDMwPK3cYJckE39QCiOv0lU+CIX51gRBFESJoSBqLZw".
                      	"w0GpOynqL64+5/kaI9AVYgbKWNdVBgQBJ8Dgc3SEKfSmcR0HyOu6Q62GET2FCprfOGjpHDIHfmXFa1zGAX".
                      	"HKdu99mzP/3JHqqX0fn0UiC/0u6NDzFix1eSxgkx9pWMrisjF1ZbX2RUnG40DIxzZ0P8pj2LoGY3+Cdoza".
                      	"y2P8FiG5/nk+b/gXDGPwhaHFpLRwa3oYxzATLQbEgBWdzZy9VapTaK//t0/Y/r/1PCkpZkiGqKgFb4OIXt".
                      	"4YQWIKIIFIpwvkmDLDyDprB4AAsYMdYrmhuRsS4Ygi7nDjcxZvMGFi0LfoVFClb9Qf/wcP8QZRBPbTX9wY".
                      	"/bh3u7e99S6o9BNoYpofSD7cOjPqXiesaJMnX29o93dziTd1lK3dk/tJvYARnIqkO5dmOUb7e4s//mYPe1".
                      	"C2I0wWVtQ+EyLiAuZcN6e9Q/tAChIa0FhXJtEJRfqW91kwrovoKI2kTJm0W2tVmEW4+QfjY21+An/A/TKF".
                      	"3ReM9/BueA8y3c/JmB0WLcXDvfMnW8+g3NbgcDYcHBAg4Z6cSXjfL/qbfPBUGbBchad095cye6CnkBFOwd".
                      	"1ojFw6BJO+Oa2Ms6CyDsjOJTn16E0cR+AvIL2gagVHj+BTri4P4KqO7OI0wvRH5hxF6DXHZnxEh4vTtiMu".
                      	"oX7ama+czm80wMAvcdw2oRZ4mE2aEXx97a1e+G/+3tg61l3mzhlAwA7rySnQl88xE2iMXWwtZmvHXy0/vi".
                      	"p7PNtVg2Cf+1OPmnM3HIsk+O2e35EO+DLnCxuyA7KeFqje+Do3aMiou7IFceyAdDbo0EujllUBSHtvHAQi".
                      	"VJ78JamVat1gpVVByjhhRVeE6docnBtq8mKk/BBhh2Cfwd205A0tAIDhFTEKG/5+y2fqSwlEFBW2wktB7L".
                      	"Uk/p7LbbybqyOrtto19XUma2mw6CTvwrWh0KlziS7zyUKy0MqzDAqGOfB27C0GSHPg+WxEwPYyM0EQ2v0t".
                      	"rMDZGeD6JxOLhI8ErNMj9L0ku2eMXAY/WQbQUC80ifGvsQk7Gno048jC7RKhcOXrYxuu10qr1sT8eedjXR".
                      	"FvnzwNnW8nOh5jZYccsP8R19BIBs9Co+XQdwpBiTASr9NPZyKkFZ1NEXmcuhstb+luZzG0YTYDWhXsGUlv".
                      	"WEVr3JLOdJq1lGybYm57hMcFizgj5xOxSy6U1+Ccv3vXbWwFOd1OfxCOmLDunCV1e35OJDuhOjlbM7i04Z".
                      	"qFRBnhfG17h7GlNYuyAprc+3xKrYpJ1eqtTp0PV8FGRpOt7wrbpjNobdXMPSwEgROPLROnTR6tFjPOCAdS".
                      	"2PWgAU20VNvVjvwilOJqC08gw+aWiwuOc616QyDicPsZoqaW+J90CQYVMnHrsPJLXAN0ULMuSj/aBNhZpp".
                      	"L9ut81RF4Q8UILZMFWwHYOPlplmNy7f2rPlAqjVI3f5/"
                      )));