Причем, что характерно, что нехватка какая-то крошечная и сохраняется при увеличении лимита даже вдвое от указанного.
Скрипт не может знать заранее предугать сколько ему памяти понадобится, а то что он пишет tried to allocate N bytes — так это всего лишь то что он пытался выделить память в конкретном месте под переменную и ему не хватило вот этих N байт. Так что число это чуть более чем бесполезно. Никакой полезной информации оно не несет.
Как получите «раскодированную версию» ковыряйте ее на вложенные циклы.