问:
Infinite Non-ASCII character in the Angular ng test output
I've updated my Angular project (it's a library) from 11 to 13 and now, I get an infinite sequence of non-ASCII characters when I run the ng test command.

The output of the command:

```<code>                                   !             H|H|H|H|H           H__________________________________             H|§|§|§|H           H|* * * * * *|---------------------|             H|§|∞|§|H           H| * * * * * |---------------------|             H|§|§|§|H           H|* * * * * *|---------------------|             H|H|H|H|H           H| * * * * * |---------------------|             H|H|H|H|H           H|---------------------------------|          ===============        H|---------------------------------|            /| _   _ |          H|---------------------------------|            (| O   O |)          H|---------------------------------|            /|   U   |          H-----------------------------------             |  =/  |           H              _..._/            H              _|I/|_            H      _______/| H |/_______    H     /           / /          H    |          | | /         |  H    |          ||o||          |  H    |    |     ||o||     |    |  H    |    |     ||o||     |    |  H   Carl Pilcher
ẗ̨̨̩̪̭͍͖͓̩̣̺̗̼̲͈̼̺͕̦̝̠̠̲͔̀̈̒̏̾ͪ̍̋̊̒̄ͣ̂̀ͅeͮ̌̅̿͊̚͞ ҉̶ ҉̦͙͎̦̯̻̗̠̠̹̣̠̹͕̩̥̟͙̱͎̠͇̩͎̞̜̰͖͓̟ͅs̸̶̢̛̙̫͓͚̫͚̠̳͔͍͔̮͍̟̟͕̼͙͙̗͂̔͑̿͛͂t̸̸̶̯͔̼͈͈̯̠͖̭̜̙̾͆ͤ̓ͧ̅́ͤ̎͗͌̂̆̇ͤ́͠i̧͕̙̟̦̥̟̭͚͈̜̼̘̙̜̼͍͓̱̙̻̬̗̖̜̲͖ͭ͗̆͊̀͝ń̡̡͕̲̬̮̣̟͇̙̳͖͔̼̼̫̮̩̜̯̫̪̫̞̙̹̉ͩ̑ͧͭ͐̒̄̃̋ͮͬ͜͟g̴̻̫̘̬̺͓̳̞̫͇͙̙̻͓͔̭͈̋ͧ̌̍͛ͯͧ̂ͣ̈͊̽̈̎̀̀͝ͅ ̛͉͇̭̝̥̜͚̼̱̬͖̣̥̠͙̦̻͉͙ͭ̇̔̂ͫ͋ͪͭͮ͜͠ẗ̵͇̼̭̞̥̲͙̠̫̺͈̯̠͔̮̞͍̹̺̗͓̻̝̦͖̰̖̤̞̺͍̜͓̞̻̪̻͇̎͐ͩͧ̐͛̑̓̉ͯ͑́ͤ̈̂̓͜͡ͅͅͅḙ̴̥̹͖͎̝͖͍̩͉̼̠̝̣̰̳̝̣̰̟̱̣̰̜̖̗͔̣̦͉̪̝͕͍̭͉͍̳͕̮͖̣̱̓̅ͤ̽ͬͮͣ̂ͩ͐͛̋̓͛ͦ̓̽̓͘͝͠ͅͅs̏͌̂̿ͥͤ̒̋͟ ҉̱̹̹̟̲̯̳̻̣͔͖̰̫̩͇̫͖̦̱͍̳̗̮̭̗̥̪̮͇̠̲̦͉̱͇̫̮̩̲̘̼͇̟̠̤̹̞̼̱̝̮͔̠̪͙͈͉͖͙͢͝ͅt̡̝̬̯̗͍̠̦͎̝͇̤̼ͨ̉ͯ́̉̈ͣͣ̽̈ͤ̈̂̃ͦ͑͠į̼͚̙̗͇̙͍̖̤͕̺̫̖̰̱̦̫̻̙̫̘͕͚̖͔̩͍͉̥͓͈̹̜̼̖͙̲̄̒͂ͩ̽͌̌͒ͩ͆͂͌̊̓́͑̃̚͜͢ͅn̶̡̗̭͈͔̪̩̹̱ͯ̍̇ͥͦ͒͆ͨ͛̐̎͞g̨̢̢͙̬̥̼̜̽͌̈ͧ͟͡ ̵͔͚͍̳͎̩̦̼͉͕̥̖͉̭̠̥̮̫̂̊̄͆ͦ͐͂̎́ͮ̈͛̎̐ͨͭ͡t̨̹̼͔͎̝̠̖͖̺͉͓͍̬̲͚͓̖̫̺͓̻͍̙͙̜̤̱̤̮̲̠̯͉͙͍̼̞͉̳̗̻̖̭̣͔̲͙̫̱̟̜͙̦̥̥̠̰͎͚̰͎͙̳̓̍͌ͩͪͣ͐̂͋̉͗̓̇ͬ̓ͫ̿ͧ͟͡ͅȩ͉̗͍̫͖͈͕̪̓̀ͣͥ̀ͅs̷̞͈̠̺͔̲̝̣̩̠̫̩̻͙̬͓͇̲̘̮͕̲̮͉ͬ̐̈̔̋̐ͯ̚͘͝ͅť̳͇̲̼̻̱̥̤̭̺̣͖̯̦̝̝̠̤̦̟̬̩͉̮̟̘́͌̈ͦͥ̈̉̒̉̔̿͊̏͆̍ͪ͘͟ͅͅį̶̺͔̹͔̭̟̪̦̬͍̼͍̼͕̙̞̬̪̜̭̱̰͇͉͎̭͚̩͍̖̜̹̱͖̼̖̜̱͔͇̠̪͓͎̣͙̟͚͓͊̃̎͌ͤ̽͛̊̎ͧͅn̷̛̛̺̲̻͚̬̭̹̙̠̥̱̜͈̠͖̦̺̹͕͚̺͓̰̤̒ͬ̍̄ͥͨͮ̌̈̓͐̔̂̒̀͝͞g̵̸̼͉͖̮̙̬̮̹̭͔̖̪̠̦̰̠̼͓̼͇̯̤͈̭̤̺͉̭̗̰̦͓͓̤̟̝̙̺͙̯̙̱̜̹̹̬̼̤̯̱̺͂̌ͪ̑ͨ̔ͭ͊ͨ̓̓̃ͥ̍͢͞ ͣ̉̑̍̋͒̀̈͂ͪͯ͆̾ͮͦ̓ͫ͡ ҉̸̧͔̼̰̬͉̖̭͖̮̣͖͎̬̟̻̤͉̰͍̭̖͙̻̖̠̭̦͓͙̝̺̲͍̻̳̟͉̙̤͎̥̙̺͍̮͉̲͖͎͇͚̜͞t̶̸̴̛̬̜̼͍̬̬͚̠̼̺͕̝͇͔͓͈͓̤̹̙̟͉̘̻̹̭̪̞͖̫̰̣̱̭͙̼͈̪̮͉̍ͧ̉ͦ͒̈̉̾̏͗͌̓͒̀̚ͅe̸̷͓̖͉̫͓̤͍̩͙̺̦̦̬̭̞̞͚̳̪̘̥̟̫͈̘̦̠̤̙̖̰͆̍̆͐̐́͟ͅş̥̝̙͍̤̤͍̙̘̺̩͎̜̤̭̼͕͙̝͉̟͓̥͓̦͍͕̟͚̜̱͓̤̣̭͇̭̬̮̲͖̱̓̔̔̔ͧ̀͐ͫ́͊̀͘͜͝t̵̷̵͙̯̜̳̣̹̙̱̤̰̣͇̭̖̜̩̗̝̳̭̣̽̐ͦ̑ͨ̍ï̧͖̘͇̻͎͖͓̪̝̦̹̹͇͓̗̤̭͍͕͕̠̥̪̺͓̮̠̭̯̤̲̮̘̺͇̭̼̥͉ͣ͐̑̏̓͌̋̽̀̇͋̾̈̒̓̊͐̚͜͝ͅn̶̤̜̹̗̗̙̠̭̯̦̫̞̬̳͔̗͉̥̘͈̹̫̫̾͑͑̅ͪ͑̂̈̔̇͐́̓ͤͩ́̕͞ͅg̵̷͖̪̤̰͖̦͚̦̗̞̙̤͈̯̮̯͖̲̠̱̝̥͕̯̱̦̻̜̟̖̼̜̠͕̟̳̠̟̘͉͖̙̖̫̼̻̪̼̹͕̖̜̗͉͉̤̤͕͕̎ͥͨͦ̋̄ͭ̈̎͗͗̓̈͋̆ͥ̇͢ ̵̡͖͓̯̫̻̘̹̰̺̰̖͔̤̦̝̥̜̩̤̙̤̝̜̖̯̗̼͈ͪͤ̂͋͒ͬ́̾̒ͧ͊̾ͭͫͩͯ̓̚̚͠͠͞ͅt̶̶̫̺̙̥͉͎̝̦̱̭̗̗͉̘̫̗̮͙̻͙͈̮͈̭̝̻̘͇̥̣̦̮͈̞̙͙̫͉͖ͦͥͮͮ͒̃͝ě̼̬̼͇̯̟̬͚̑̑̾́̇ͧ̎̾̃̽ͬ̊͂͊͋͠͠ͅs̶̴̛͖̫̺̝̙̺͇̫͎̭̹̠̮̫͔͙̯̱̤̳̰͍̼͈̬̩̪̝̳̞̫͎͙̰̹̪͎̲̲̹̯͕̲̗͙͙͔̰̼̖͔͔̱̯͈̤̪̱͔ͭ͑̾̐ͨͩͬ̉́̇̓ͬ͗͆ͫ̒ͮ͊͜͝ͅṱ̜̝̲̠͉̻̭̳̝̞̘̰͓͚̠̼̩̤̪͔͚̥̣̥̟̜͕̤ͩ͗͗͗̀́̕͘͞ͅͅi̶̛͎̪̻̜̪̗̘̜̞͚̣̥̻͖͈̞͍͎̳̥̠̣͎̩̱͚̺̯̬̤̘̖̥̼̘̗̓ͣ͗̀ͫͮ̉̄̿ͩͨ̅̏̊ͦ̂͊̉̚͞͝͡n͇͎̦̼͚͖̩̜̱̘̫͇͎͈͔̜̤̟̞̼̰̖̟̹̲̱̝͉̦̰̼̝̯͙̤͕̟̹̯͔̦͉͙͙̞͈̼̯͕̭̳̳̭͙̭̘̖͉̰͓͓̬̯̉̂̃̈̇̾̑̓ͨ̅̒̊̈̚͜͡ͅͅͅg̸̴̠̯̲̞̱̜̱̹̼͓̈ͧͣͮ̍͆̍́͜ ̴̡̻̳͉̭̜̜̩̠͖̖͇̲̺̠̖̲͖͙͉̹̞̯̖̬̜̼̹̖̭̣̥͍̺̖͍̘̬̜̜͖͔̜͈̲͎͓͚̫̹̳̍ͭ̑ͫ̀̚͟t̨́̿̎̌ͥ̇͑ͩͪ̎͌̌̉̇̌̓̚ ҉̥͔̙̙̤͍̙͈̘͕̫͎͖͍̲̱͘ͅeͥ̍̏̀̈̏̄ͩ̃̇̈ͤ̐ͥ̚ ҉̴̷̲̳̮̻̥̭͓͎͎̰͕̪̲̙̱̙͍̞̭̥̙̟̤͈͕͖̹̯͔̹̤̜̭̙͉ͅͅs̡̺̭̯̬̗̹̰̭͙̝̹̙̝̰̙̠̰̥̭̪̬̻͕̞̫̟͔̥̳̪̥̣̪̱̬̹̥̘̦͖̦͈̞͙̟̭̫̟̬̗͕̗̤̘̭̮͓̜̗̰̣͛̋̍̽̍ͧ̏ͤ͐ͪ́͠͠ͅͅͅͅͅͅt̵̷̙͉͔̥̭̪̤̩͕͉̘̤͎̙̤̼̥̻͙͕͇͇̯̯̫͎̳͓͖͎̲̮̹̮͇̤͎̲̤͔̙͖̝̥͊̐̃ͩ̋͊̕͜͠ì̶̡̡̦̼̱͙̻̖̪̹͕̓̽͛͊͛̈̇ņ̠̯͉͎̣̮̥̫͕͓̝͍̫̣̹̙̪͓͉̥̥̤̞͎̮̱͈̩̩̭͈̙͇̠͙̬͖͕̝̮͉̫̫͔͕̗̭͔͚̼͖̳̘̫̹̤̑̂ͯ͐̅̍ͪͦ̍͐̒ͥ̇͆ͨ̊ͭͨ̀͘͟͠g̴̨̤̯̞̘̭̬͈̼͉̠̱̘͚̠̙̼̪̺̗͙͕͖̼͔̻͒̄̑̊̈ͨͦ͗̊̔̐ͤ̚͢͝ ̵̧̘̟̣͖͇̘̦̹̺͍̮̼̜̙̼̹̗̗͈̺͙̗͎̯̥̮͙̫̠̟̱̳͈̺̥̭͕͚͇͎̟͔̘̤̠͕͍̗̯̻̯̖̂̈̌ͯ̒́͌ͬ̀ͥ̾̔͋ͬ́͢͝ͅţ̷̻͎̳̝̱̗̞͈̺̠̟̞̖̬͚͇̥̋̑͗͌ͨ̈̈̌ͤ̽̇̓ͮ͘͜e̿ͨ̏̃̑́ ҉̸̨͉̙̭̭͎̫̜̣̫͎̗͖̜̰̥͉̮̟̱̰̩̜̳̳̝̫͔̯͚̺̮̮̼̝̲̣̞͉̟͍̣̣͢ŝ͕̥̜̮̰̝̼̪͔̘̹̜͈̹̭͉̯̯̜̳̝̜̪̦̤̤͈̙̖̘̹̰̰̺̜̮̯̭̪͚̩̘̝̺͖̪͇̙̹̯̜̰̮̠̗̜̹̫̥̟̲̗ͮ̊̈ͬ̑ͧ̽̾͘͞ͅͅţ̸̢̤̖̥̣̦̮̺͔̼̘͚̲͚͛ͦ͒ͭ̔̃ͪ̍ͬ̊̀͒̈ͫͤ͗͌̃͠i̺̠̠͈̰̗͕̦̗̮̜̪̫̮͖͙͖͍̩͎̹̼̭̣̼͖̼̣̺͇̰͕̗̼̪̞̪͓͇̺̠̜͙̹͎͈̘̞̞̖̼̭̹̹̯̰̹̟̲ͥ̉̏ͬ̽ͯ̂̅̄ͬͧ͊͜͟ͅͅn̶̍͑̎̃ͮͮͮ͆̂ͨ̐̈͂ͭͭ̔͗̾͝ ҉̴̪̞̖͙͓̼͉̗͕̫̰̪̜̣̝͈̺͎̮͍͓̘̱͓͔̠̣̱̣̼̮͕̼̫̪̝͉̥̖͔̝͔̫̭ͅḡ̿ͫ̒͊̊͒͠ ҉̢͈̩̞̮̖͖͕͈̩̙̝̙͎̙̰̱̻̞̗̘̣͈̣̰̥̘͍͙͔̙̝̱͚͎̬̙̭͍̱̜̮̼̭͇̙̗̮͟ͅͅ
t̵̷̛̰͔͕͎͎͔̙̺̭͖̜̺͔͇͉͚̘͖̪̱̞̰̭̜̰͚͍̦̤̬̬̗̜̱̝̩͍͎̟̹̗̯̳̝̲͚̿̂ͬͥ͋̌̊̾̔́͢ͅͅͅę̴̧̟͍̱̥̖̼̘̮͖͑͐͛̆ͥ̅͊͛͠ͅs̛ͪ̅̿͆̄̐͛̍͒ͥ̒̅̏̎̍̍̄͢ ҉͖̖̮̰̙̤̖̣͉ṭ̵͇̟̩̖̬̙̯̼̼̎ͦͬ͂ͪͥ̌ͯ̀́̚i̵̸̧̨̹͈̪̝̗̬̠̳̠̰̱̥̜͙̘̟͉̺̦̭̙͙̠̻̜̦̳̞͇͇̯̜̜̥͇̳͚͖͇̹̜̬͎̤̪̱͈̜͐̎̂̿̊ͤ̑̐͌̇̚ͅn̷̮͚͎̦̬̬͈̞̺͈͖͎̞̠̱̥̠̜̤̱͓̭̪͖̤̣̦̰̝̹͍̜̘̪̬͈̄̑̾ͤͥͩ̽͆̾̀̚͜ģ̧͕̼͇̥̖͉̞̺̩̮̰̦͉̯͓̦̥̯̫͕͚̯̮͕̳͇̝͚̫̟̼͓̞͔͇̼̪̾͐͋̏̓͘͝͠ ͍͎͓̝͙̝̯̟͍̫͍̠̩̝̖̱͉̪͕͓̯̼̝̼̜̯͎̭̬͉̱̝̼͎̬͈͈̫͎̙̖̟̫͖̝̘͇͈̠͑̉͂̃̒̔ͤ̆͊͛̀͘ͅͅͅt̵̵̵̺͕̱͙̰̼̹͇̭͔̬̞̣͔͇̼͙͍͖̺̰͓͔͙̍ͨ̊̔̊ͬͯͦͬ̉̂͆͗͞ͅͅe̢̦̘̩̘͕̰͎̲̻͙̦̣̪̬͖͈̯̭̬̫̱̯͓̤̣͓̤̠̳̱̼̠̹̭̲̰̣̱͇͚͈̞͔͚̻̝̘̱͎̙̩̼͚̠͎̻͓͗͊͑ͩ̀͌͛͌͒ͩ̐͆͛̆͜ͅͅͅͅs̢͉̦͔̙̮̳̰͍̭͕͍̳̟̹̜̹̬̲͍̻͙̤̺͔͉̮̘̖̟̙ͪͩͪͪ͘͘ͅt̷̶̡̥̜̱̪̪͕̦̯͇̫̠͔̯̦̤̖͚̰̳̟̙̙̱̺͇̙̱̖̦̻̺̯̟͚̜̠̣̲̗̰͔̙͔͇̖͚̺̙̦̝̳͇̣̖̮̲̝̯͙̯̼ͩ̒̂̑͌̓͐̌͐̊͌̀̈ͦ̕i͇̗̮̲͕̮̹̯̟͓̬̘͙̞̱̠̤̣͍͔̩̠͔̺͉͚͎͈̥̭̙̤̮̫̩͓̼̗̙͙̼̞̦͉͉̠̩̙̍ͭ͛ͥ̄̈ͫ̽ͬ̕͘͟͡ͅn̷̯͇̻̫̭̣̺͖̙͈͖̰̝̣̪̟͈̭̯͕͙̗͉͓͖̻̬͈͎̻̮͖͕͎ͣͭͯͤ̿̾̅͂͋ͮ̀͘͟͞g̡̻̩̬̥̳͉̣͇̼̰̭͖͕͍̍̄ͦ̔̌̀̋̽ͬͨ̎͆ͨ͊̈̍́̕͠ ̭̩̞̣͇̦̦̜͍̠͙̠̮̝͉̦̫̝͇̘͍͖̤̙͙̥̲̩̙͍̲͍̫̥̥̪͖̩̥̞̊ͭ͆̑ͨ̽ͯ̌ͮͫ͂͐̏ͫ͒ͮ̃̚̚̕͞ͅţ̷̗͉̝͓̙̠̱͎̙̰̹͖̣̘̜̪̬̫̳̲̜͚̜̲̼̱̤̫̝̭̜̺̼͓̮̗̙̲̑ͬ̋̓͂͌̏͋̀e̶̵̸͚̲͍͎̭̭͇͕̼͖̳̱̪̝̖͈͕̬͈̳̍ͪ̅ͩ͗͆͜͝s̷̟̼̳͓͎̬̩͎͎̣̦̟̺͓͙̝̹̯̭̣̭̖̣͙̫̗͖͔̟͈͍̫̯̜͇͕͖̱̲̜ͤ̎̌͒̈̈̋ͮ͊͑ͬ̓́ͩ̕͜͡ͅţ̷̸̷̩͔̳̲̙̮͈̼͓͖͎͚͎̞̠̙̩̬̗̲̜͉̥͍̯̻̩̖̳̭̥̦͍̳̱̖̖̯̖͉͕̮̞̤̜̩̬̘̱͓̪͈̼̖͗͊̃̊ͨ̇̉̓ͤͯ̂͌͑̋͞i̢̱͓̲̮͇̻̫͉̰̲͓̭̫̺̞̤̘͙̦̬̮̩͖͓̪̠͈͇̣͙̳̳̗̺̜̜̮̗͖͍̼̮͙̬͇͖̱͇̱͎̦̳̦̙̜̗ͤ̎̊͌ͤ̓̿̽͛ͪ́͝͡ņ̡̮͕͎̯̬̬͔̺̫͙̰̲̘͈͉̱͔̬̤̹͚̯͖̟̺͓̫̻͉̩̒ͦͯ̆̐̄͐ͤͭͮͫ̊̇̇ͥ͛̚͝g̢̤͇̼͓͙̣̗̙͕̬̮͍͎̲̿͛̑̽̀̂̉̔͑̓̾̉̈̾ͫ̈͗͌̚͠ ̸̧̟̻̥͖̏̌̈͒̆͗͂̀́͜͝t̵͓̥̮̟̙̭͙̮͙̭̲̺̝͎̝̱̯̠̥̣̪̥̥̞̺̺̖̺̼̖̝͇̘̩̠̮͖̠͔̳͈̩̮͕̟̺͕̣̬̟̥̋̀̑̄́ͧ̍͊̀̀͟͞ͅe̔́̍̾ͬ̋͌ ҉̸̢̀ ҉̫͖̤̘͉̳̯͕͇̹̤͓̳̺̰̻̟̬̞s̢̳̬͖͖̭͙̤̮̺̗̼̪͍̬̠̜̘͍̰̣͈̪̥̱̫̤̼̣̞̬͚͓͔̙̺̤͉̙͚̦͕̖̜̤̙̱̞̹̤͕̙̪̱͔̮̭̰̲̺͚̮̥̄̑ͬ̌̍̆̓̅ͩͥ̏̂ͤ͂͑̋̾̀͢͠ͅͅͅt̸̷̬̩̹̺͔͔̭̏̎͗͆͆ͯ̚͟͞i̜̘̼̜̦͈͍̲̯͎͚̝̜̩̤̞͉̘͎͚̠̝͔̯͇͉̱ͥ͑ͦͪ͢͟ͅͅn̴͕̜͕̜̭̙̪͎̪̳̹̣̞̟͉͈̲̯͙̬͕̟͉̫̗̭̺̜͒ͯ͐̆͆͐̇̓͝ͅͅg̫̗͓̝̺̬͔̰͕̱̳̹̼̗̗̳̻͇̹͍̟͙̟̘͇̪͔̦̻̜̙͙̼͎̪̊ͮͦ͆̌́̚̕ ̸̧͚͈̠̺͖̳̮̩̞̘̞̗̘͚͕̳̫͉̟̠͖̙̺͕̬̭̤̻̼͚̬̹͙͍͓̺̳̣̣̼̮̗̯̱̼͎̹͚͈̝̻̰̹̩͕̫̟̦̼̣̦̖̱̜̃ͣ̋͗̈͒͒ͣ͡͞ͅͅṭ̨̙̦͍͔̝̩͔͕̦͔̮̖̝̰̥̣̭̱̮͍̞͈̞̭̯̬̮͇͕̺̯̹̗͇̩̺̥̟̯̯̻ͪ̔ͤ͗ͩ͊̀̑̾ͬͬ́͠͞e̿͛̎̆̈ͯͫ̂̈̆ͤ̈ͯ͐ ҉̧̼̻̩̳̟̰̪̯͕̣̦̠̟͇͔̦̪̮̯͓͢͜ș̢̢̣̲̭̭̺͚̹͈̩̲̰̳͓̳͚̬̮̖̖̺̤̖̻̣̗̭̥̱͎̰̞̖̗͙̠͎̭̦̠̥̳̗̩̞̣͇͐̄̔̑̒ͦ̆́͊͝ͅt̨̘̫͚̙̔̔ͨ̆̓͞͞i̴̵̡̼͎̙̬̦̪̮̳̘̬̲̘̣̞̣̱ͮ̈̐ͮ̄̈ͨ͌͊ͯ̊̈ͨ̂͐ͧ̎ͧ́n̨̼̞̩̬͈͙̮̮͍͉̝̮͇̜̞̦͇̻͈̦̤̱͙̜͇͉̻̪̩̹̟̟̣̤ͦ͑̋ͨ̎͠ͅͅg̸̶̮̗͉̜̱͓̮̠̹͕̟̼͔̹̗̥̞͓͚̯̦̣̮͔͙̠̟͍͖̳͖̤̭̼̹̻̖̯̟͖̟̪͓̜̯̺̗̤͕̰̞̣̼̓͛ͩ̈̓̐̊͑̾̍̕͜͝ͅͅͅͅ ̟̥̪͍̰͇̙̟̝̺͍͍͍͖͈̮͖͓̱̪̪̯̗̞̽́ͭͤ̍ͧ̒͒͌̽̀̕͝͞ͅt̷̛͍͓̼̺͈̓ͥ͐̓ͯͪ͒̈̐ͫ̒̅ͯ̈̃͝e̷̫͙͔̯͎̦͔͍͇̤̫̱͕̻͇͙̖̔̽̑̂̽͊̆̔ͣ̌̓ͬ̂ͬ͗ͧ̑́s̶̵̴̸̢̟̣̭̹̪̟̜̼̤͙̙̫̞̲͈͙̤̼̦̘̟̩̅ͧ̎́̓̿̉ͬ̌̑ͤ̂̚ͅt̷̛̹͚̞̩̹͉͑ͣ̾͊͠i̶̧̠̯͖̺̫̯̠̜̠̘̫͉͔̦̜̯͈̱̪̗̱͙͚͕̼͕̯̤̙ͣ͒̾͌̅̂͌ͮ̓̓̒̀̀̚͢͢ͅͅn̶ͬ͋ͤ̎̽ͦ̍̍͛͡ ҉̧̰͇̻̝̰̦̲̝͎̯͉̺͙̼̦̰̞̫g̢͕͖̞̜̠͍͕̤͇͔̤̠̲̰̘̲̹̖̤̼̼̙̻̻̖͉̩̥̯ͩ̂̈̏̀ͬ̚͘͜ ̝̣̫͕͚͓̺̮̟̮͖̘̱͙͇̺͙͕̝̥̻̭̥̳͓̗͚͉͉̦̗̟͍̥͖͉̳̞͍̹̟̠̗̙͓̩̼̼̫͓̗̲͉̻͓̱̿̄̈ͣ̊͌̇̒ͬ͌ͧ̆ͪͪ̚͟͠t̸ͤͤ̿͋ͥ͆̉̌̎̋̈ͪ̆ͨ̽́ ҉̝̳̼̘͈̥̣̤̼̘͞ȩ̴͍̜͍̱̼̹̪̖̟͔̩̜̝̜͍͎̙̼̗̘̘̜̠͙̟͙̬̦̯̳͈͓͈̜̯̝̝͔̹̳̩̥͍̺͇͕̰̫̱̹̦̜̃̇̂̀́̓̑̒́͘͘ͅͅs̺̖̮̺̥̺̩̱̭̰̫͍͙͉̩̼̗̼͕͇̳̥̮͔̩̻̠͉͙͖̱̣̜̬̝̯̦͖̝͙̱̲̰̬̹̮͚̼̲ͪ́͑͗̆̑ͦ̌͆̎̾ͧ̚͢͝ͅͅt̴̶̢̺̠͓̬̘̠͍̻̞̟͈̜̙̬̥̜̺̞̪̜̯͔̩̪̲͎̙̞̺̺̝ͧͯ̇̿̃̂̊͊̀͘ͅͅi̶̬̘͓̪̻̪̗̰͈̱̜̗̜̠̜͕̦͖̝̘͚̯̜̟͕͇̖̲̹̗͎̝̰̻̺̭͍̳͇̖͔̦͈̺̙̩̝̹̖̙̻̹̹̬̪̝ͭ̐ͬ͗͂͗̔̅ͭ̐ͤ͌͗͛̄ͫ͢͢ͅn̵̵̳̭̫̻̳̼̪̲̝͔̫̘̝̮̯̤̩͉̗͎͚̣̻͍͚̰̫̤̣̙̤͚̭̯͖̤͇̝̝̳̉͒̓̏͢͜g̵̺͖̗̥͙͔̝͖͑ͬͫ̇̾̂̄̃ͯ̚̚͡ͅ
t̶̬̰̱̼̤̱̬ͫ̓̏ͤ̃̕͘̕ê̵̘̜̯͇̲̤̟̹͖̤̳͉̥̠͍̲̭̱̣̭̘̥̗͉̱̰̤̤̟͇̬͖̦̺̰̘͚̱̭̖̠̜͔̱̲̝̮̟̼̦̩͙̳͙̤͖͇̓͒̒͂͒́͝ͅs̴̲̬̫̲̬̗̳̻͉̝̝̻̗͔̫̯̹̯͕̖̙̗̬͍̱̝̤͇̫̱͓̠̫̼͚̯͇̠̯͚̦̟̬̠͍̩̼̰͈̻̠͕̣̯̻̓̋͒ͫͭͮ̐͌͟͠͞ͅͅt̿͊̈̊ͪ͘͘͠ ҉̣̞̺̱͈̘̼̲̰͙̤̞͖͔͉͔͚̬͉̱͖̣̥̤͍̦̦͙̖̬̣͘i̴̡̪̣̪̲̥̖͔̱͈̬̜̖̩̱̱̘̜̝̱̦̘̖̩̳̣̬͚̩͉̥ͦ̃̎̓͊͐̂͌̀̚͘ͅͅn̶̢͈̟͇̘̟͉̻͚̲̣͎̣͓͕̹̹̺͓̱͍̼̠̟̞͉͎͔͙̼̙̖̯̰͈̹̳͙̲̥͎̖̳͙̻̼ͯ͌̋͐̍͋̓͂ͨͪͬ͂͌͝g̶̨̨̨̨͖͙͇̤̑ͣͮ̓̾͐͌͒̃̽ͩ̀ͮͩ͊͒̀ͩ̿ͅ ̸̧̛͕̞̻̹͔͕̘̼͔͇̤͈̤̣̮̜̬̭͙͔̥̼̠̤͕̲̙̖͈̤̫͚̯͚͉̘̣̦̮̬̦̻̗͉͈̣̖̬͖̯͙̞̦͙̣͖̣̣̺̒ͪ͗͌̒ͫ̾ͥ͢ͅͅt̵̷͔̼̖͕̰͚̰͔͈͎͕̹͇̞͙̤̩̻̠̘͇͇̠̠̲͉̜̟̳̬̖͉̼̜̖͍̪̼̲̲̳͎̘͎̝̠̜̯͙̝͇̹͇͉̭̉̓͆ͫ̋́̅ͬ̉̿ͧͪ̀̕͝ͅͅe̷̢̩͚̞̟̤̠͍̖̹̻̠̫͔̩̯̤͖̻͕̖͇̘͓̿̊͑̋ͩ͜s̡͉͈̙̠͔̘̹̠̫͚̮̻̯̦͇̖̤̰͇̫̙̲̫̼̹̱̰̤̠͚͕̬̤̱͉͖̫̻̬̬̱̘̰̝̬̟̺̮̖̟̘̣̯͈̻̙̫͖͚̻̫̱ͨ̎̔̆̃̇̏̈ͥͨ͂ͣ̿̅̀͊̓ͣ͘͟͝͠ͅͅt͙͈̝̦̖̳̠͈̺̙͎͉̘̫̘͓̫̤͑ͦ̏̓̅ͪͤ̈ͥ̀̚̚͘͝͠͞ͅi̴̢̿͛͋̈ͮ͐̾́ͫ͑ͦ̃̚͜ ҉̶̥̣̥͔͔̘̩͔͍̭̲̬̗̥̥͕͇̠ň̴̝͕͉͕͎͔̩̦͓͉͓̪̯͇̳̩̠͉̩͕̘̜͖̹̘̱͓̺̻̹̯͙̤̹̞̤̪̪̗͔͕̝͉̙̺͓͔̪̱̪̤̲̖ͫ̔̓̀̂̉̑̓̒͒́͘͢͞ͅͅͅg̛͚͕̱̖͙͚̃̂̄ͪ̎́̾̚͘ͅ ̵̉̑́͒͒ ҉̧̛̗͈̦͉̠̥̘̘̭̟̲̼̮̠̘͈͈̦̞̣̺̲͈̘͚̰̩̹̹̰̻̮̺̩̰̰̼̤̭̘̞̝̜̻t̵͙̤̘͎͇̙̙̭̖͕͔̗̍̈̅̌̏͛̀̃̂͊͛́̚͝e̵̡̮̘̠̠͙̫̥͇͈̥̞̻̖̊̎̂́ͬͨ̄̏́̚̚͢͡s̶͔͈͖͇̟̺͓͓̟̯̣̭̹͙͔̳͎͉̺̦͚̩̯̯͈̞̝͕͈̠̙̬̣̘͙̯̺̪̩̫̜̗̭̮̳̦̭͇̣͚̼̟̞̻̥͓̫̼̜̬̜̒͛ͦ́͒͛̇ͨͩ̅ͭ͆ͮ̌̔̎̎́̚̕͡ͅͅtͧͭ̅̇̌̇̋̀́ͪ͗ͣ́̀ͥͩ̕̕ ҉͔͔̥͈i̢̨̡̖̣̜̘͇ͦͥͨͤ̓̾ͨͪ̐̀ͪ̾ͣ̐̎͒͡͠ͅn̶̓ͪ̄̈ͫ̒̿̌ ҉̼͙̱̻͔̥̭̲̠͍̖̩͓͖͍͉̫̙͙̺͇͚̱̫ͅͅĝ̞̝̤̞͔̪͉̜͈̜̪̳̼̘̠̠̥̩̫̪̞͎̜̯̺̝̠͇͇̝̞̺̞̪̅ͨ͑͊̕͘ͅ ̶̶̛̼̘̝̺̤͔̝̞̳̻͍̞̟̲̦͎̬̮̳̻̼̥̮̜̳̩̜̦̦̙̹͉͔̥͖͉̺̩͇̙͎͚͈̲̣̤̤͔̗͎͉̺̙͓̤̗̞̺̗̼̦̞͆̇ͯ̐̔ͣ̍͆̽ͨ͆̃͊̄ͪ̓͡ͅt̴̋ͣ̎̈͊ͫ̍̓͐ͭ̉͟ ҉̤͖̣͕̬̤̩̱̠͍͉͓̹̹̫̜̻͈̟͍̝̗̟͇̦̻̲̦̭̼̖̼̹̣̠̰͎͙͉̱̠̘̬̮̬̱̯̥̯͇͍͕͈ͅe̷̵͖̘͕̱̤͔̭̣͙̮͎͚̝̱͙̝̗̩̖̟̖͍̗̣̰̭̲̪͕͇̙̹̙͚̣͕̖̻̤͔̝̤͍̣̬̰̭̫͖͍̬̬͍̜͛̀̾̋̒͒͂͋̔ͪ͘͠ͅş̷̛̜̺̞̰̗̪̹͖̗̗̪͕̠̯͈͍̗̳̩̙̗̜͍͖͇͕̱̭̫̦̜͕͈̝̥̭̮̘͉̩͚̬͈̙̮͓̭̦̃̑̓͌̔́̚͠ͅt̛̪̘̙͇͙͕̤̳͈͇͙̼̗̫̬̮̤̥͍̪̠̖̖̲̼̘̮̾̒̓̄̒͛ͪ͆ͮ̕ͅi̢̪̲̖͉̠͔͉̙̪̫̤͇͈̙̖̭͔͖͔̼̗̪̗͔̖̼͇͚̻̣͓̥̮͚̜͇̪̝̯̟̰̟̰̫͍̝̯͒͗̎͂̈̍ͩͦͥ̀ͣ̎͞ͅn̢̡̟͖͓̟̱͙̱̞͈̮̣̞̹͎͓̫͍̺̯̤̤̙̥̦͖̭͙̹̰̞̯̣͙̭̖͍̼͕͇̮̺͚̪͚̗̖̹̺͉͍͈͙͎̼̣̬̫̝ͤ͆͒͐̈̈ͩ̍̈̂̑ͦͤ̎́͜͝ͅͅͅͅg̡̖̲̹̣̠͉̥̙͔̲̱̙̱̩̫̟̰̗̥͎̹̹̤̙̫̱̦͇̣̪̞̘̺̥̗̲̝̭͒ͩ̑̉̓͊̊̇͝͝͡ ̶̨̺̥̙̱͙͙̜̱̀̌ͩͬ͗ͩ̃͊̍̾̀͢ţ̟̣̗̲̦̩͍̩̣͎̝̦̘̜̟̭͚͎͙̜͔͍̞͕̟̖͖͉̭̼̩̖̩͉̺͉͕̯̣͚͕͖͔̯̜̭̙̰̼̟͉̮̻̭͇̗̱͕͕̱̓ͪ͂̈̎͠ͅͅͅe̝͖̜͔̳̫̙̼̫̬̝͖̰̳͍̯̰̬̠̻̱̗̗͔̞̲̭̜̰̹̙̯̹̘͈̞̻̠͇͓̫̤͗ͬ̀̆̉͗̔̄̑̄͗̈̿͢͢s̴̡͖̯̪̦͇͉̞͔͕͔̻̟̯̖̾͑̎͊͑̿̌ͭ̋̂ͭͣ̆͛̚͝t̴͈̤̩̟͖̘͚̮͕̦̙͍͓̝͎̹̮͚͎͍͇̗̗̰̱̪̹̗̣̦̲͙͈͔̳͍̺̱͍͈͓̱̼̞͚͉͈͔̻̺͈̙̪͔ͩͤͣ͋ͬͤ̌͑̇̑̉̏ͤ̀̐̅̍̊͜͜͞ͅͅͅį͓̺̫͚̩̒͂̓̈ͯ̏ͥ̍ͥ̑ͤ̀̉ͮͣ̈̍̚͡ͅn̪̩̭̯̪̖̫̱̗͈͙̣̲̭̹̲̞̺̪̠̰͒͐̊̆ͣ͌ͫ̽̃͛̒͋ͯ́͡ͅg̛̼̫̟̠̪̺̖̖̺̹̹̗̩̗̭͕̖̗̟̥̖͈͖̬̪͉̦̳͇̰̣͎̮͕̟̟͙͇̤̲͕̬̗̣̘̙͈̘̦̥͉͓̳̟͔͈̺̲̹̬͈͚̫̲̩͉ͥͯ͆̓̇ͫͨ͜͡͞ ̆̅̆͗ͪ ҉̸̡ ҉̨͈̙̫͔͓̟̟̱̥͍͎͓͎̻͓̳̰̤̙͙̙͚̳̮̺̪̠̣̯̣̗̪̬̱̙̲̙̖͖̣̗̙̝͈̜̩͚̮͕ͅt̶̵͕͖͖̰̣̭͊̓͐ͬ̓͂͑̐̒̒͗́ͅe̦̥͙̲͇̥̟̻͇̦̣͓̩̪̼̳̙͈̗͍̱̥̲̙̟̻̪͍̺͔̫̼̼̞͍̻͓̪̪͇̲̜̠͕͎̩͈̰͚͓͕̝̞̱͖̹̳̻̦͍ͧͣͥ̃́̐ͣͩͥ̃́͐̿́͡ͅͅs͕̮͚͎͎͉̜̤͉̙̼̭̙͙̱̯̭̟̲̞̫̜̰̳̲̳͚̪̫͙̗̖̹͚͉̹̙̹͚̭͔̜̻̘̘͌ͯͩ̌̋̎͘̕tͨ̃͗̂̿ͤͮͮͮͨ͐ͮͭͭͬͨͥ ҉̢̗͎͕͓͙̬͔̱̝͈̩͎̱̙͇̬́͢͞ï͔̯̮̳̫͈͓̠̥͇̮̖̫͔̣͈̿ͩ̉̄̓̈ͭ̌͘͢ͅͅṉ̷̡͚̬̣̻̥͕̖̥̠̦̩̺̤͖̘͕̜̻̣̳̯̦̞͚̝̜̠͉͙̥̔͐͑͛́ͨͣ̀̐̍̊ͧ͊̓͛̃͊́ģ̸̨̦̱͕̫͎̖̜̰͂̊̏̄ͧͭ͐͋̏ ̷͎̬̭̹̺̞͙̟̹̟̰̰̠͖̥̳̞̟͖̻̠̱̝̘̠̪̪̼̼͉̙̫̪̩̠̤̗̭̣̪͚͇̮̺̙̹̥̥͎̪̟͚͖̗̘̻̙̱͔͛̅͛̈ͬͧ́͝͡ͅͅͅt̵̡̛͎̟̘͔̩̤͕͚̬̖͕͎̹̯̙͍͎̪̮͙̞͈̲͓͚͉̬͔̠̞͍̦̥̱̜̩͇͙̹͕̻̖̼̺̟̖̗̤̓ͫ̅ͬ͜͡e̵͉͎͇̠̥̘̙͙̖̤͍̥̖̼͂͐ͦ̂ͤͧ̌́ͧ̉̓̀͝ṣ̷̡̺̘̦͕̲̝̯̞̮͙̳̪̱̫̮̩̙̞̠̰̥̻͎̰̩̟̥̱̣͓͚̮̱̳̜̬̱͇̤ͥ̓ͤ̒̔̎̆͒ͯ̈͑͆̈ͭ̓̚̚ͅͅͅt͌̽ͬ̋̅̋̍͒̄̆͛̚̕ ҉̷̦͙̰͍̞̖̫̭͇̪̻̦͙͍̩͇̬̦͓͉̞̫̯̹̯͕̺̮̘͈̺̞̩͇͙̣̰̖̦͉̪͍̗̹̖͖̪̭̱̣̪̟̯̰͙̘̼͍̖̹̱̙͕̗͍͞i̵͈̘̣̘̟̖̭͉̤͙̤̫̻̜͖͉̱̫̤̥̖̮͈̘̰͈̩̤ͣͧ͛ͦ̈ͯ͘͟ņ͚̦̯̗̠̪̦͕̬͎̙͇̝͆ͬ͑̎̋͂̓̌̂̀̚͢͢g̨̙̭̥͙̝͚̟̦̘̤͚̝̩̼͎̤͇̗̼̟̫̪̰̗̮̻̜͓̳͔̲͔̥͇̙̩͈͙̟͚̞̳̟̯͙͇͖̻̤̺̗͔̙̻͆̍ͬ͆̃͐͊̈ͤ́ͯ͌̉͠ͅͅ
t̿̆͌͒ͩ͒̈̾̓̊ͥ̌͑̓͋́̚̕͘ ҉͈̖̬̫̟̮̭͙̦̘̘̜̞̣̺͚͚̻̺̳̩̖͉̘̖͔̬͖̹̗̻͕͉̖̟̠̝̱̪̥̘̠̩̤͢ͅͅͅe̙͖̗̠̗̹̗̯̜̗̞͚̜͔̝͉̠̪̠̹͙̹͈̝͎̹͇̩̭̬̙̟̣̬̥̠̯̥͇̩̥̱̻͚͇̖̺̫ͭͣ̌ͣ̎̓̈ͨͣ̍̿͒ͪ͛̚̕͠ͅs̴̷̨̙̬̝̘̬̤͔̱̜̟̪̘̻̗͓̮̭͍͙̱͇̫̟̟̞̥͚͓̟̗̬͓̩͖̤͎̺̥̼̥͙̖̙̖̩̲͙̺ͣ̈ͣͣͯ̍̓̃̽͑͆ͪ̌͛ͩͫ̾̄̚͢͞t̶̻̜̬͇̩̣̺̳̰͚̙͉͕̱̤̺̘̦̼̖̔̋̆̉͂̋̃͌̽ͭ̄ͫͮͭ̓͛͠i̶̲̤̹͎̦̳͉̝͈̣̳̟̳͕̥͍̝̺̮͔̪͍̦ͮͪͮͣͣ̉̿̃̈̑̈͠͞͝ͅṋ̳͇̠̞͔̲̳̣̻̜̱̩̬͇̹͓͕̰̘̰̜̟̯̘̻͉̼̣̲̼͎͓͍͚͍̖̻̰̟̼̼͎̜̲̘̩̞̣̯̙͎͉̭̙͉̜͍̅̄ͦ̽̅ͭ̕͢͡ͅͅͅͅͅg̵̷͕͙̹̫̯̟̣̫͙̼̮̘͉͕̞͕̘͓̟̮͙̫̹̭̳̜̫̘̗̪͇̞̗͖̞̥̬͑̈̈̈͋̑͞ͅ ̴̷̨͍̣̹̖̀͌̎̈͛̓̽ͭ̅̔͑͒ͮ̃̈̔̆̚̚͟t̅̊͋̋ͬ̒ ҉͍̥̥̣̲̲͎͍͟ȩ̛̱̮̤͇̺̺̲̦̬̘̹̣̖̜̹͎̳͈̻̬͖̖̖͍͔͍̤̳̭͎͉̠͍̘̜͍̻͖̬̻̳͙͚̜̠̲̻̽̌̾ͭ̏́s̡͇̝̭̪̙̫̲͎̹͚̺̜̬̼̼̜̦͕̜͕̯͕͖̼̯̥̠͈̲̮͈̻̰͖̞͚͉͕̳̞̠̮̣̗̥͎̹͇̟̝̙̪͍̻̞̘͚͕͇̦̼̖̖̪̉̇͆̒ͭͥ̏̃͌ͯ͟͡ͅͅͅṱ̸̱͚̜͎̦͍̜̗̫̲̼͖̺̳̲̮̱͎̳͔͇͖̞̗̭͍̦̮̖͖͈͍͎̮͕͚̳͚̖͉̦̬̳̰̰̱̭̳͕̙̭̖̼̻̟̩̝̬͍͉ͣͣ̌̊̍ͬ̓ͨͮ̒̾̚͠ͅͅiͫ̽ͩͫ̑ͤ̀̚̚͡ ҉̦̯̫̤͇͇̮̪̙͉̞̺̰̞͔͇̲̖̭̱͉̣͔̗͉͈̞̯̮͈͇n̵̦͙͖̞̟͖̼͇̣̬̹̦̯̞̳̖̮̬̲̺̙̞͉͍͇̹̹̱̣͙̱̣̥͉̩̠͉͉̮͇͉̜̰̹̱̫̬̬̊̍ͫͨ̍͛͂͗̌̆ͬ̀͜͡ͅģ̶̩͚͎̰͈͓̖̳̤̖̪̞̜͇̰͈̳̞̬͙͈̣̰̯̱̤̤͎͔̜̳̣͚͖͎̫͓̻̲̬̖̟̪̱̹̬̖̻̲͎͔̜̩̲̪̝̰͉̝̜̮̱̟͖ͥ̒̈̿̈̾̇ͭ͛̑ͬͨ̍̾̌͑ͫͫ͂ͅͅͅ ̸̴̟͖̭͕̜͔̠̣̤̜̮͎͙̯͎̟͍̦̼͓͙̥͈̙̰̼̻̟̪̺͚̗̦̘̠͙̮͈̥̣̻̼̦̯̳̲̰͖͎̪̬͎̏̍͆͛̿͐ͯͩͦ͢ͅt̷̶̰͔̹͓̞̝̣͕̤̣̣͚̯̗̗̙̠͓̬̜͕̭͕͙̠̤̤̮̯̪͚̭͙̭̯̘̭̰͎̙͚̰̦̦͕̠͉͙̖̜̖̘̞̲̲͍͙̝̞̻̗̤̀̔̎̓͌̆̎̾́̓ͅͅͅͅe̶̵͇̪̩̲̲̣͎̦̤̰͕̼̟͚̥̘͎͉̦̮̘͙̞͕̞̙̼̰̘̱̲̦͖̱̫̙͔̳̞̪̝̻͈̞͈͍̼̗̥͉ͦ̆ͬ̈ͮ̅ͭͥͮͫ͆̆̐ͨ̈̈͛́̚͠͠ͅs

</code>```

My package.json file:

```<code>"private": true,
  "dependencies": {
    "@angular/animations": "~13.1.0",
    "@angular/common": "~13.1.0",
    "@angular/compiler": "~13.1.0",
    "@angular/core": "~13.1.0",
    "@angular/forms": "~13.1.0",
    "@angular/platform-browser": "~13.1.0",
    "@angular/platform-browser-dynamic": "~13.1.0",
    "@angular/router": "~13.1.0",
    "eslint-plugin-jsdoc": "^37.6.1",
    "eslint-plugin-prefer-arrow": "^1.2.3",
    "rxjs": "~7.4.0",
    "tslib": "^2.3.0",
    "zone.js": "~0.11.4"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "~13.1.2",
    "@angular-eslint/builder": "13.0.1",
    "@angular-eslint/eslint-plugin": "13.0.1",
    "@angular-eslint/eslint-plugin-template": "13.0.1",
    "@angular-eslint/schematics": "13.0.1",
    "@angular-eslint/template-parser": "13.0.1",
    "@angular/cli": "~13.1.2",
    "@angular/compiler-cli": "~13.1.0",
    "@types/jasmine": "~3.10.0",
    "@types/node": "^12.11.1",
    "@typescript-eslint/eslint-plugin": "5.3.0",
    "@typescript-eslint/parser": "5.3.0",
    "eslint": "^8.2.0",
    "jasmine-core": "~3.10.0",
    "karma": "~6.3.0",
    "karma-chrome-launcher": "~3.1.0",
    "karma-coverage": "~2.1.0",
    "karma-jasmine": "~4.0.0",
    "karma-jasmine-html-reporter": "~1.7.0",
    "ng-packagr": "^13.0.0",
    "typescript": "~4.5.2"
  },
  "publishConfig": {
    "registry": "https://npm.pkg.github.com/"
  }
</code>```

The karma.conf.js file:

```<code>// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html

module.exports = function (config) {
    config.set({
        basePath: '',
        frameworks: ['jasmine', '@angular-devkit/build-angular'],
        plugins: [
            require('karma-jasmine'),
            require('karma-chrome-launcher'),
            require('karma-jasmine-html-reporter'),
            require('karma-coverage'),
            require('@angular-devkit/build-angular/plugins/karma')
        ],
        client: {
            jasmine: {
                // you can add configuration options for Jasmine here
                // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html
                // for example, you can disable the random execution with `random: false`
                // or set a specific seed with `seed: 4321`
            },
            clearContext: false // leave Jasmine Spec Runner output visible in browser
        },
        jasmineHtmlReporter: {
            suppressAll: true // removes the duplicated traces
        },
        coverageReporter: {
            dir: require('path').join(__dirname, '../../coverage/ngx-persian'),
            subdir: '.',
            reporters: [
                {type: 'html'},
                {type: 'text-summary'}
            ]
        },
        reporters: ['progress', 'kjhtml'],
        port: 9876,
        colors: true,
        logLevel: config.LOG_INFO,
        autoWatch: true,
        browsers: ['Chrome'],
        singleRun: false,
        restartOnFileChange: true
    });
};

</code>```

答:
What I would do is:

1.) Create a blank Angular 13 project.

2.) Run npm run test.

3.) See the output of the terminal is proper.

If the output of the terminal is proper, that means it is most likely a configuration problem when going from 11 to 13. If it's not proper, it could be the terminal/your computer. Try doing it in a different computer.

If it is proper on a blank Angular 13 project, look at the blank Angular 13 project and make sure you have the same exact things.

1.) Check test.ts to see they are the same.

2.) Check angular.json to see they are identical or the same.

3.) Check package.json to ensure the packages are the same and the versions are the same. The packages in question are jasmine, jasmine-*, karma, karma-*, and even the @angular ones.

Hopefully that diagnosis helps you.

Body:
I've updated my Angular project (it's a library) from 11 to 13 and now, I get an infinite sequence of non-ASCII characters when I run the ng test command.

The output of the command:

                                   !             H|H|H|H|H           H__________________________________             H|§|§|§|H           H|* * * * * *|---------------------|             H|§|∞|§|H           H| * * * * * |---------------------|             H|§|§|§|H           H|* * * * * *|---------------------|             H|H|H|H|H           H| * * * * * |---------------------|             H|H|H|H|H           H|---------------------------------|          ===============        H|---------------------------------|            /| _   _ |          H|---------------------------------|            (| O   O |)          H|---------------------------------|            /|   U   |          H-----------------------------------             |  =/  |           H              _..._/            H              _|I/|_            H      _______/| H |/_______    H     /           / /          H    |          | | /         |  H    |          ||o||          |  H    |    |     ||o||     |    |  H    |    |     ||o||     |    |  H   Carl Pilcher
ẗ̨̨̩̪̭͍͖͓̩̣̺̗̼̲͈̼̺͕̦̝̠̠̲͔̀̈̒̏̾ͪ̍̋̊̒̄ͣ̂̀ͅeͮ̌̅̿͊̚͞ ҉̶ ҉̦͙͎̦̯̻̗̠̠̹̣̠̹͕̩̥̟͙̱͎̠͇̩͎̞̜̰͖͓̟ͅs̸̶̢̛̙̫͓͚̫͚̠̳͔͍͔̮͍̟̟͕̼͙͙̗͂̔͑̿͛͂t̸̸̶̯͔̼͈͈̯̠͖̭̜̙̾͆ͤ̓ͧ̅́ͤ̎͗͌̂̆̇ͤ́͠i̧͕̙̟̦̥̟̭͚͈̜̼̘̙̜̼͍͓̱̙̻̬̗̖̜̲͖ͭ͗̆͊̀͝ń̡̡͕̲̬̮̣̟͇̙̳͖͔̼̼̫̮̩̜̯̫̪̫̞̙̹̉ͩ̑ͧͭ͐̒̄̃̋ͮͬ͜͟g̴̻̫̘̬̺͓̳̞̫͇͙̙̻͓͔̭͈̋ͧ̌̍͛ͯͧ̂ͣ̈͊̽̈̎̀̀͝ͅ ̛͉͇̭̝̥̜͚̼̱̬͖̣̥̠͙̦̻͉͙ͭ̇̔̂ͫ͋ͪͭͮ͜͠ẗ̵͇̼̭̞̥̲͙̠̫̺͈̯̠͔̮̞͍̹̺̗͓̻̝̦͖̰̖̤̞̺͍̜͓̞̻̪̻͇̎͐ͩͧ̐͛̑̓̉ͯ͑́ͤ̈̂̓͜͡ͅͅͅḙ̴̥̹͖͎̝͖͍̩͉̼̠̝̣̰̳̝̣̰̟̱̣̰̜̖̗͔̣̦͉̪̝͕͍̭͉͍̳͕̮͖̣̱̓̅ͤ̽ͬͮͣ̂ͩ͐͛̋̓͛ͦ̓̽̓͘͝͠ͅͅs̏͌̂̿ͥͤ̒̋͟ ҉̱̹̹̟̲̯̳̻̣͔͖̰̫̩͇̫͖̦̱͍̳̗̮̭̗̥̪̮͇̠̲̦͉̱͇̫̮̩̲̘̼͇̟̠̤̹̞̼̱̝̮͔̠̪͙͈͉͖͙͢͝ͅt̡̝̬̯̗͍̠̦͎̝͇̤̼ͨ̉ͯ́̉̈ͣͣ̽̈ͤ̈̂̃ͦ͑͠į̼͚̙̗͇̙͍̖̤͕̺̫̖̰̱̦̫̻̙̫̘͕͚̖͔̩͍͉̥͓͈̹̜̼̖͙̲̄̒͂ͩ̽͌̌͒ͩ͆͂͌̊̓́͑̃̚͜͢ͅn̶̡̗̭͈͔̪̩̹̱ͯ̍̇ͥͦ͒͆ͨ͛̐̎͞g̨̢̢͙̬̥̼̜̽͌̈ͧ͟͡ ̵͔͚͍̳͎̩̦̼͉͕̥̖͉̭̠̥̮̫̂̊̄͆ͦ͐͂̎́ͮ̈͛̎̐ͨͭ͡t̨̹̼͔͎̝̠̖͖̺͉͓͍̬̲͚͓̖̫̺͓̻͍̙͙̜̤̱̤̮̲̠̯͉͙͍̼̞͉̳̗̻̖̭̣͔̲͙̫̱̟̜͙̦̥̥̠̰͎͚̰͎͙̳̓̍͌ͩͪͣ͐̂͋̉͗̓̇ͬ̓ͫ̿ͧ͟͡ͅȩ͉̗͍̫͖͈͕̪̓̀ͣͥ̀ͅs̷̞͈̠̺͔̲̝̣̩̠̫̩̻͙̬͓͇̲̘̮͕̲̮͉ͬ̐̈̔̋̐ͯ̚͘͝ͅť̳͇̲̼̻̱̥̤̭̺̣͖̯̦̝̝̠̤̦̟̬̩͉̮̟̘́͌̈ͦͥ̈̉̒̉̔̿͊̏͆̍ͪ͘͟ͅͅį̶̺͔̹͔̭̟̪̦̬͍̼͍̼͕̙̞̬̪̜̭̱̰͇͉͎̭͚̩͍̖̜̹̱͖̼̖̜̱͔͇̠̪͓͎̣͙̟͚͓͊̃̎͌ͤ̽͛̊̎ͧͅn̷̛̛̺̲̻͚̬̭̹̙̠̥̱̜͈̠͖̦̺̹͕͚̺͓̰̤̒ͬ̍̄ͥͨͮ̌̈̓͐̔̂̒̀͝͞g̵̸̼͉͖̮̙̬̮̹̭͔̖̪̠̦̰̠̼͓̼͇̯̤͈̭̤̺͉̭̗̰̦͓͓̤̟̝̙̺͙̯̙̱̜̹̹̬̼̤̯̱̺͂̌ͪ̑ͨ̔ͭ͊ͨ̓̓̃ͥ̍͢͞ ͣ̉̑̍̋͒̀̈͂ͪͯ͆̾ͮͦ̓ͫ͡ ҉̸̧͔̼̰̬͉̖̭͖̮̣͖͎̬̟̻̤͉̰͍̭̖͙̻̖̠̭̦͓͙̝̺̲͍̻̳̟͉̙̤͎̥̙̺͍̮͉̲͖͎͇͚̜͞t̶̸̴̛̬̜̼͍̬̬͚̠̼̺͕̝͇͔͓͈͓̤̹̙̟͉̘̻̹̭̪̞͖̫̰̣̱̭͙̼͈̪̮͉̍ͧ̉ͦ͒̈̉̾̏͗͌̓͒̀̚ͅe̸̷͓̖͉̫͓̤͍̩͙̺̦̦̬̭̞̞͚̳̪̘̥̟̫͈̘̦̠̤̙̖̰͆̍̆͐̐́͟ͅş̥̝̙͍̤̤͍̙̘̺̩͎̜̤̭̼͕͙̝͉̟͓̥͓̦͍͕̟͚̜̱͓̤̣̭͇̭̬̮̲͖̱̓̔̔̔ͧ̀͐ͫ́͊̀͘͜͝t̵̷̵͙̯̜̳̣̹̙̱̤̰̣͇̭̖̜̩̗̝̳̭̣̽̐ͦ̑ͨ̍ï̧͖̘͇̻͎͖͓̪̝̦̹̹͇͓̗̤̭͍͕͕̠̥̪̺͓̮̠̭̯̤̲̮̘̺͇̭̼̥͉ͣ͐̑̏̓͌̋̽̀̇͋̾̈̒̓̊͐̚͜͝ͅn̶̤̜̹̗̗̙̠̭̯̦̫̞̬̳͔̗͉̥̘͈̹̫̫̾͑͑̅ͪ͑̂̈̔̇͐́̓ͤͩ́̕͞ͅg̵̷͖̪̤̰͖̦͚̦̗̞̙̤͈̯̮̯͖̲̠̱̝̥͕̯̱̦̻̜̟̖̼̜̠͕̟̳̠̟̘͉͖̙̖̫̼̻̪̼̹͕̖̜̗͉͉̤̤͕͕̎ͥͨͦ̋̄ͭ̈̎͗͗̓̈͋̆ͥ̇͢ ̵̡͖͓̯̫̻̘̹̰̺̰̖͔̤̦̝̥̜̩̤̙̤̝̜̖̯̗̼͈ͪͤ̂͋͒ͬ́̾̒ͧ͊̾ͭͫͩͯ̓̚̚͠͠͞ͅt̶̶̫̺̙̥͉͎̝̦̱̭̗̗͉̘̫̗̮͙̻͙͈̮͈̭̝̻̘͇̥̣̦̮͈̞̙͙̫͉͖ͦͥͮͮ͒̃͝ě̼̬̼͇̯̟̬͚̑̑̾́̇ͧ̎̾̃̽ͬ̊͂͊͋͠͠ͅs̶̴̛͖̫̺̝̙̺͇̫͎̭̹̠̮̫͔͙̯̱̤̳̰͍̼͈̬̩̪̝̳̞̫͎͙̰̹̪͎̲̲̹̯͕̲̗͙͙͔̰̼̖͔͔̱̯͈̤̪̱͔ͭ͑̾̐ͨͩͬ̉́̇̓ͬ͗͆ͫ̒ͮ͊͜͝ͅṱ̜̝̲̠͉̻̭̳̝̞̘̰͓͚̠̼̩̤̪͔͚̥̣̥̟̜͕̤ͩ͗͗͗̀́̕͘͞ͅͅi̶̛͎̪̻̜̪̗̘̜̞͚̣̥̻͖͈̞͍͎̳̥̠̣͎̩̱͚̺̯̬̤̘̖̥̼̘̗̓ͣ͗̀ͫͮ̉̄̿ͩͨ̅̏̊ͦ̂͊̉̚͞͝͡n͇͎̦̼͚͖̩̜̱̘̫͇͎͈͔̜̤̟̞̼̰̖̟̹̲̱̝͉̦̰̼̝̯͙̤͕̟̹̯͔̦͉͙͙̞͈̼̯͕̭̳̳̭͙̭̘̖͉̰͓͓̬̯̉̂̃̈̇̾̑̓ͨ̅̒̊̈̚͜͡ͅͅͅg̸̴̠̯̲̞̱̜̱̹̼͓̈ͧͣͮ̍͆̍́͜ ̴̡̻̳͉̭̜̜̩̠͖̖͇̲̺̠̖̲͖͙͉̹̞̯̖̬̜̼̹̖̭̣̥͍̺̖͍̘̬̜̜͖͔̜͈̲͎͓͚̫̹̳̍ͭ̑ͫ̀̚͟t̨́̿̎̌ͥ̇͑ͩͪ̎͌̌̉̇̌̓̚ ҉̥͔̙̙̤͍̙͈̘͕̫͎͖͍̲̱͘ͅeͥ̍̏̀̈̏̄ͩ̃̇̈ͤ̐ͥ̚ ҉̴̷̲̳̮̻̥̭͓͎͎̰͕̪̲̙̱̙͍̞̭̥̙̟̤͈͕͖̹̯͔̹̤̜̭̙͉ͅͅs̡̺̭̯̬̗̹̰̭͙̝̹̙̝̰̙̠̰̥̭̪̬̻͕̞̫̟͔̥̳̪̥̣̪̱̬̹̥̘̦͖̦͈̞͙̟̭̫̟̬̗͕̗̤̘̭̮͓̜̗̰̣͛̋̍̽̍ͧ̏ͤ͐ͪ́͠͠ͅͅͅͅͅͅt̵̷̙͉͔̥̭̪̤̩͕͉̘̤͎̙̤̼̥̻͙͕͇͇̯̯̫͎̳͓͖͎̲̮̹̮͇̤͎̲̤͔̙͖̝̥͊̐̃ͩ̋͊̕͜͠ì̶̡̡̦̼̱͙̻̖̪̹͕̓̽͛͊͛̈̇ņ̠̯͉͎̣̮̥̫͕͓̝͍̫̣̹̙̪͓͉̥̥̤̞͎̮̱͈̩̩̭͈̙͇̠͙̬͖͕̝̮͉̫̫͔͕̗̭͔͚̼͖̳̘̫̹̤̑̂ͯ͐̅̍ͪͦ̍͐̒ͥ̇͆ͨ̊ͭͨ̀͘͟͠g̴̨̤̯̞̘̭̬͈̼͉̠̱̘͚̠̙̼̪̺̗͙͕͖̼͔̻͒̄̑̊̈ͨͦ͗̊̔̐ͤ̚͢͝ ̵̧̘̟̣͖͇̘̦̹̺͍̮̼̜̙̼̹̗̗͈̺͙̗͎̯̥̮͙̫̠̟̱̳͈̺̥̭͕͚͇͎̟͔̘̤̠͕͍̗̯̻̯̖̂̈̌ͯ̒́͌ͬ̀ͥ̾̔͋ͬ́͢͝ͅţ̷̻͎̳̝̱̗̞͈̺̠̟̞̖̬͚͇̥̋̑͗͌ͨ̈̈̌ͤ̽̇̓ͮ͘͜e̿ͨ̏̃̑́ ҉̸̨͉̙̭̭͎̫̜̣̫͎̗͖̜̰̥͉̮̟̱̰̩̜̳̳̝̫͔̯͚̺̮̮̼̝̲̣̞͉̟͍̣̣͢ŝ͕̥̜̮̰̝̼̪͔̘̹̜͈̹̭͉̯̯̜̳̝̜̪̦̤̤͈̙̖̘̹̰̰̺̜̮̯̭̪͚̩̘̝̺͖̪͇̙̹̯̜̰̮̠̗̜̹̫̥̟̲̗ͮ̊̈ͬ̑ͧ̽̾͘͞ͅͅţ̸̢̤̖̥̣̦̮̺͔̼̘͚̲͚͛ͦ͒ͭ̔̃ͪ̍ͬ̊̀͒̈ͫͤ͗͌̃͠i̺̠̠͈̰̗͕̦̗̮̜̪̫̮͖͙͖͍̩͎̹̼̭̣̼͖̼̣̺͇̰͕̗̼̪̞̪͓͇̺̠̜͙̹͎͈̘̞̞̖̼̭̹̹̯̰̹̟̲ͥ̉̏ͬ̽ͯ̂̅̄ͬͧ͊͜͟ͅͅn̶̍͑̎̃ͮͮͮ͆̂ͨ̐̈͂ͭͭ̔͗̾͝ ҉̴̪̞̖͙͓̼͉̗͕̫̰̪̜̣̝͈̺͎̮͍͓̘̱͓͔̠̣̱̣̼̮͕̼̫̪̝͉̥̖͔̝͔̫̭ͅḡ̿ͫ̒͊̊͒͠ ҉̢͈̩̞̮̖͖͕͈̩̙̝̙͎̙̰̱̻̞̗̘̣͈̣̰̥̘͍͙͔̙̝̱͚͎̬̙̭͍̱̜̮̼̭͇̙̗̮͟ͅͅ
t̵̷̛̰͔͕͎͎͔̙̺̭͖̜̺͔͇͉͚̘͖̪̱̞̰̭̜̰͚͍̦̤̬̬̗̜̱̝̩͍͎̟̹̗̯̳̝̲͚̿̂ͬͥ͋̌̊̾̔́͢ͅͅͅę̴̧̟͍̱̥̖̼̘̮͖͑͐͛̆ͥ̅͊͛͠ͅs̛ͪ̅̿͆̄̐͛̍͒ͥ̒̅̏̎̍̍̄͢ ҉͖̖̮̰̙̤̖̣͉ṭ̵͇̟̩̖̬̙̯̼̼̎ͦͬ͂ͪͥ̌ͯ̀́̚i̵̸̧̨̹͈̪̝̗̬̠̳̠̰̱̥̜͙̘̟͉̺̦̭̙͙̠̻̜̦̳̞͇͇̯̜̜̥͇̳͚͖͇̹̜̬͎̤̪̱͈̜͐̎̂̿̊ͤ̑̐͌̇̚ͅn̷̮͚͎̦̬̬͈̞̺͈͖͎̞̠̱̥̠̜̤̱͓̭̪͖̤̣̦̰̝̹͍̜̘̪̬͈̄̑̾ͤͥͩ̽͆̾̀̚͜ģ̧͕̼͇̥̖͉̞̺̩̮̰̦͉̯͓̦̥̯̫͕͚̯̮͕̳͇̝͚̫̟̼͓̞͔͇̼̪̾͐͋̏̓͘͝͠ ͍͎͓̝͙̝̯̟͍̫͍̠̩̝̖̱͉̪͕͓̯̼̝̼̜̯͎̭̬͉̱̝̼͎̬͈͈̫͎̙̖̟̫͖̝̘͇͈̠͑̉͂̃̒̔ͤ̆͊͛̀͘ͅͅͅt̵̵̵̺͕̱͙̰̼̹͇̭͔̬̞̣͔͇̼͙͍͖̺̰͓͔͙̍ͨ̊̔̊ͬͯͦͬ̉̂͆͗͞ͅͅe̢̦̘̩̘͕̰͎̲̻͙̦̣̪̬͖͈̯̭̬̫̱̯͓̤̣͓̤̠̳̱̼̠̹̭̲̰̣̱͇͚͈̞͔͚̻̝̘̱͎̙̩̼͚̠͎̻͓͗͊͑ͩ̀͌͛͌͒ͩ̐͆͛̆͜ͅͅͅͅs̢͉̦͔̙̮̳̰͍̭͕͍̳̟̹̜̹̬̲͍̻͙̤̺͔͉̮̘̖̟̙ͪͩͪͪ͘͘ͅt̷̶̡̥̜̱̪̪͕̦̯͇̫̠͔̯̦̤̖͚̰̳̟̙̙̱̺͇̙̱̖̦̻̺̯̟͚̜̠̣̲̗̰͔̙͔͇̖͚̺̙̦̝̳͇̣̖̮̲̝̯͙̯̼ͩ̒̂̑͌̓͐̌͐̊͌̀̈ͦ̕i͇̗̮̲͕̮̹̯̟͓̬̘͙̞̱̠̤̣͍͔̩̠͔̺͉͚͎͈̥̭̙̤̮̫̩͓̼̗̙͙̼̞̦͉͉̠̩̙̍ͭ͛ͥ̄̈ͫ̽ͬ̕͘͟͡ͅn̷̯͇̻̫̭̣̺͖̙͈͖̰̝̣̪̟͈̭̯͕͙̗͉͓͖̻̬͈͎̻̮͖͕͎ͣͭͯͤ̿̾̅͂͋ͮ̀͘͟͞g̡̻̩̬̥̳͉̣͇̼̰̭͖͕͍̍̄ͦ̔̌̀̋̽ͬͨ̎͆ͨ͊̈̍́̕͠ ̭̩̞̣͇̦̦̜͍̠͙̠̮̝͉̦̫̝͇̘͍͖̤̙͙̥̲̩̙͍̲͍̫̥̥̪͖̩̥̞̊ͭ͆̑ͨ̽ͯ̌ͮͫ͂͐̏ͫ͒ͮ̃̚̚̕͞ͅţ̷̗͉̝͓̙̠̱͎̙̰̹͖̣̘̜̪̬̫̳̲̜͚̜̲̼̱̤̫̝̭̜̺̼͓̮̗̙̲̑ͬ̋̓͂͌̏͋̀e̶̵̸͚̲͍͎̭̭͇͕̼͖̳̱̪̝̖͈͕̬͈̳̍ͪ̅ͩ͗͆͜͝s̷̟̼̳͓͎̬̩͎͎̣̦̟̺͓͙̝̹̯̭̣̭̖̣͙̫̗͖͔̟͈͍̫̯̜͇͕͖̱̲̜ͤ̎̌͒̈̈̋ͮ͊͑ͬ̓́ͩ̕͜͡ͅţ̷̸̷̩͔̳̲̙̮͈̼͓͖͎͚͎̞̠̙̩̬̗̲̜͉̥͍̯̻̩̖̳̭̥̦͍̳̱̖̖̯̖͉͕̮̞̤̜̩̬̘̱͓̪͈̼̖͗͊̃̊ͨ̇̉̓ͤͯ̂͌͑̋͞i̢̱͓̲̮͇̻̫͉̰̲͓̭̫̺̞̤̘͙̦̬̮̩͖͓̪̠͈͇̣͙̳̳̗̺̜̜̮̗͖͍̼̮͙̬͇͖̱͇̱͎̦̳̦̙̜̗ͤ̎̊͌ͤ̓̿̽͛ͪ́͝͡ņ̡̮͕͎̯̬̬͔̺̫͙̰̲̘͈͉̱͔̬̤̹͚̯͖̟̺͓̫̻͉̩̒ͦͯ̆̐̄͐ͤͭͮͫ̊̇̇ͥ͛̚͝g̢̤͇̼͓͙̣̗̙͕̬̮͍͎̲̿͛̑̽̀̂̉̔͑̓̾̉̈̾ͫ̈͗͌̚͠ ̸̧̟̻̥͖̏̌̈͒̆͗͂̀́͜͝t̵͓̥̮̟̙̭͙̮͙̭̲̺̝͎̝̱̯̠̥̣̪̥̥̞̺̺̖̺̼̖̝͇̘̩̠̮͖̠͔̳͈̩̮͕̟̺͕̣̬̟̥̋̀̑̄́ͧ̍͊̀̀͟͞ͅe̔́̍̾ͬ̋͌ ҉̸̢̀ ҉̫͖̤̘͉̳̯͕͇̹̤͓̳̺̰̻̟̬̞s̢̳̬͖͖̭͙̤̮̺̗̼̪͍̬̠̜̘͍̰̣͈̪̥̱̫̤̼̣̞̬͚͓͔̙̺̤͉̙͚̦͕̖̜̤̙̱̞̹̤͕̙̪̱͔̮̭̰̲̺͚̮̥̄̑ͬ̌̍̆̓̅ͩͥ̏̂ͤ͂͑̋̾̀͢͠ͅͅͅt̸̷̬̩̹̺͔͔̭̏̎͗͆͆ͯ̚͟͞i̜̘̼̜̦͈͍̲̯͎͚̝̜̩̤̞͉̘͎͚̠̝͔̯͇͉̱ͥ͑ͦͪ͢͟ͅͅn̴͕̜͕̜̭̙̪͎̪̳̹̣̞̟͉͈̲̯͙̬͕̟͉̫̗̭̺̜͒ͯ͐̆͆͐̇̓͝ͅͅg̫̗͓̝̺̬͔̰͕̱̳̹̼̗̗̳̻͇̹͍̟͙̟̘͇̪͔̦̻̜̙͙̼͎̪̊ͮͦ͆̌́̚̕ ̸̧͚͈̠̺͖̳̮̩̞̘̞̗̘͚͕̳̫͉̟̠͖̙̺͕̬̭̤̻̼͚̬̹͙͍͓̺̳̣̣̼̮̗̯̱̼͎̹͚͈̝̻̰̹̩͕̫̟̦̼̣̦̖̱̜̃ͣ̋͗̈͒͒ͣ͡͞ͅͅṭ̨̙̦͍͔̝̩͔͕̦͔̮̖̝̰̥̣̭̱̮͍̞͈̞̭̯̬̮͇͕̺̯̹̗͇̩̺̥̟̯̯̻ͪ̔ͤ͗ͩ͊̀̑̾ͬͬ́͠͞e̿͛̎̆̈ͯͫ̂̈̆ͤ̈ͯ͐ ҉̧̼̻̩̳̟̰̪̯͕̣̦̠̟͇͔̦̪̮̯͓͢͜ș̢̢̣̲̭̭̺͚̹͈̩̲̰̳͓̳͚̬̮̖̖̺̤̖̻̣̗̭̥̱͎̰̞̖̗͙̠͎̭̦̠̥̳̗̩̞̣͇͐̄̔̑̒ͦ̆́͊͝ͅt̨̘̫͚̙̔̔ͨ̆̓͞͞i̴̵̡̼͎̙̬̦̪̮̳̘̬̲̘̣̞̣̱ͮ̈̐ͮ̄̈ͨ͌͊ͯ̊̈ͨ̂͐ͧ̎ͧ́n̨̼̞̩̬͈͙̮̮͍͉̝̮͇̜̞̦͇̻͈̦̤̱͙̜͇͉̻̪̩̹̟̟̣̤ͦ͑̋ͨ̎͠ͅͅg̸̶̮̗͉̜̱͓̮̠̹͕̟̼͔̹̗̥̞͓͚̯̦̣̮͔͙̠̟͍͖̳͖̤̭̼̹̻̖̯̟͖̟̪͓̜̯̺̗̤͕̰̞̣̼̓͛ͩ̈̓̐̊͑̾̍̕͜͝ͅͅͅͅ ̟̥̪͍̰͇̙̟̝̺͍͍͍͖͈̮͖͓̱̪̪̯̗̞̽́ͭͤ̍ͧ̒͒͌̽̀̕͝͞ͅt̷̛͍͓̼̺͈̓ͥ͐̓ͯͪ͒̈̐ͫ̒̅ͯ̈̃͝e̷̫͙͔̯͎̦͔͍͇̤̫̱͕̻͇͙̖̔̽̑̂̽͊̆̔ͣ̌̓ͬ̂ͬ͗ͧ̑́s̶̵̴̸̢̟̣̭̹̪̟̜̼̤͙̙̫̞̲͈͙̤̼̦̘̟̩̅ͧ̎́̓̿̉ͬ̌̑ͤ̂̚ͅt̷̛̹͚̞̩̹͉͑ͣ̾͊͠i̶̧̠̯͖̺̫̯̠̜̠̘̫͉͔̦̜̯͈̱̪̗̱͙͚͕̼͕̯̤̙ͣ͒̾͌̅̂͌ͮ̓̓̒̀̀̚͢͢ͅͅn̶ͬ͋ͤ̎̽ͦ̍̍͛͡ ҉̧̰͇̻̝̰̦̲̝͎̯͉̺͙̼̦̰̞̫g̢͕͖̞̜̠͍͕̤͇͔̤̠̲̰̘̲̹̖̤̼̼̙̻̻̖͉̩̥̯ͩ̂̈̏̀ͬ̚͘͜ ̝̣̫͕͚͓̺̮̟̮͖̘̱͙͇̺͙͕̝̥̻̭̥̳͓̗͚͉͉̦̗̟͍̥͖͉̳̞͍̹̟̠̗̙͓̩̼̼̫͓̗̲͉̻͓̱̿̄̈ͣ̊͌̇̒ͬ͌ͧ̆ͪͪ̚͟͠t̸ͤͤ̿͋ͥ͆̉̌̎̋̈ͪ̆ͨ̽́ ҉̝̳̼̘͈̥̣̤̼̘͞ȩ̴͍̜͍̱̼̹̪̖̟͔̩̜̝̜͍͎̙̼̗̘̘̜̠͙̟͙̬̦̯̳͈͓͈̜̯̝̝͔̹̳̩̥͍̺͇͕̰̫̱̹̦̜̃̇̂̀́̓̑̒́͘͘ͅͅs̺̖̮̺̥̺̩̱̭̰̫͍͙͉̩̼̗̼͕͇̳̥̮͔̩̻̠͉͙͖̱̣̜̬̝̯̦͖̝͙̱̲̰̬̹̮͚̼̲ͪ́͑͗̆̑ͦ̌͆̎̾ͧ̚͢͝ͅͅt̴̶̢̺̠͓̬̘̠͍̻̞̟͈̜̙̬̥̜̺̞̪̜̯͔̩̪̲͎̙̞̺̺̝ͧͯ̇̿̃̂̊͊̀͘ͅͅi̶̬̘͓̪̻̪̗̰͈̱̜̗̜̠̜͕̦͖̝̘͚̯̜̟͕͇̖̲̹̗͎̝̰̻̺̭͍̳͇̖͔̦͈̺̙̩̝̹̖̙̻̹̹̬̪̝ͭ̐ͬ͗͂͗̔̅ͭ̐ͤ͌͗͛̄ͫ͢͢ͅn̵̵̳̭̫̻̳̼̪̲̝͔̫̘̝̮̯̤̩͉̗͎͚̣̻͍͚̰̫̤̣̙̤͚̭̯͖̤͇̝̝̳̉͒̓̏͢͜g̵̺͖̗̥͙͔̝͖͑ͬͫ̇̾̂̄̃ͯ̚̚͡ͅ
t̶̬̰̱̼̤̱̬ͫ̓̏ͤ̃̕͘̕ê̵̘̜̯͇̲̤̟̹͖̤̳͉̥̠͍̲̭̱̣̭̘̥̗͉̱̰̤̤̟͇̬͖̦̺̰̘͚̱̭̖̠̜͔̱̲̝̮̟̼̦̩͙̳͙̤͖͇̓͒̒͂͒́͝ͅs̴̲̬̫̲̬̗̳̻͉̝̝̻̗͔̫̯̹̯͕̖̙̗̬͍̱̝̤͇̫̱͓̠̫̼͚̯͇̠̯͚̦̟̬̠͍̩̼̰͈̻̠͕̣̯̻̓̋͒ͫͭͮ̐͌͟͠͞ͅͅt̿͊̈̊ͪ͘͘͠ ҉̣̞̺̱͈̘̼̲̰͙̤̞͖͔͉͔͚̬͉̱͖̣̥̤͍̦̦͙̖̬̣͘i̴̡̪̣̪̲̥̖͔̱͈̬̜̖̩̱̱̘̜̝̱̦̘̖̩̳̣̬͚̩͉̥ͦ̃̎̓͊͐̂͌̀̚͘ͅͅn̶̢͈̟͇̘̟͉̻͚̲̣͎̣͓͕̹̹̺͓̱͍̼̠̟̞͉͎͔͙̼̙̖̯̰͈̹̳͙̲̥͎̖̳͙̻̼ͯ͌̋͐̍͋̓͂ͨͪͬ͂͌͝g̶̨̨̨̨͖͙͇̤̑ͣͮ̓̾͐͌͒̃̽ͩ̀ͮͩ͊͒̀ͩ̿ͅ ̸̧̛͕̞̻̹͔͕̘̼͔͇̤͈̤̣̮̜̬̭͙͔̥̼̠̤͕̲̙̖͈̤̫͚̯͚͉̘̣̦̮̬̦̻̗͉͈̣̖̬͖̯͙̞̦͙̣͖̣̣̺̒ͪ͗͌̒ͫ̾ͥ͢ͅͅt̵̷͔̼̖͕̰͚̰͔͈͎͕̹͇̞͙̤̩̻̠̘͇͇̠̠̲͉̜̟̳̬̖͉̼̜̖͍̪̼̲̲̳͎̘͎̝̠̜̯͙̝͇̹͇͉̭̉̓͆ͫ̋́̅ͬ̉̿ͧͪ̀̕͝ͅͅe̷̢̩͚̞̟̤̠͍̖̹̻̠̫͔̩̯̤͖̻͕̖͇̘͓̿̊͑̋ͩ͜s̡͉͈̙̠͔̘̹̠̫͚̮̻̯̦͇̖̤̰͇̫̙̲̫̼̹̱̰̤̠͚͕̬̤̱͉͖̫̻̬̬̱̘̰̝̬̟̺̮̖̟̘̣̯͈̻̙̫͖͚̻̫̱ͨ̎̔̆̃̇̏̈ͥͨ͂ͣ̿̅̀͊̓ͣ͘͟͝͠ͅͅt͙͈̝̦̖̳̠͈̺̙͎͉̘̫̘͓̫̤͑ͦ̏̓̅ͪͤ̈ͥ̀̚̚͘͝͠͞ͅi̴̢̿͛͋̈ͮ͐̾́ͫ͑ͦ̃̚͜ ҉̶̥̣̥͔͔̘̩͔͍̭̲̬̗̥̥͕͇̠ň̴̝͕͉͕͎͔̩̦͓͉͓̪̯͇̳̩̠͉̩͕̘̜͖̹̘̱͓̺̻̹̯͙̤̹̞̤̪̪̗͔͕̝͉̙̺͓͔̪̱̪̤̲̖ͫ̔̓̀̂̉̑̓̒͒́͘͢͞ͅͅͅg̛͚͕̱̖͙͚̃̂̄ͪ̎́̾̚͘ͅ ̵̉̑́͒͒ ҉̧̛̗͈̦͉̠̥̘̘̭̟̲̼̮̠̘͈͈̦̞̣̺̲͈̘͚̰̩̹̹̰̻̮̺̩̰̰̼̤̭̘̞̝̜̻t̵͙̤̘͎͇̙̙̭̖͕͔̗̍̈̅̌̏͛̀̃̂͊͛́̚͝e̵̡̮̘̠̠͙̫̥͇͈̥̞̻̖̊̎̂́ͬͨ̄̏́̚̚͢͡s̶͔͈͖͇̟̺͓͓̟̯̣̭̹͙͔̳͎͉̺̦͚̩̯̯͈̞̝͕͈̠̙̬̣̘͙̯̺̪̩̫̜̗̭̮̳̦̭͇̣͚̼̟̞̻̥͓̫̼̜̬̜̒͛ͦ́͒͛̇ͨͩ̅ͭ͆ͮ̌̔̎̎́̚̕͡ͅͅtͧͭ̅̇̌̇̋̀́ͪ͗ͣ́̀ͥͩ̕̕ ҉͔͔̥͈i̢̨̡̖̣̜̘͇ͦͥͨͤ̓̾ͨͪ̐̀ͪ̾ͣ̐̎͒͡͠ͅn̶̓ͪ̄̈ͫ̒̿̌ ҉̼͙̱̻͔̥̭̲̠͍̖̩͓͖͍͉̫̙͙̺͇͚̱̫ͅͅĝ̞̝̤̞͔̪͉̜͈̜̪̳̼̘̠̠̥̩̫̪̞͎̜̯̺̝̠͇͇̝̞̺̞̪̅ͨ͑͊̕͘ͅ ̶̶̛̼̘̝̺̤͔̝̞̳̻͍̞̟̲̦͎̬̮̳̻̼̥̮̜̳̩̜̦̦̙̹͉͔̥͖͉̺̩͇̙͎͚͈̲̣̤̤͔̗͎͉̺̙͓̤̗̞̺̗̼̦̞͆̇ͯ̐̔ͣ̍͆̽ͨ͆̃͊̄ͪ̓͡ͅt̴̋ͣ̎̈͊ͫ̍̓͐ͭ̉͟ ҉̤͖̣͕̬̤̩̱̠͍͉͓̹̹̫̜̻͈̟͍̝̗̟͇̦̻̲̦̭̼̖̼̹̣̠̰͎͙͉̱̠̘̬̮̬̱̯̥̯͇͍͕͈ͅe̷̵͖̘͕̱̤͔̭̣͙̮͎͚̝̱͙̝̗̩̖̟̖͍̗̣̰̭̲̪͕͇̙̹̙͚̣͕̖̻̤͔̝̤͍̣̬̰̭̫͖͍̬̬͍̜͛̀̾̋̒͒͂͋̔ͪ͘͠ͅş̷̛̜̺̞̰̗̪̹͖̗̗̪͕̠̯͈͍̗̳̩̙̗̜͍͖͇͕̱̭̫̦̜͕͈̝̥̭̮̘͉̩͚̬͈̙̮͓̭̦̃̑̓͌̔́̚͠ͅt̛̪̘̙͇͙͕̤̳͈͇͙̼̗̫̬̮̤̥͍̪̠̖̖̲̼̘̮̾̒̓̄̒͛ͪ͆ͮ̕ͅi̢̪̲̖͉̠͔͉̙̪̫̤͇͈̙̖̭͔͖͔̼̗̪̗͔̖̼͇͚̻̣͓̥̮͚̜͇̪̝̯̟̰̟̰̫͍̝̯͒͗̎͂̈̍ͩͦͥ̀ͣ̎͞ͅn̢̡̟͖͓̟̱͙̱̞͈̮̣̞̹͎͓̫͍̺̯̤̤̙̥̦͖̭͙̹̰̞̯̣͙̭̖͍̼͕͇̮̺͚̪͚̗̖̹̺͉͍͈͙͎̼̣̬̫̝ͤ͆͒͐̈̈ͩ̍̈̂̑ͦͤ̎́͜͝ͅͅͅͅg̡̖̲̹̣̠͉̥̙͔̲̱̙̱̩̫̟̰̗̥͎̹̹̤̙̫̱̦͇̣̪̞̘̺̥̗̲̝̭͒ͩ̑̉̓͊̊̇͝͝͡ ̶̨̺̥̙̱͙͙̜̱̀̌ͩͬ͗ͩ̃͊̍̾̀͢ţ̟̣̗̲̦̩͍̩̣͎̝̦̘̜̟̭͚͎͙̜͔͍̞͕̟̖͖͉̭̼̩̖̩͉̺͉͕̯̣͚͕͖͔̯̜̭̙̰̼̟͉̮̻̭͇̗̱͕͕̱̓ͪ͂̈̎͠ͅͅͅe̝͖̜͔̳̫̙̼̫̬̝͖̰̳͍̯̰̬̠̻̱̗̗͔̞̲̭̜̰̹̙̯̹̘͈̞̻̠͇͓̫̤͗ͬ̀̆̉͗̔̄̑̄͗̈̿͢͢s̴̡͖̯̪̦͇͉̞͔͕͔̻̟̯̖̾͑̎͊͑̿̌ͭ̋̂ͭͣ̆͛̚͝t̴͈̤̩̟͖̘͚̮͕̦̙͍͓̝͎̹̮͚͎͍͇̗̗̰̱̪̹̗̣̦̲͙͈͔̳͍̺̱͍͈͓̱̼̞͚͉͈͔̻̺͈̙̪͔ͩͤͣ͋ͬͤ̌͑̇̑̉̏ͤ̀̐̅̍̊͜͜͞ͅͅͅį͓̺̫͚̩̒͂̓̈ͯ̏ͥ̍ͥ̑ͤ̀̉ͮͣ̈̍̚͡ͅn̪̩̭̯̪̖̫̱̗͈͙̣̲̭̹̲̞̺̪̠̰͒͐̊̆ͣ͌ͫ̽̃͛̒͋ͯ́͡ͅg̛̼̫̟̠̪̺̖̖̺̹̹̗̩̗̭͕̖̗̟̥̖͈͖̬̪͉̦̳͇̰̣͎̮͕̟̟͙͇̤̲͕̬̗̣̘̙͈̘̦̥͉͓̳̟͔͈̺̲̹̬͈͚̫̲̩͉ͥͯ͆̓̇ͫͨ͜͡͞ ̆̅̆͗ͪ ҉̸̡ ҉̨͈̙̫͔͓̟̟̱̥͍͎͓͎̻͓̳̰̤̙͙̙͚̳̮̺̪̠̣̯̣̗̪̬̱̙̲̙̖͖̣̗̙̝͈̜̩͚̮͕ͅt̶̵͕͖͖̰̣̭͊̓͐ͬ̓͂͑̐̒̒͗́ͅe̦̥͙̲͇̥̟̻͇̦̣͓̩̪̼̳̙͈̗͍̱̥̲̙̟̻̪͍̺͔̫̼̼̞͍̻͓̪̪͇̲̜̠͕͎̩͈̰͚͓͕̝̞̱͖̹̳̻̦͍ͧͣͥ̃́̐ͣͩͥ̃́͐̿́͡ͅͅs͕̮͚͎͎͉̜̤͉̙̼̭̙͙̱̯̭̟̲̞̫̜̰̳̲̳͚̪̫͙̗̖̹͚͉̹̙̹͚̭͔̜̻̘̘͌ͯͩ̌̋̎͘̕tͨ̃͗̂̿ͤͮͮͮͨ͐ͮͭͭͬͨͥ ҉̢̗͎͕͓͙̬͔̱̝͈̩͎̱̙͇̬́͢͞ï͔̯̮̳̫͈͓̠̥͇̮̖̫͔̣͈̿ͩ̉̄̓̈ͭ̌͘͢ͅͅṉ̷̡͚̬̣̻̥͕̖̥̠̦̩̺̤͖̘͕̜̻̣̳̯̦̞͚̝̜̠͉͙̥̔͐͑͛́ͨͣ̀̐̍̊ͧ͊̓͛̃͊́ģ̸̨̦̱͕̫͎̖̜̰͂̊̏̄ͧͭ͐͋̏ ̷͎̬̭̹̺̞͙̟̹̟̰̰̠͖̥̳̞̟͖̻̠̱̝̘̠̪̪̼̼͉̙̫̪̩̠̤̗̭̣̪͚͇̮̺̙̹̥̥͎̪̟͚͖̗̘̻̙̱͔͛̅͛̈ͬͧ́͝͡ͅͅͅt̵̡̛͎̟̘͔̩̤͕͚̬̖͕͎̹̯̙͍͎̪̮͙̞͈̲͓͚͉̬͔̠̞͍̦̥̱̜̩͇͙̹͕̻̖̼̺̟̖̗̤̓ͫ̅ͬ͜͡e̵͉͎͇̠̥̘̙͙̖̤͍̥̖̼͂͐ͦ̂ͤͧ̌́ͧ̉̓̀͝ṣ̷̡̺̘̦͕̲̝̯̞̮͙̳̪̱̫̮̩̙̞̠̰̥̻͎̰̩̟̥̱̣͓͚̮̱̳̜̬̱͇̤ͥ̓ͤ̒̔̎̆͒ͯ̈͑͆̈ͭ̓̚̚ͅͅͅt͌̽ͬ̋̅̋̍͒̄̆͛̚̕ ҉̷̦͙̰͍̞̖̫̭͇̪̻̦͙͍̩͇̬̦͓͉̞̫̯̹̯͕̺̮̘͈̺̞̩͇͙̣̰̖̦͉̪͍̗̹̖͖̪̭̱̣̪̟̯̰͙̘̼͍̖̹̱̙͕̗͍͞i̵͈̘̣̘̟̖̭͉̤͙̤̫̻̜͖͉̱̫̤̥̖̮͈̘̰͈̩̤ͣͧ͛ͦ̈ͯ͘͟ņ͚̦̯̗̠̪̦͕̬͎̙͇̝͆ͬ͑̎̋͂̓̌̂̀̚͢͢g̨̙̭̥͙̝͚̟̦̘̤͚̝̩̼͎̤͇̗̼̟̫̪̰̗̮̻̜͓̳͔̲͔̥͇̙̩͈͙̟͚̞̳̟̯͙͇͖̻̤̺̗͔̙̻͆̍ͬ͆̃͐͊̈ͤ́ͯ͌̉͠ͅͅ
t̿̆͌͒ͩ͒̈̾̓̊ͥ̌͑̓͋́̚̕͘ ҉͈̖̬̫̟̮̭͙̦̘̘̜̞̣̺͚͚̻̺̳̩̖͉̘̖͔̬͖̹̗̻͕͉̖̟̠̝̱̪̥̘̠̩̤͢ͅͅͅe̙͖̗̠̗̹̗̯̜̗̞͚̜͔̝͉̠̪̠̹͙̹͈̝͎̹͇̩̭̬̙̟̣̬̥̠̯̥͇̩̥̱̻͚͇̖̺̫ͭͣ̌ͣ̎̓̈ͨͣ̍̿͒ͪ͛̚̕͠ͅs̴̷̨̙̬̝̘̬̤͔̱̜̟̪̘̻̗͓̮̭͍͙̱͇̫̟̟̞̥͚͓̟̗̬͓̩͖̤͎̺̥̼̥͙̖̙̖̩̲͙̺ͣ̈ͣͣͯ̍̓̃̽͑͆ͪ̌͛ͩͫ̾̄̚͢͞t̶̻̜̬͇̩̣̺̳̰͚̙͉͕̱̤̺̘̦̼̖̔̋̆̉͂̋̃͌̽ͭ̄ͫͮͭ̓͛͠i̶̲̤̹͎̦̳͉̝͈̣̳̟̳͕̥͍̝̺̮͔̪͍̦ͮͪͮͣͣ̉̿̃̈̑̈͠͞͝ͅṋ̳͇̠̞͔̲̳̣̻̜̱̩̬͇̹͓͕̰̘̰̜̟̯̘̻͉̼̣̲̼͎͓͍͚͍̖̻̰̟̼̼͎̜̲̘̩̞̣̯̙͎͉̭̙͉̜͍̅̄ͦ̽̅ͭ̕͢͡ͅͅͅͅͅg̵̷͕͙̹̫̯̟̣̫͙̼̮̘͉͕̞͕̘͓̟̮͙̫̹̭̳̜̫̘̗̪͇̞̗͖̞̥̬͑̈̈̈͋̑͞ͅ ̴̷̨͍̣̹̖̀͌̎̈͛̓̽ͭ̅̔͑͒ͮ̃̈̔̆̚̚͟t̅̊͋̋ͬ̒ ҉͍̥̥̣̲̲͎͍͟ȩ̛̱̮̤͇̺̺̲̦̬̘̹̣̖̜̹͎̳͈̻̬͖̖̖͍͔͍̤̳̭͎͉̠͍̘̜͍̻͖̬̻̳͙͚̜̠̲̻̽̌̾ͭ̏́s̡͇̝̭̪̙̫̲͎̹͚̺̜̬̼̼̜̦͕̜͕̯͕͖̼̯̥̠͈̲̮͈̻̰͖̞͚͉͕̳̞̠̮̣̗̥͎̹͇̟̝̙̪͍̻̞̘͚͕͇̦̼̖̖̪̉̇͆̒ͭͥ̏̃͌ͯ͟͡ͅͅͅṱ̸̱͚̜͎̦͍̜̗̫̲̼͖̺̳̲̮̱͎̳͔͇͖̞̗̭͍̦̮̖͖͈͍͎̮͕͚̳͚̖͉̦̬̳̰̰̱̭̳͕̙̭̖̼̻̟̩̝̬͍͉ͣͣ̌̊̍ͬ̓ͨͮ̒̾̚͠ͅͅiͫ̽ͩͫ̑ͤ̀̚̚͡ ҉̦̯̫̤͇͇̮̪̙͉̞̺̰̞͔͇̲̖̭̱͉̣͔̗͉͈̞̯̮͈͇n̵̦͙͖̞̟͖̼͇̣̬̹̦̯̞̳̖̮̬̲̺̙̞͉͍͇̹̹̱̣͙̱̣̥͉̩̠͉͉̮͇͉̜̰̹̱̫̬̬̊̍ͫͨ̍͛͂͗̌̆ͬ̀͜͡ͅģ̶̩͚͎̰͈͓̖̳̤̖̪̞̜͇̰͈̳̞̬͙͈̣̰̯̱̤̤͎͔̜̳̣͚͖͎̫͓̻̲̬̖̟̪̱̹̬̖̻̲͎͔̜̩̲̪̝̰͉̝̜̮̱̟͖ͥ̒̈̿̈̾̇ͭ͛̑ͬͨ̍̾̌͑ͫͫ͂ͅͅͅ ̸̴̟͖̭͕̜͔̠̣̤̜̮͎͙̯͎̟͍̦̼͓͙̥͈̙̰̼̻̟̪̺͚̗̦̘̠͙̮͈̥̣̻̼̦̯̳̲̰͖͎̪̬͎̏̍͆͛̿͐ͯͩͦ͢ͅt̷̶̰͔̹͓̞̝̣͕̤̣̣͚̯̗̗̙̠͓̬̜͕̭͕͙̠̤̤̮̯̪͚̭͙̭̯̘̭̰͎̙͚̰̦̦͕̠͉͙̖̜̖̘̞̲̲͍͙̝̞̻̗̤̀̔̎̓͌̆̎̾́̓ͅͅͅͅe̶̵͇̪̩̲̲̣͎̦̤̰͕̼̟͚̥̘͎͉̦̮̘͙̞͕̞̙̼̰̘̱̲̦͖̱̫̙͔̳̞̪̝̻͈̞͈͍̼̗̥͉ͦ̆ͬ̈ͮ̅ͭͥͮͫ͆̆̐ͨ̈̈͛́̚͠͠ͅs

My package.json file:

"private": true,
  "dependencies": {
    "@angular/animations": "~13.1.0",
    "@angular/common": "~13.1.0",
    "@angular/compiler": "~13.1.0",
    "@angular/core": "~13.1.0",
    "@angular/forms": "~13.1.0",
    "@angular/platform-browser": "~13.1.0",
    "@angular/platform-browser-dynamic": "~13.1.0",
    "@angular/router": "~13.1.0",
    "eslint-plugin-jsdoc": "^37.6.1",
    "eslint-plugin-prefer-arrow": "^1.2.3",
    "rxjs": "~7.4.0",
    "tslib": "^2.3.0",
    "zone.js": "~0.11.4"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "~13.1.2",
    "@angular-eslint/builder": "13.0.1",
    "@angular-eslint/eslint-plugin": "13.0.1",
    "@angular-eslint/eslint-plugin-template": "13.0.1",
    "@angular-eslint/schematics": "13.0.1",
    "@angular-eslint/template-parser": "13.0.1",
    "@angular/cli": "~13.1.2",
    "@angular/compiler-cli": "~13.1.0",
    "@types/jasmine": "~3.10.0",
    "@types/node": "^12.11.1",
    "@typescript-eslint/eslint-plugin": "5.3.0",
    "@typescript-eslint/parser": "5.3.0",
    "eslint": "^8.2.0",
    "jasmine-core": "~3.10.0",
    "karma": "~6.3.0",
    "karma-chrome-launcher": "~3.1.0",
    "karma-coverage": "~2.1.0",
    "karma-jasmine": "~4.0.0",
    "karma-jasmine-html-reporter": "~1.7.0",
    "ng-packagr": "^13.0.0",
    "typescript": "~4.5.2"
  },
  "publishConfig": {
    "registry": "https://npm.pkg.github.com/"
  }

The karma.conf.js file:

// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html

module.exports = function (config) {
    config.set({
        basePath: '',
        frameworks: ['jasmine', '@angular-devkit/build-angular'],
        plugins: [
            require('karma-jasmine'),
            require('karma-chrome-launcher'),
            require('karma-jasmine-html-reporter'),
            require('karma-coverage'),
            require('@angular-devkit/build-angular/plugins/karma')
        ],
        client: {
            jasmine: {
                // you can add configuration options for Jasmine here
                // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html
                // for example, you can disable the random execution with `random: false`
                // or set a specific seed with `seed: 4321`
            },
            clearContext: false // leave Jasmine Spec Runner output visible in browser
        },
        jasmineHtmlReporter: {
            suppressAll: true // removes the duplicated traces
        },
        coverageReporter: {
            dir: require('path').join(__dirname, '../../coverage/ngx-persian'),
            subdir: '.',
            reporters: [
                {type: 'html'},
                {type: 'text-summary'}
            ]
        },
        reporters: ['progress', 'kjhtml'],
        port: 9876,
        colors: true,
        logLevel: config.LOG_INFO,
        autoWatch: true,
        browsers: ['Chrome'],
        singleRun: false,
        restartOnFileChange: true
    });
};


来源: stackexchange

问:
MyPy - how do you actually use typeshed stubs in annotations?
Note: this answer on SO does NOT answer my question. It merely restates what I already have read.

How is this supposed to work? Everything I read says typeshed is bundled with MyPy and contains stubs for third party libraries. I have MyPy installed and running in a virtualenv and I'm trying to use it to type Flask code but I'm just not getting it.

I have a background in TypeScript, and I was looking for something similar but I don't understand how we are supposed to use stubs with MyPy. For example, I have this function:

```<code>def create_app(config_name="default"):
    app: Flask = Flask(__name__)
    app.config.from_object(Configuration)
    CORS(app)
    register_extensions(app)
    register_blueprints(app)

    @app.route("/health")
    def health_check():
        return json.dumps({"status": "up"})

    return app
</code>```

Pretty standard for Flask, but with strict disallow any settings this becomes an unsalvageable mess. What is the type of app? I know that typeshed has stubs for flask but I cannot figure out how to actually utilize those stubs. The typeshed docs say:

If you're just using mypy (or pytype or PyCharm), as opposed to developing it, you don't need to interact with the typeshed repo at all: a copy of typeshed is bundled with mypy.

So I'm assuming I do not need to import the types, the docs don't make any mention of importing them anyway.

For example, there is a stub called app.pyi but if I annotate the function like this:

```<code>def create_app(config_name="default") -> app:
</code>```

I get the error name app is not defined. If I import it:

```<code>from typeshed import app
</code>```

I get the error Return type becomes any due to an unfollowed import which, as far as I can tell, means there is no such module typeshed or it has no member called app.

So how do I actually get access to these typeshed stubs? My last resort is to simply clone the typeshed repo and point mypy to it as a custom typeshed dir, but I'd really like to do things the proper way.

答:
Although for this specific instance you can just use imports from the package itself, there are cases where you do need to import types from typeshed for annotations (in my case it was trying to use the wsgi type StartResponse.

These are importable, but only inside an if TYPE_CHECKING: block like so:

from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from _typeshed.wsgi import StartResponse

def application(environ: Dict, start_response: "StartResponse"):
    # etc
```

This only works (and should only be necessary) for types found in the mypy/typeshed/stdlib/_typeshed directory.

ContentLicense: CC BY-SA 4.0

Body:
Note: this answer on SO does NOT answer my question. It merely restates what I already have read.

How is this supposed to work? Everything I read says typeshed is bundled with MyPy and contains stubs for third party libraries. I have MyPy installed and running in a virtualenv and I'm trying to use it to type Flask code but I'm just not getting it.

I have a background in TypeScript, and I was looking for something similar but I don't understand how we are supposed to use stubs with MyPy. For example, I have this function:

def create_app(config_name="default"):
    app: Flask = Flask(__name__)
    app.config.from_object(Configuration)
    CORS(app)
    register_extensions(app)
    register_blueprints(app)

    @app.route("/health")
    def health_check():
        return json.dumps({"status": "up"})

    return app

Pretty standard for Flask, but with strict disallow any settings this becomes an unsalvageable mess. What is the type of app? I know that typeshed has stubs for flask but I cannot figure out how to actually utilize those stubs. The typeshed docs say:

If you're just using mypy (or pytype or PyCharm), as opposed to developing it, you don't need to interact with the typeshed repo at all: a copy of typeshed is bundled with mypy.

So I'm assuming I do not need to import the types, the docs don't make any mention of importing them anyway.

For example, there is a stub called app.pyi but if I annotate the function like this:

def create_app(config_name="default") -> app:

I get the error name app is not defined. If I import it:

from typeshed import app

I get the error Return type becomes any due to an unfollowed import which, as far as I can tell, means there is no such module typeshed or it has no member called app.

So how do I actually get access to these typeshed stubs? My last resort is to simply clone the typeshed repo and point mypy to it as a custom typeshed dir, but I'd really like to do things the proper way.

Body:
Although for this specific instance you can just use imports from the package itself, there are cases where you do need to import types from typeshed for annotations (in my case it was trying to use the wsgi type StartResponse.

These are importable, but only inside an if TYPE_CHECKING: block like so:

from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from _typeshed.wsgi import StartResponse

def application(environ: Dict, start_response: "StartResponse"):
    # etc

This only works (and should only be necessary) for types found in the mypy/typeshed/stdlib/_typeshed directory.


问:
Java help - Output range with increment of 5
Write a program whose input is two integers, and whose output is the first integer and subsequent increments of 5 as long as the value is less than or equal to the second integer.

```<code>-15 10
</code>```

the output is:

```<code>-15 -10 -5 0 5 10
</code>```

Ex: If the second integer is less than the first as in:

```<code>20 5
</code>```

the output is:

Second integer can't be less than the first. For coding simplicity,
output a space after every integer, including the last.

Here is the code I have gotten so far, however, it is producing an error at the bottom I have an example of the input, my output and what was expected. If anyone has any pointers or can show me updated code it would be appreciated.

```<code>import java.util.Scanner;

public class LabProgram {
   public static void main(String[] args) {
       Scanner in = new Scanner(System.in);
        int first = in.nextInt(), second = in.nextInt();
        if (first > second) {
            System.out.println("Second integer can't be less than the first.");
        } else {
            while (first <= second) {
                System.out.print(first + " ");
                first += 10;
            }
            System.out.println();
        }
   }
}

</code>```

Here's what kind of error it is showing:

Input

```<code>-15 10
</code>```

Your output

```<code>-15 -5 5
</code>```

Expected output

```<code>-15 -10 -5 0 5 10
</code>```

答:
You can use the range function from IntStream:

```<code>IntStream.range(-15, 10).filter(x -> x % 5 == 0);
</code>```

As suggested by MC Emperor, there also is a faster solution:

```<code>IntStream.iterate(-15, i -> i + 5).limit((10+15)/5);

/**
 * The algorithm is as follows:
 * iterate(start, i -> i + step).limit((stop-start)/step)
 */
</code>```

Body:
Write a program whose input is two integers, and whose output is the first integer and subsequent increments of 5 as long as the value is less than or equal to the second integer.

-15 10

the output is:

-15 -10 -5 0 5 10

Ex: If the second integer is less than the first as in:

20 5

the output is:

Second integer can't be less than the first. For coding simplicity,
output a space after every integer, including the last.

Here is the code I have gotten so far, however, it is producing an error at the bottom I have an example of the input, my output and what was expected. If anyone has any pointers or can show me updated code it would be appreciated.

import java.util.Scanner;

public class LabProgram {
   public static void main(String[] args) {
       Scanner in = new Scanner(System.in);
        int first = in.nextInt(), second = in.nextInt();
        if (first > second) {
            System.out.println("Second integer can't be less than the first.");
        } else {
            while (first <= second) {
                System.out.print(first + " ");
                first += 10;
            }
            System.out.println();
        }
   }
}

Here's what kind of error it is showing:

Input

-15 10

Your output

-15 -5 5

Expected output

-15 -10 -5 0 5 10

Body:
You can use the range function from IntStream:

IntStream.range(-15, 10).filter(x -> x % 5 == 0);

As suggested by MC Emperor, there also is a faster solution:

IntStream.iterate(-15, i -> i + 5).limit((10+15)/5);

/**
 * The algorithm is as follows:
 * iterate(start, i -> i + step).limit((stop-start)/step)
 */


问:
Python docs: Importing everything from python package convention not clear
The docs say:

If __all__ is not defined, the statement from sound.effects import * does not import all submodules from the package sound.effects into the current namespace; it only ensures that the package sound.effects has been imported (possibly running any initialization code in init.py) and then imports whatever names are defined in the package.

The first clause (before ';') says does not import, the second clause says then imports whatever names are defined. Isn't that a contradiction to the first clause? Logically, everything is imported eventually, so why this convolued wording?

答:
If __all__ is not defined it will import every name from the module that does not start with an _.

```<code>def _private(): ...  # won't import

def public(): ...    # will import
</code>```

Body:
If __all__ is not defined it will import every name from the module that does not start with an _.

def _private(): ...  # won't import

def public(): ...    # will import


问:
JTable wait indicator
I have java applet with JTable. Due to lots of data and poor network bandwidth it takes lots of time to perform any operation like load the table or change it.
I'm thinking about adding sort of activity indicator to let user know that his request is processing.
Before i use JProgressBar, I'd like to know whether there are other options like ajax activity flower.

答: SwingWorker was designed for this, as suggested in this example. In particular, "Note that it safe to mutate the tableModel from inside the process method because it is invoked on the Event Dispatch Thread."—publish()

ContentLicense: CC BY-SA 3.0

Title: JTable wait indicator


问:
best way to replace an eval( "new object()" )
I m looking for the best way to replace eval( "new object();" )

The ugly source :

```<code>    //var type = window.$(droppedDomNode).data("shape");
    var type = "sankey.shape.Start";

    var figure = eval("new "+type+"();");

    // create a command for the undo/redo support
    var command = new draw2d.command.CommandAdd(this, figure, x, y);
</code>```

The eval create a new sankey.shape.Start object.

I'm looking for best solution to replace this kind of code.

Thanks

答:
I'd build an object (mapping) of constructor functions.

```<code>const constructors = {
  "sankey.shape.Start": () => new sankey.shape.Start(),
  // etc... (this could be built programmatically)
};
</code>```

Then,

```<code>const figure = constructors[type]();
</code>```

Body:
I m looking for the best way to replace eval( "new object();" )

The ugly source :

    //var type = window.$(droppedDomNode).data("shape");
    var type = "sankey.shape.Start";

    var figure = eval("new "+type+"();");

    // create a command for the undo/redo support
    var command = new draw2d.command.CommandAdd(this, figure, x, y);

The eval create a new sankey.shape.Start object.

I'm looking for best solution to replace this kind of code.

Thanks

Body:
I'd build an object (mapping) of constructor functions.

const constructors = {
  "sankey.shape.Start": () => new sankey.shape.Start(),
  // etc... (this could be built programmatically)
};

Then,

const figure = constructors[type]();


问:
How to extract href inside h5 tag with beautifulsoup
I'd like to understand how to extract a h5 tag href from code that contains other h tags using beautiful soup?
For the below example I need to extract: 'https://www.podkasty.info/katalog/podkast/8730-Podcast_Tomasza_Terlikowskiego_Tak_my%C5%9Bl%C4%99' inside :

```<code><article class="newest-episode">
                        <div class="newest-episode-body">
                            <img src="https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded_episode400/5444321/5444321-1642001411295-4fd72d6f7def9.jpg" style="width: 100%; " loading="lazy" >
                            <h4 class="text-center">
                                                                    <a href="https://www.podkasty.info/katalog/podkast/5358-Podcasty_Oryginalne_EMPIK_GO/Rozwa%C5%BCna_i_erotyczna_Odcinek_specjalny_Czyje_jest">
                                    <strong>Rozważna i erotyczna | Odcinek specjalny: Czyje jest kobiece ciało? | Magda Mołek i Joanna Keszka</strong>
                                    <br />
                                    Podcasty Oryginalne EMPIK GO                                    </a><br />

                                <small>2022-02-10 07:00:00</small>
                            </h4>
                        </div>
                    </article>
                                        </div>

            <h3>Podkasty ostatnio dodane do katalogu</h3>

                                                                                <article class="blog-post" >
                        <div class="blog-body">
                            <h5 class="text-center">
                                <a href="https://www.podkasty.info/katalog/podkast/8730-Podcast_Tomasza_Terlikowskiego_Tak_my%C5%9Bl%C4%99" >
                                    Podcast Tomasza Terlikowskiego | Tak myślę                                    </a>
                            </h5>
                        </div>
                    </article>
</code>```

I tried with:

```<code>res = requests.get(webpage)
res.raise_for_status()
soup = bs4.BeautifulSoup(res.text, features='html.parser')
urls = soup.select('h5')

for url in urls:
    url_href = url.get('href')
</code>```

but I result with url_href 'None'.

答:
Looking at what is url :

import bs4

res_text = """

         Rozważna i erotyczna | Odcinek specjalny: Czyje jest kobiece ciało? | Magda Mołek i Joanna Keszka

         Podcasty Oryginalne EMPIK GO

         2022-02-10 07:00:00

Podkasty ostatnio dodane do katalogu

         Podcast Tomasza Terlikowskiego | Tak myślę

"""

soup = bs4.BeautifulSoup(res_text, features='html.parser')
urls = soup.select('h5')

for url in urls:
    print(url)
```
<p>gives :</p>
<pre class="lang-html prettyprint-override"><code><h5 class="text-center">

         Podcast Tomasza Terlikowskiego | Tak myślę
</h5>
</code>```

So the name is wrong, it is the whole h5 node and its content. Indeed, that's what you selected : soup.select('h5').

You should rename your variable, and change your selection :

nodes = soup.select('h5>a[href]')  # the  nodes, direct children of
 nodes, and having an `href` attribute

for node in nodes:
    print(node["href"])
```
```https://www.podkasty.info/katalog/podkast/8730-Podcast_Tomasza_Terlikowskiego_Tak_my%C5%9Bl%C4%99
```

Body:
I'd like to understand how to extract a h5 tag href from code that contains other h tags using beautiful soup?
For the below example I need to extract: 'https://www.podkasty.info/katalog/podkast/8730-Podcast_Tomasza_Terlikowskiego_Tak_my%C5%9Bl%C4%99' inside :

                                    Rozważna i erotyczna | Odcinek specjalny: Czyje jest kobiece ciało? | Magda Mołek i Joanna Keszka

                                    Podcasty Oryginalne EMPIK GO

                                2022-02-10 07:00:00

Podkasty ostatnio dodane do katalogu

                                    Podcast Tomasza Terlikowskiego | Tak myślę

I tried with:

res = requests.get(webpage)
res.raise_for_status()
soup = bs4.BeautifulSoup(res.text, features='html.parser')
urls = soup.select('h5')

for url in urls:
    url_href = url.get('href')

but I result with url_href 'None'.

Body:
Looking at what is url :

import bs4

res_text = """
<article class="newest-episode">
   <div class="newest-episode-body">
      <img src="https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded_episode400/5444321/5444321-1642001411295-4fd72d6f7def9.jpg" style="width: 100%; " loading="lazy" >
      <h4 class="text-center">
         <a href="https://www.podkasty.info/katalog/podkast/5358-Podcasty_Oryginalne_EMPIK_GO/Rozwa%C5%BCna_i_erotyczna_Odcinek_specjalny_Czyje_jest">
         <strong>Rozważna i erotyczna | Odcinek specjalny: Czyje jest kobiece ciało? | Magda Mołek i Joanna Keszka</strong>
         <br />
         Podcasty Oryginalne EMPIK GO                                    </a><br />
         <small>2022-02-10 07:00:00</small>
      </h4>
   </div>
</article>
</div>
<h3>Podkasty ostatnio dodane do katalogu</h3>
<article class="blog-post" >
   <div class="blog-body">
      <h5 class="text-center">
         <a href="https://www.podkasty.info/katalog/podkast/8730-Podcast_Tomasza_Terlikowskiego_Tak_my%C5%9Bl%C4%99" >
         Podcast Tomasza Terlikowskiego | Tak myślę                                    </a>
      </h5>
   </div>
</article>
"""

soup = bs4.BeautifulSoup(res_text, features='html.parser')
urls = soup.select('h5')

for url in urls:
    print(url)

gives :

<h5 class="text-center">
<a href="https://www.podkasty.info/katalog/podkast/8730-Podcast_Tomasza_Terlikowskiego_Tak_my%C5%9Bl%C4%99">
         Podcast Tomasza Terlikowskiego | Tak myślę                                    </a>
</h5>

So the name is wrong, it is the whole h5 node and its content. Indeed, that's what you selected : soup.select('h5').

You should rename your variable, and change your selection :

nodes = soup.select('h5>a[href]')  # the <a> nodes, direct children of <h5> nodes, and having an `href` attribute

for node in nodes:
    print(node["href"])

https://www.podkasty.info/katalog/podkast/8730-Podcast_Tomasza_Terlikowskiego_Tak_my%C5%9Bl%C4%99


问:
How to narrow type to object and exclude boolean type?
I am stuck in simple example, tried different tricks to narrow type but TS giving me errors.
Consider following example:

```<code>interface IObject {
    someField: string
}

interface ISomething {
    inner:  IObject | boolean
}

function returnValue(s: string, smth: ISomething): string {
    if (s === 'inner')
        return smth[s].someField
    else
        return ''
}
</code>```

Playground link

How would you tell TS that smth['inner'] is of type IObject, excluding boolean type so TS won't error: Property 'someField' does not exist on type 'boolean | IObject'.
Property 'someField' does not exist on type 'false'.(2339)

答:
```<code>(<ISomething>smth['inner']).someField
</code>```

This should work

You can check for type of if(smth['inner'] instanceof boolean)

Then you can write if statements with that

Body:
I am stuck in simple example, tried different tricks to narrow type but TS giving me errors.
Consider following example:

interface IObject {
    someField: string
}

interface ISomething {
    inner:  IObject | boolean
}

function returnValue(s: string, smth: ISomething): string {
    if (s === 'inner')
        return smth[s].someField
    else
        return ''
}

Playground link

How would you tell TS that smth['inner'] is of type IObject, excluding boolean type so TS won't error: Property 'someField' does not exist on type 'boolean | IObject'.
Property 'someField' does not exist on type 'false'.(2339)

Body:
(<ISomething>smth['inner']).someField

This should work

You can check for type of if(smth['inner'] instanceof boolean)

Then you can write if statements with that


问:
ionic httpClient does wrong request?
So I was trying to make a quick test for my API and I'm getting this weird issue...

This is my code for my ApiService:

```<code>import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Injectable } from '@angular/core';

@Injectable()
export class ApiService {

    constructor(private http: HttpClient) { }

    async getData(url, method): Promise<Object>{
        let fullurl = url + method
        console.log(fullurl);
        return await new Promise(resolve=>{
            this.http.get(fullurl)
            .subscribe(data=>{
                resolve(data);
                return data;
            },error=>{
                console.log(error);
            });
        });
    }
}
</code>```

And this is how I call my service:

```<code>import { Component, OnInit } from '@angular/core';
import { ApiService } from '../services/api.service';

@Component({
  selector: 'app-home',
  templateUrl: 'home.page.html',
  styleUrls: ['home.page.scss'],
  providers:[ApiService]
})
export class HomePage implements OnInit {

  constructor( private api:ApiService,) {}
  url:string="api.test.tk/"
  method:string="SangreDragon"
  json:any
  async ngOnInit(){
    console.log(this.url+ this.method);
    this.json = await this.api.getData(this.url, this.method);
    await console.log(this.json);
  }
}
</code>```

The GET call is going, somehow, to: http://localhost:8100/api.test.tk/SangreDragon

Im using the Ionic serve to test this... Should I compile to test it?

WHY?

答: So apparently... if you don tput the http:// on the URL, it tries to go to localhost... So it's fixed. Thanks for reading I guess.

Title: ionic httpClient does wrong request?

Body:
So I was trying to make a quick test for my API and I'm getting this weird issue...

This is my code for my ApiService:

import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Injectable } from '@angular/core';

@Injectable()
export class ApiService {

    constructor(private http: HttpClient) { }

    async getData(url, method): Promise<Object>{
        let fullurl = url + method
        console.log(fullurl);
        return await new Promise(resolve=>{
            this.http.get(fullurl)
            .subscribe(data=>{
                resolve(data);
                return data;
            },error=>{
                console.log(error);
            });
        });
    }
}

And this is how I call my service:

import { Component, OnInit } from '@angular/core';
import { ApiService } from '../services/api.service';

@Component({
  selector: 'app-home',
  templateUrl: 'home.page.html',
  styleUrls: ['home.page.scss'],
  providers:[ApiService]
})
export class HomePage implements OnInit {

  constructor( private api:ApiService,) {}
  url:string="api.test.tk/"
  method:string="SangreDragon"
  json:any
  async ngOnInit(){
    console.log(this.url+ this.method);
    this.json = await this.api.getData(this.url, this.method);
    await console.log(this.json);
  }
}

The GET call is going, somehow, to: http://localhost:8100/api.test.tk/SangreDragon

Im using the Ionic serve to test this... Should I compile to test it?

WHY?


问:
How to run shell command after gunicorn service? this is for docker enterypoint.sh file
Below is my docker enterypoint.sh file code

```<code>#!/bin/bash
set -e

python3 test1.py

gunicorn -b 0.0.0.0:8000 "app:app" --workers=1 --threads=10 --timeout=3600

node /home/test2.js
</code>```

I want to run test2.js nodejs app after gunicorn service starts because test2.js required to connect with localhost:8000. Please help me with a solution for this

答:
Try this :</p>
```<code>#!/bin/bash
set -e

python3 test1.py

# wait 10 seconds, then run test2.js
{ sleep 10; node /home/test2.js; } &

gunicorn -b 0.0.0.0:8000 "app:app" --workers=1 --threads=10 --timeout=3600

</code>```

Body:
Below is my docker enterypoint.sh file code

#!/bin/bash
set -e

python3 test1.py

gunicorn -b 0.0.0.0:8000 "app:app" --workers=1 --threads=10 --timeout=3600

node /home/test2.js

I want to run test2.js nodejs app after gunicorn service starts because test2.js required to connect with localhost:8000. Please help me with a solution for this

Body:
Try this :

#!/bin/bash
set -e

python3 test1.py

# wait 10 seconds, then run test2.js
{ sleep 10; node /home/test2.js; } &

gunicorn -b 0.0.0.0:8000 "app:app" --workers=1 --threads=10 --timeout=3600


问:
Unwanted early wrapping with "word-break: break-all" (and "break-word")
I have a long string, without whitespace, and a I want to place it in a div, such that

It fills the div as much as possible, without overflowing.

It uses the same amount of characters on each line (except the last, which line may be less).

The div is a responsive div, with width 90vw and height 84vh.

The HTML is:

```<code><div class = "content"><p><code>Some-very-large-string-without-white-space"</code></p></div>
</code>```

Scaling the font so it just fits is easy with a bit of JavaScript:

```<code>function font_fiddle (selection) {
    let element  = document . querySelector (selection)

    let fontSize = element . clientHeight

    if (!element . innerHTML . length) {
        return;
    }

    element . style . fontSize = fontSize + 'px';
    while (element . scrollHeight > element . clientHeight && fontSize > 0) {
        element . style . fontSize  = -- fontSize + 'px';
    }
}
</code>```

font_fiddle (".content") is called when the document loads, and when the window resizes. This parts works well.

The CSS for the code element is:

```<code>code {
    word-break: break-all;
    color: lightgreen;
    background: black;
    font-style: initial;
    font-family: 'Source Code Pro', monospace;
    font-size: 95%;
}
</code>```

Due to the monospace font, and the word-break: break-all, I would expect all lines (with the exception of the last) to have the same number of characters, and to have a straight right "edge". And this would be the case if the string contains just letters and digits. But my string doesn't, and this leads to some lines being a one or a few characters shorter than possible:

Changing the CSS to word-break: break-word; has some effect, but we're still left with a jagged right edge:

Is there a way to get every line contain the same amount of characters, regardless of what those characters are?

This all is with Firefox on MacOS.

答: You could try with overflow-wrap: anywhere;</p>

Body:
I have a long string, without whitespace, and a I want to place it in a div, such that

It fills the div as much as possible, without overflowing.

It uses the same amount of characters on each line (except the last, which line may be less).

The div is a responsive div, with width 90vw and height 84vh.

The HTML is:

Some-very-large-string-without-white-space"

Scaling the font so it just fits is easy with a bit of JavaScript:

function font_fiddle (selection) {
    let element  = document . querySelector (selection)

    let fontSize = element . clientHeight

    if (!element . innerHTML . length) {
        return;
    }

    element . style . fontSize = fontSize + 'px';
    while (element . scrollHeight > element . clientHeight && fontSize > 0) {
        element . style . fontSize  = -- fontSize + 'px';
    }
}

font_fiddle (".content") is called when the document loads, and when the window resizes. This parts works well.

The CSS for the code element is:

code {
    word-break: break-all;
    color: lightgreen;
    background: black;
    font-style: initial;
    font-family: 'Source Code Pro', monospace;
    font-size: 95%;
}

Due to the monospace font, and the word-break: break-all, I would expect all lines (with the exception of the last) to have the same number of characters, and to have a straight right "edge". And this would be the case if the string contains just letters and digits. But my string doesn't, and this leads to some lines being a one or a few characters shorter than possible:

Changing the CSS to word-break: break-word; has some effect, but we're still left with a jagged right edge:

Is there a way to get every line contain the same amount of characters, regardless of what those characters are?

This all is with Firefox on MacOS.


问:
onload not calling my JS function?
i added this JS code:

```<code><script language="JavaScript" type="text/JavaScript">
    var receiveReq = getXmlHttpRequestObject();
    var mTimer;
    var url = "www-rainbowcode-net/apps_dev.php/messagebox/list";

    function getXmlHttpRequestObject()
    {
        alert("in gethttprequest");
        if (window.XMLHttpRequest)
        {
            return new XMLHttpRequest();
        }
        else if(window.ActiveXObject)
        {
            return new ActiveXObject("Microsoft.XMLHTTP");
        }
        else
        {
            //document.getElementById('p_status').innerHTML = 'Status: Cound not create XmlHttpRequest Object.';
        }
    }

    function getNewMessage()
    {
        if (receiveReq.readyState == 4 || receiveReq.readyState == 0)
        {
            alert("state is" + receiveReq.readyState);
            //var params = "name" + name + "&" + "comment=" + comment;
            receiveReq.open("POST", url, true);
            receiveReq.onreadystatechange = processReqChange;
            receiveReq.send(null);
        }
    }

    function processReqChange()
    {
        // only if req shows "loaded"
        if (receiveReq.status == 200)
        {
            alert("processed" + receiveReq.responseText);
           document.getElementById("message_area").innerHTML = receiveReq.responseText;
        }
        else
        {
            alert("There was a problem retrieving the XML data:\n" +
            receiveReq.statusText);
        }
        mTimer = setTimeout('getNewMessage();',2000);
    }
</script>
</code>```

then i have my html mixed with php:

```<code><body onload = "return getNewMessage();">
   <table width='96%' border='0'>
       <?php
        $cursor = $pager->getFirstIndice();
        foreach ($pager->getResults() as $msg)
        {
            $has_freechat = false;
            //changed id to withid here
        $freechat_req_link="profiles/confirmfreechat?withid=".$msg->getRcProfileTableRelatedByProfileIdFrom()->getId();
$freechat_req_link=link_to('Freechat',$freechat_req_link,'class=link_small_dark');

        $cc = sizeof ($fc_records);
        for($i = 0; $i < $cc; $i++)
        {
    if($fc_records[$i]->getProfileIdWith() == $msg->getProfileIdFrom())
    {
        $has_freechat = true;
        break;
    }
      }
      $unique_code_from = $msg->getRcProfileTableRelatedByProfileIdFrom()->getUniqueCode();
      $block_url = link_to('Block User',"blocklist/block?unqiue_code=$unique_code_from",'class=link_medium_blue');
          echo "<div id = 'message_area'>";
      echo "<tr>";
          $date = add_date($msg->getCreatedAt(),$hr=2);
      echo "<td class='td_show_contact_item' align='left'>".$date."</td>";
          $opened_once = $msg->getOpenedOnce();
          if($opened_once >= 1)
          {
              echo "<td class='td_show_contact_item' align='left'>".link_to($msg->getSubject(),   'messagebox/read?cursor='.$cursor,'class=link_medium_blue')."</td>";
          }
          else
          { ?>
          <td align='left'>
             <a href="<?php echo url_for('messagebox/read?cursor=').$cursor ?>" style='color:#ff0000 !important' class='spn_small_red_rbc'><?php echo $msg->getSubject();?>             </a>
          </td>
          <?php
       }
 echo "<td class='td_show_contact_item' align='left'>".$unique_code_from." ( $block_url )</td>";
   echo "</tr>";
   echo "</div>";
   ++$cursor;
 }
 </table>
</code>```

can anybody tell me why my alerts in the 2nd and 3rd function dont execute? the one in the 1st executes

thanks

答:
in getNewMessage you miss () for processReqChange

update:

```<code>  function getNewMessage()
{
    if (receiveReq.readyState == 4 || receiveReq.readyState == 0)
    {
        alert("state is" + receiveReq.readyState);
        //var params = "name" + name + "&" + "comment=" + comment;
        receiveReq.open("POST", url, true);
        receiveReq.onreadystatechange = processReqChange;
        receiveReq.send(null);
    }
     mTimer = setTimeout("getNewMessage()", 5000);
}
</code>```

Title: onload not calling my JS function?

Body:
i added this JS code:

then i have my html mixed with php:

       <?php
        $cursor = $pager->getFirstIndice();
        foreach ($pager->getResults() as $msg)
        {
            $has_freechat = false;
            //changed id to withid here
        $freechat_req_link="profiles/confirmfreechat?withid=".$msg->getRcProfileTableRelatedByProfileIdFrom()->getId();
$freechat_req_link=link_to('Freechat',$freechat_req_link,'class=link_small_dark');

        $cc = sizeof ($fc_records);
        for($i = 0; $i < $cc; $i++)
        {
    if($fc_records[$i]->getProfileIdWith() == $msg->getProfileIdFrom())
    {
        $has_freechat = true;
        break;
    }
      }
      $unique_code_from = $msg->getRcProfileTableRelatedByProfileIdFrom()->getUniqueCode();
      $block_url = link_to('Block User',"blocklist/block?unqiue_code=$unique_code_from",'class=link_medium_blue');
          echo "
";
      echo "
";
          $date = add_date($msg->getCreatedAt(),$hr=2);
      echo "".$date."	";
          $opened_once = $msg->getOpenedOnce();
          if($opened_once >= 1)
          {
              echo "".link_to($msg->getSubject(),   'messagebox/read?cursor='.$cursor,'class=link_medium_blue')."	";
          }
          else
          { ?>

             <a href="<?php echo url_for('messagebox/read?cursor=').$cursor ?>" style='color:#ff0000 !important' class='spn_small_red_rbc'><?php echo $msg->getSubject();?>

          <?php
       }
 echo "".$unique_code_from." ( $block_url )	";
   echo "
";
   echo "
";
   ++$cursor;
 }

can anybody tell me why my alerts in the 2nd and 3rd function dont execute? the one in the 1st executes

thanks

Body:
in getNewMessage you miss () for processReqChange

update:

  function getNewMessage()
{
    if (receiveReq.readyState == 4 || receiveReq.readyState == 0)
    {
        alert("state is" + receiveReq.readyState);
        //var params = "name" + name + "&" + "comment=" + comment;
        receiveReq.open("POST", url, true);
        receiveReq.onreadystatechange = processReqChange;
        receiveReq.send(null);
    }
     mTimer = setTimeout("getNewMessage()", 5000);
}


问:
Could not create Convex Mesh
At the moment i´m creating a custom Mesh. It will be a procedural Planet with high detailed System. My problem is that when i try to create a Convex Mesh Collider i get an Error, actually dont know how to fix it.

```<code>Couldn't create a Convex Mesh from source mesh "MeshName" within the maximum polygons limit (256). The partial hull will be used. Consider simplifying your mesh.
UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&)
</code>```

In the Unity forum i have read it is a Unity bug.

Do you guys know how to fix it?

I need a Mesh Collider because i want to implement Mountains and i need a Player to collide with the planet.

Maybe you know some other Solutions i can use for this instead of a high Poly MeshCollider?

Thank you for your answers Stackoverflow Community.
Best Wishes :)

答: It gives you an error because your mesh exceeds the 256 polygons limit for mesh colliders. Generally speaking, using a mesh collider is not a good practice, it's not efficient in the physics engine. Instead try using other colliders like BoxCollider, SphereCollider, and CapsuleCollider. or maybe combine some of these simpler colliders to create your desired shape.</p>

Title: Could not create Convex Mesh

Body:
At the moment i´m creating a custom Mesh. It will be a procedural Planet with high detailed System. My problem is that when i try to create a Convex Mesh Collider i get an Error, actually dont know how to fix it.

Couldn't create a Convex Mesh from source mesh "MeshName" within the maximum polygons limit (256). The partial hull will be used. Consider simplifying your mesh.
UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&)

In the Unity forum i have read it is a Unity bug.

Do you guys know how to fix it?

I need a Mesh Collider because i want to implement Mountains and i need a Player to collide with the planet.

Maybe you know some other Solutions i can use for this instead of a high Poly MeshCollider?

Thank you for your answers Stackoverflow Community.
Best Wishes :)


问:
Azure Auth Token - AADSTS500113: No reply address is registered for the application
I am trying to obtain a token through postman using the following tutorial:

https://learn.microsoft.com/en-us/azure/healthcare-apis/access-fhir-postman-tutorial

I have successfully filled out the credentials then a pop up appears asking for my credentials. This then throws the following error:

Does anyone know why this error is occurring or how I can fix it?

Thanks

答: I had the same problem. The issue occurs because the redirect url set in Azure for the registered app did not match the one used in my web app. So check if there's a match for both URLs.</p>


问:
Is there a way to get all combinations of overlap between values in dictionary, or from within a list
I have a few lists

```<code>A =['D','KIT','SAP'],
B= ['F','G','LUFT','SAP'],
C= ['I','SAP'],
D= ['SAP','LUF','KIT'],
F= ['SAP','LUF','KIT','HASS']
</code>```

I passed them in combinations to a dictionary. For example, I joined lists A and B as a key 'AB' in my new dictionary and appended the values from both lists like the list of values to that key 'AB'.

```<code>my_dict={"AB":[['D','KIT','SAP'],['F','G','LUFT','SAP']]}
</code>```

My aim to get the overlap between the lists in multiple combination. For that, I could get with the following one liner.

```<code>   for k,v in my_dict.items():
        print(k,list(set.intersection(*[set(x) for x in v])))
</code>```

AB ['SAP']

However, the problem here is that when I have more lists and more combinations it is tedious to define manually a dictionary with all possible combinations.

The aim is to achieve all possible combinations of lists. From the above-mentioned example, I have the following combination of lists. In this case that would be 5*5 +1 = 26 combinations. And in the end, I would like to get the overlap for each of the following combinations.

```<code>   AB, AC, AD, AF
    ABC, ABD, ABF
    ABCD, ABCDF
    ABCDF
BC, BD, BF
DF, DC
FC
</code>```

The question is how could I achieve that in a pythonic way. Any suggestions are much appreciated.

As a side note, I do not want a dictionary in between if this combination of overlap is possible from the lists itself.

Thanks

答:
To start solving the problem, I would turn the lists given to you into a dictionary. This is to easily reference the name of the list and the value with it.

Like what sagi commented, the combinations you listed does not give all combinations. So, I used the package itertools and the code from, https://stackoverflow.com/a/5898031/5131550, to get all possible combinations and slightly modified it to only give the results that are greater than one list long.

Then we need to add these to my_dict. I used a code snippet from geeksforgeeks, https://www.geeksforgeeks.org/python-program-to-convert-a-tuple-to-a-string/, to turn the tuple into a string that we use as a key for my_dict. At the same time we are building a list to add to those afformentioned keys.

Then we just use your function to find the interlapping elements. We should expect there are 2^(len(listsdict)) - len(listsdict) - 1, because we exclude no elements and only one element. Hope this solves it.

```<code>from itertools import combinations

#turn list into a dictionary of lists
listsdict = {
    'A' : ['D','KIT','SAP'],
    'B' : ['F','G','LUFT','SAP'],
    'C' : ['I','SAP'],
    'D' : ['SAP','LUF','KIT'],
    'F' : ['SAP','LUF','KIT','HASS']
}

my_dict = {}

#from https://www.geeksforgeeks.org/python-program-to-convert-a-tuple-to-a-string/
def convertTuple(tup):
    str = ''
    list = []
    for item in tup:
        str = str + item
        list += [listsdict[item]]
    my_dict[str] = list
    return str

#from https://stackoverflow.com/a/5898031/5131550
for L in range(0, len(listsdict)+1):
    for subset in combinations(listsdict, L):
        if len(subset) > 1:
            convertTuple(subset)

#OP's functions
for k,v in my_dict.items():
    print(list(set.intersection(*[set(x) for x in v])))
</code>```

Body:
I have a few lists

A =['D','KIT','SAP'],
B= ['F','G','LUFT','SAP'],
C= ['I','SAP'],
D= ['SAP','LUF','KIT'],
F= ['SAP','LUF','KIT','HASS']

I passed them in combinations to a dictionary. For example, I joined lists A and B as a key 'AB' in my new dictionary and appended the values from both lists like the list of values to that key 'AB'.

my_dict={"AB":[['D','KIT','SAP'],['F','G','LUFT','SAP']]}

My aim to get the overlap between the lists in multiple combination. For that, I could get with the following one liner.

   for k,v in my_dict.items():
        print(k,list(set.intersection(*[set(x) for x in v])))

AB ['SAP']

However, the problem here is that when I have more lists and more combinations it is tedious to define manually a dictionary with all possible combinations.

The aim is to achieve all possible combinations of lists. From the above-mentioned example, I have the following combination of lists. In this case that would be 5*5 +1 = 26 combinations. And in the end, I would like to get the overlap for each of the following combinations.

   AB, AC, AD, AF
    ABC, ABD, ABF
    ABCD, ABCDF
    ABCDF
BC, BD, BF
DF, DC
FC

The question is how could I achieve that in a pythonic way. Any suggestions are much appreciated.

As a side note, I do not want a dictionary in between if this combination of overlap is possible from the lists itself.

Thanks

Body:
To start solving the problem, I would turn the lists given to you into a dictionary. This is to easily reference the name of the list and the value with it.

Like what sagi commented, the combinations you listed does not give all combinations. So, I used the package itertools and the code from, https://stackoverflow.com/a/5898031/5131550, to get all possible combinations and slightly modified it to only give the results that are greater than one list long.

Then we need to add these to my_dict. I used a code snippet from geeksforgeeks, https://www.geeksforgeeks.org/python-program-to-convert-a-tuple-to-a-string/, to turn the tuple into a string that we use as a key for my_dict. At the same time we are building a list to add to those afformentioned keys.

Then we just use your function to find the interlapping elements. We should expect there are 2^(len(listsdict)) - len(listsdict) - 1, because we exclude no elements and only one element. Hope this solves it.

from itertools import combinations

#turn list into a dictionary of lists
listsdict = {
    'A' : ['D','KIT','SAP'],
    'B' : ['F','G','LUFT','SAP'],
    'C' : ['I','SAP'],
    'D' : ['SAP','LUF','KIT'],
    'F' : ['SAP','LUF','KIT','HASS']
}

my_dict = {}

#from https://www.geeksforgeeks.org/python-program-to-convert-a-tuple-to-a-string/
def convertTuple(tup):
    str = ''
    list = []
    for item in tup:
        str = str + item
        list += [listsdict[item]]
    my_dict[str] = list
    return str

#from https://stackoverflow.com/a/5898031/5131550
for L in range(0, len(listsdict)+1):
    for subset in combinations(listsdict, L):
        if len(subset) > 1:
            convertTuple(subset)

#OP's functions
for k,v in my_dict.items():
    print(list(set.intersection(*[set(x) for x in v])))


问:
Why doesn't Lambda understand throws in method signature?
In the following code, I wrote throws in the method signature, but again in Lambda for write, the compiler gives an error. Why?

compiler error: Unhandled exception: java.io.IOException

```<code> public void saveTodoItems() throws IOException {

    try (BufferedWriter outputStream = new BufferedWriter(new OutputStreamWriter(
            new FileOutputStream("TodoItems.txt"), StandardCharsets.UTF_8))) {

        todoItems.forEach(todoItem -> {
                outputStream.write(todoItem.getShortDescription() + "\t" //compile error on write
                        + todoItem.getDetail() + "\t"
                        + todoItem.getDeadLine()+"\n");

        });
    }
}
</code>```

答:
Remember that lambdas are supposed to be implementations of functional interfaces. In this case, forEach takes the functional interface Consumer<T> as a parameter.

```<code>void forEach(Consumer<? super T> action)
</code>```

So your lambda is actually implementing the single abstract method in the Consumer interface - accept. This method is not declared to throw any exceptions:

```<code>void accept(T t); // no throws clause here at all!
</code>```

Therefore, the IOException that the write call could throw is considered to be unhandled. The fact that you have added a throws clause to your saveTodoItems method is irrelevant.

On the other hand, if you have declared your own functional interface that does have a throws clause in its single abstract method:

```<code>interface IOConsumer<T> {
    void accept(T t) throws IOException;
}
</code>```

It is possible to write:

```<code>IOConsumer<TodoItem> consumer = todoItem -> {
    outputStream.write(todoItem.getShortDescription() + "\t"
                    + todoItem.getDetail() + "\t"
                    + todoItem.getDeadLine()+"\n");
};
</code>```

Of course, you would not be able to use this in forEach, because it only accepts a Consumer, not an IOConsumer. You should surround the write with a try...catch, or see here for more alternatives.

Body:
In the following code, I wrote throws in the method signature, but again in Lambda for write, the compiler gives an error. Why?

compiler error: Unhandled exception: java.io.IOException

 public void saveTodoItems() throws IOException {

    try (BufferedWriter outputStream = new BufferedWriter(new OutputStreamWriter(
            new FileOutputStream("TodoItems.txt"), StandardCharsets.UTF_8))) {

        todoItems.forEach(todoItem -> {
                outputStream.write(todoItem.getShortDescription() + "\t" //compile error on write
                        + todoItem.getDetail() + "\t"
                        + todoItem.getDeadLine()+"\n");

        });
    }
}

Body:
Remember that lambdas are supposed to be implementations of functional interfaces. In this case, forEach takes the functional interface Consumer<T> as a parameter.

void forEach(Consumer<? super T> action)

So your lambda is actually implementing the single abstract method in the Consumer interface - accept. This method is not declared to throw any exceptions:

void accept(T t); // no throws clause here at all!

Therefore, the IOException that the write call could throw is considered to be unhandled. The fact that you have added a throws clause to your saveTodoItems method is irrelevant.

On the other hand, if you have declared your own functional interface that does have a throws clause in its single abstract method:

interface IOConsumer<T> {
    void accept(T t) throws IOException;
}

It is possible to write:

IOConsumer<TodoItem> consumer = todoItem -> {
    outputStream.write(todoItem.getShortDescription() + "\t"
                    + todoItem.getDetail() + "\t"
                    + todoItem.getDeadLine()+"\n");
};

Of course, you would not be able to use this in forEach, because it only accepts a Consumer, not an IOConsumer. You should surround the write with a try...catch, or see here for more alternatives.


问:
pythonic way to access data in file structures
I want to access every value (~10000) in .txt files (~1000) stored in directories (~20) in the most efficient manner possible. When the data is grabbed I would like to place them in a HTML string. I do this in order to display a HTML page with tables for each file. Pseudo:

```<code>    fh=open('MyHtmlFile.html','w')
    fh.write('''<head>Lots of tables</head><body>''')
    for eachDirectory in rootFolder:

        for eachFile in eachDirectory:
            concat=''

            for eachData in eachFile:
               concat=concat+<tr><td>eachData</tr></td>
            table='''
                  <table>%s</table>
                  '''%(concat)
        fh.write(table)
    fh.write('''</body>''')
    fh.close()
</code>```

There must be a better way (I imagine it would take forever)! I've checked out set() and read a bit about hashtables but rather ask the experts before the hole is dug.

Thank you for your time!
/Karl

答:
Why do you "imagine it would take forever"? You are reading the file and then printing it out - that's pretty much the only thing you have as a requirement - and that's all you're doing.
You could tweak the script in a couple of ways (read blocks not lines, adjust buffers, print out instead of concatenating, etc.), but if you don't know how much time do you take now, how do you know what is better/worse?

Profile first, then find if the script is too slow, then find a place where it's slow, and only then optimise (or ask about optimisation).

Body:
I want to access every value (~10000) in .txt files (~1000) stored in directories (~20) in the most efficient manner possible. When the data is grabbed I would like to place them in a HTML string. I do this in order to display a HTML page with tables for each file. Pseudo:

    fh=open('MyHtmlFile.html','w')
    fh.write('''Lots of tables''')
    for eachDirectory in rootFolder:

        for eachFile in eachDirectory:
            concat=''

            for eachData in eachFile:
               concat=concat+
eachData

            table='''

%s

                  '''%(concat)
        fh.write(table)
    fh.write('''''')
    fh.close()

There must be a better way (I imagine it would take forever)! I've checked out set() and read a bit about hashtables but rather ask the experts before the hole is dug.

Thank you for your time!
/Karl


问:
Picture source with srcset
I want to use  tag and 3 image formats. avif \ webp \ png. At the same time, but not to forget about retina displays.

At the moment I came up with something like this format:

```<code><picture>
    <source srcset="components/header/img/logo.avif, components/header/img/logo@2x.avif 2x" type="image/avif">
    <source srcset="components/header/img/logo.webp, components/header/img/logo@2x.webp 2x" type="image/webp">
    <img class="someClass" src="components/header/img/logo.png" srcset="components/header/img/logo@2x.png 2x" alt="Logo">
</picture>
</code>```

But how much of this is correct ? Maybe it should be implemented in some other way ?

答:
In the end I got a design that works with both image switching to source (we can get avif\webp for browsers that support it) and srcset which allows us to output x1 or x2 images for different displays.

path to files only for example :)

```<code><picture>
    <source srcset="components/features/img/icon-5.avif 1x, components/features/img/icon-5@2x.avif 2x" type="image/avif">
    <source srcset="components/features/img/icon-5.webp 1x, components/features/img/icon-5@2x.webp 2x" type="image/webp">
    <img class="someClass" src="components/features/img/icon-5.png" alt="Icon" srcset="components/features/img/icon-5.png 1x, components/features/img/icon-5@2x.png 2x">
</picture>
</code>```

Title: Picture source with srcset

Body:
I want to use  tag and 3 image formats. avif \ webp \ png. At the same time, but not to forget about retina displays.

At the moment I came up with something like this format:

<picture>
    <source srcset="components/header/img/logo.avif, components/header/img/logo@2x.avif 2x" type="image/avif">
    <source srcset="components/header/img/logo.webp, components/header/img/logo@2x.webp 2x" type="image/webp">

</picture>

But how much of this is correct ? Maybe it should be implemented in some other way ?

Body:
In the end I got a design that works with both image switching to source (we can get avif\webp for browsers that support it) and srcset which allows us to output x1 or x2 images for different displays.

path to files only for example :)

<picture>
    <source srcset="components/features/img/icon-5.avif 1x, components/features/img/icon-5@2x.avif 2x" type="image/avif">
    <source srcset="components/features/img/icon-5.webp 1x, components/features/img/icon-5@2x.webp 2x" type="image/webp">
    <img class="someClass" src="components/features/img/icon-5.png" alt="Icon" srcset="components/features/img/icon-5.png 1x, components/features/img/icon-5@2x.png 2x">
</picture>


答:
The important distinction is "imports whatever names are defined in the package" vs "does not import all submodules".

Submodules aren't automatically names in the package __init__ module (unless explicitly imported to be).

IOW, with a package

```<code>foo/
  __init__.py
  baz.py
</code>```

with foo/__init__.py containing

```<code>def bar():
   print("bar")
</code>```

the statement

```<code>from foo import *
</code>```

will only bring the function bar into scope (from foo/__init__.py), but not baz (a submodule in the foo package) into scope, unless it's a name in foo/__init__.py, á la

```<code>from . import baz
</code>```

To refer to the sound/ hierarchy in the linked docs (in an abridged form, and assuming there is no code in those __init__.py files):

```<code>sound/
  __init__.py    # Initialize the sound package
  formats/       # Subpackage for file format conversions
    __init__.py
    wavread.py   # Read WAV files
</code>```

this means that your application doing

```<code>from sound import *
</code>```

will not put formats in the scope and

```<code>from sound.formats import *
</code>```

won't give you wavread either.

Title: Python docs: Importing everything from python package convention not clear

Body:
The docs say:

If __all__ is not defined, the statement from sound.effects import * does not import all submodules from the package sound.effects into the current namespace; it only ensures that the package sound.effects has been imported (possibly running any initialization code in init.py) and then imports whatever names are defined in the package.

The first clause (before ';') says does not import, the second clause says then imports whatever names are defined. Isn't that a contradiction to the first clause? Logically, everything is imported eventually, so why this convolued wording?

Body:
The important distinction is "imports whatever names are defined in the package" vs "does not import all submodules".

Submodules aren't automatically names in the package __init__ module (unless explicitly imported to be).

IOW, with a package

foo/
  __init__.py
  baz.py

with foo/__init__.py containing

def bar():
   print("bar")

the statement

from foo import *

will only bring the function bar into scope (from foo/__init__.py), but not baz (a submodule in the foo package) into scope, unless it's a name in foo/__init__.py, á la

from . import baz

To refer to the sound/ hierarchy in the linked docs (in an abridged form, and assuming there is no code in those __init__.py files):

sound/
  __init__.py    # Initialize the sound package
  formats/       # Subpackage for file format conversions
    __init__.py
    wavread.py   # Read WAV files

this means that your application doing

from sound import *

will not put formats in the scope and

from sound.formats import *

won't give you wavread either.


问:
Why is the POST data not sent when text in textarea goes over a certain limit?
I am trying to send the contents of a music review from one page to the other via a POST request. The form for the review contains a textarea field with a character limit of 9900 (the database has a character limit of 10000 for the review):

<textarea name='review_text' cols='200' rows='10' maxlength='9900' placeholder='Reviewtext' required></textarea>

Now, if I paste an example text of length 342 characters into the review textarea, everything is okay and I can read the POST parameters and submit them to the database:

 Musik ist sehr abgefahrene elektronische Musik, sie hat auch mit FKA twigs, RALIA, Björk, Shygirl, Kanye West und SOPHIE kollaboriert, also ist Teil dieser Weird Leftfield Gang.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

However, as soon as the character count hits 343, NONE of the POST parameters are sent through to the next page:

 Musik ist sehr abgefahrene elektronische Musik, sie hat auch mit FKA twigs, RALIA, Björk, Shygirl, Kanye West und SOPHIE kollaboriert, also ist Teil dieser Weird Leftfield Gang.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

As far as I can see, there is no setting in apache limiting the amount of characters in a POST request. Also, when I view the page with the web developer tools, I can see the parameters, but the page that I am sending it too can't read them. What am I doing wrong?

EDIT: This is the code that I use to get the parameters. As I said, none of the values are retrieved if the length of the text area text it longer than 342 characters, but all of them are in the other case.

$festival_name = $_POST["festival"];
$edition_year = $_POST["edition"];
$artist = $_POST["artist"];
$review_text = $_POST["review_text"];
$category = $_POST["category"];
$song = $_POST["song"];
$link = $_POST["link"];
$date = date('Y-m-d');
```

答:
I solved it on my own. The problem seems to be the configured value for post_max_size in php. I set it to 20MB on a whim, and it worked. I didn't think that this is the problem, since 342 characters is a long way away from even 1MB, but somehow POST requests seem to get quite big.

EDIT: The change I made in my .htaccess file:

```<code>php_value post_max_size 20M
</code>```

Body:
I solved it on my own. The problem seems to be the configured value for post_max_size in php. I set it to 20MB on a whim, and it worked. I didn't think that this is the problem, since 342 characters is a long way away from even 1MB, but somehow POST requests seem to get quite big.

EDIT: The change I made in my .htaccess file:

php_value post_max_size 20M


问:
discord.net how to get user input data on slash command option?

var guildCommand = new SlashCommandBuilder();
guildCommand.WithName("question")
.AddOption("answer", ApplicationCommandOptionType.String, "your answer", isRequired: true);
```
<p>I created a slash command with option to get user input data like this.</p>
<pre class="lang-cs prettyprint-override"><code>public async Task EchoUserAnswer(SocketSlashCommand command)
{
    await command.RespondAsync("Your answer is {UserAnswer}");
}
</code>```

And I added this method on SlashCommandExecuted event.

I want to know how to get user answer.

答:
You can use following code:

public async Task EchoUserAnswer(SocketSlashCommand command)
{
    var userInput = command.Data.Options.First().Value.ToString();
    await command.RespondAsync($"Your answer is {userInput}");
}
```

Body:
var guildCommand = new SlashCommandBuilder();
guildCommand.WithName("question")
.AddOption("answer", ApplicationCommandOptionType.String, "your answer", isRequired: true);

I created a slash command with option to get user input data like this.

public async Task EchoUserAnswer(SocketSlashCommand command)
{
    await command.RespondAsync("Your answer is {UserAnswer}");
}

And I added this method on SlashCommandExecuted event.

I want to know how to get user answer.


问:
How to get the resource id/ xpath for Floating Notification of Android
I want to get the resource-id for the floating notification as shown in the image.

For iOS we have the accessibility-id for floating notifications as -NotificationShortLookView . Similarly I am looking for Android OS.

I tried using the xpath like
driver.findElementbyId("//android.widget.TextView[@text='Local Notification']") , but it didn't showed any element. It showed 0 elements as the result. Please suggest

TIA

答: I was able to find the resource-id for the Floating Notification by adding another capability to the existing ones called as enableMultiWindows and set it true in the Appium Desktop application. See the reference Image


问:
Drogon: how to use execSqlCoro? What headers to include?
I'm tryin to use the execSqlCoro function of Drogon. However, I am getting an error:

```<code>error: unable to find the promise type for this coroutine
   26 |   auto municipalities = co_await db->execSqlCoro(
</code>```

What headers to I have to include to get the correct promise type?

See tests here. I tried

```<code>#include <drogon/orm/DbClient.h>
#include <drogon/orm/CoroMapper.h>
</code>```

to no avail.

答:
I'm the author of Drogon's coroutine subsystem. I'm sorry for the confusion. That error message shows up when you didn't mark the function that calls the coroutine having return type as Task<T> (or to be accurate, an awaitable type that is compatible with Drogon or cppcoro's coroutine concept). For example the following function:

void test()
{
    co_await drogon::sleepCoro(app().getLoop(), 1);
}
```
<p>generates the error:</p>
<pre class="lang-cpp prettyprint-override"><code>error: unable to find the promise type for this coroutine
   17 |     co_await drogon::sleepCoro(app().getLoop(), 1);
      |     ^~~~~~~~
</code>```

This requirement is documented in Drogon's coroutine document.

Just know that if you want the coroutine to yield something typed T. Then the return type will be Task<T>.

Thus the the solution is to have a return type of Task<T>

using namespace drogon;
Task<void> test()
{
    co_await sleepCoro(app().getLoop(), 1);
}
```
<hr />
<p>Now, why this is required. To put it very simply (and I'm forecasting C++ veterans will correct me). In C++, the coroutine body (the code that runs) has almost nothing to do with how the coroutine is executed (controlled by <code>return_type::promise_type</code>).</p>
<p>Drogon provides 2 main execution modes. <code>Task<T></code> and <code>AsyncTask</code>. Where <code>Task<T></code> executes the coroutine body upon <code>co_await</code> while <code>AsyncTask</code> runs immediately, cannot be awaited and abort when exception escapes (so don't use <code>AsyncTask</code> unless you know what you are doing).</p>
<p>For example, the coroutine <code>foo</code> always waits for 0.1 seconds then prints "hello". But we can when and how the coroutine is executed by changing the return type.</p>
<pre class="lang-cpp prettyprint-override"><code>template <typename Awaiter>
Awaiter foo()
{
    co_await sleepCoro(app().getLoop(), 0.1);
    std::cout << "hello" << std::endl;
}

// foo<Task<void>>();       // Nothing happens since we didn't await it.
foo<AsyncTask>();           // Waits 0.1 second then print
co_await foo<Task<void>>(); // Waits 0.1 second then print

auto awaiter = foo<Task<void>>();
std::cout << "hi, ";
co_await awaiter;           // Prints "hi, ". Waits 0.1 second then print "hello"
</code>```

Thus the compiler complains when it can't find the promise_type to determine how to execute the coroutine.

Body:
I'm tryin to use the execSqlCoro function of Drogon. However, I am getting an error:

error: unable to find the promise type for this coroutine
   26 |   auto municipalities = co_await db->execSqlCoro(

What headers to I have to include to get the correct promise type?

See tests here. I tried

#include <drogon/orm/DbClient.h>
#include <drogon/orm/CoroMapper.h>

to no avail.

Body:
I'm the author of Drogon's coroutine subsystem. I'm sorry for the confusion. That error message shows up when you didn't mark the function that calls the coroutine having return type as Task<T> (or to be accurate, an awaitable type that is compatible with Drogon or cppcoro's coroutine concept). For example the following function:

void test()
{
    co_await drogon::sleepCoro(app().getLoop(), 1);
}

generates the error:

error: unable to find the promise type for this coroutine
   17 |     co_await drogon::sleepCoro(app().getLoop(), 1);
      |     ^~~~~~~~

This requirement is documented in Drogon's coroutine document.

Just know that if you want the coroutine to yield something typed T. Then the return type will be Task<T>.

Thus the the solution is to have a return type of Task<T>

using namespace drogon;
Task<void> test()
{
    co_await sleepCoro(app().getLoop(), 1);
}

Now, why this is required. To put it very simply (and I'm forecasting C++ veterans will correct me). In C++, the coroutine body (the code that runs) has almost nothing to do with how the coroutine is executed (controlled by return_type::promise_type).

Drogon provides 2 main execution modes. Task<T> and AsyncTask. Where Task<T> executes the coroutine body upon co_await while AsyncTask runs immediately, cannot be awaited and abort when exception escapes (so don't use AsyncTask unless you know what you are doing).

For example, the coroutine foo always waits for 0.1 seconds then prints "hello". But we can when and how the coroutine is executed by changing the return type.

template <typename Awaiter>
Awaiter foo()
{
    co_await sleepCoro(app().getLoop(), 0.1);
    std::cout << "hello" << std::endl;
}

// foo<Task<void>>();       // Nothing happens since we didn't await it.
foo<AsyncTask>();           // Waits 0.1 second then print
co_await foo<Task<void>>(); // Waits 0.1 second then print

auto awaiter = foo<Task<void>>();
std::cout << "hi, ";
co_await awaiter;           // Prints "hi, ". Waits 0.1 second then print "hello"

Thus the compiler complains when it can't find the promise_type to determine how to execute the coroutine.


问:
How to run a react native app (a bare workflow from expo or a regular one) in web (browser)?
I'm trying to run my React Native app as a web site, on a browser.

I tried to go according to https://necolas.github.io/react-native-web/docs/installation/ but the instructions on the Setup page are not clear.
I found some (rare) posts regarding this, but they are old (2019) and seem to deviate from the info in the link above.

I use yarn android to run it on android.

So, I tried using yarn web. Didn't work.

Also, tried the basic react-native start followed by react-native run-web.

It seems the run-web command is not what is needed.

Any assist appreciated.

P.S. I initialized my project through Expo, as a Bare Workflow project. Hope that helps

答:
According to the docs:

Expo for web can work on any React Native project. When you initialize a new project with a bare workflow template using expo-cli, if you run yarn web or npm run web it will start up expo-cli and open your project in a web browser.

The same guides for web from the managed workflow apply here.

So basically just initialise your project using expo init project-name and then select bare workflow or managed workflow. After that you can execute npm run web. It will open up the browser and run the web version of it. Keep in mind that there are some incompatibility of libraries from expo, for example, the Webview is incompatible on the web so you need to switch when on web to an iframe or so.


问:
TypeError: Cannot read properties of undefined (reading 'format')
I am building a web app on NEAR Protocol using React and AssemblyScript (for smart contracts), which send NEAR to any Near wallet. I am constantly getting an error:-

```<code>Money.jsx:35 Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'format')
at submitBtn
</code>```

Whenever I try to send Near. Here is the function I am triggering using a button in react:-

```<code>if ((checkRecipient === null, checkNEAR === null, checkDetails === null)) {
  alert("Fields are empty");
} else {
  console.log("Recipient");

  // Save transaction

  await window.contract.addTransaction({
    reciever: recipientField.current.value,
    details: detailsField.current.value,
    value: nearField.current.value,
  });

  // Send NEAR

  await window.contract.sendMoney({
    account: recipientField.current.value,
    amount: window.utils.format.parseNearAmount(nearField.current.value),
  });

  alert("Money Sent!");
}
</code>```

Here is the contract in AssemblyScript:-

```<code>export function sendMoney(account:string, amount:u128,):void{
 ContractPromiseBatch.create(account).transfer(amount)
 logging.log("Money sended successfully to"+ account)
}
</code>```

Even if I am getting this error, it's right the transaction history and I can see them. I will be glad if someone helps me.

答:
It seems like format is not available in window.utils.format. From the looks of it, you can import utils from "near-api-js" in the top of your file, and use it instead of accessing window:

const { utils } = require("near-api-js");

...
...

  // Send NEAR

  await window.contract.sendMoney({
    account: recipientField.current.value,
    amount: utils.format.parseNearAmount(nearField.current.value), // removed window, use utils from library instead
  });

```

There's also an example from the near-api-js docs on how you can do it.

Body:
I am building a web app on NEAR Protocol using React and AssemblyScript (for smart contracts), which send NEAR to any Near wallet. I am constantly getting an error:-

Money.jsx:35 Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'format')
at submitBtn

Whenever I try to send Near. Here is the function I am triggering using a button in react:-

if ((checkRecipient === null, checkNEAR === null, checkDetails === null)) {
  alert("Fields are empty");
} else {
  console.log("Recipient");

  // Save transaction

  await window.contract.addTransaction({
    reciever: recipientField.current.value,
    details: detailsField.current.value,
    value: nearField.current.value,
  });

  // Send NEAR

  await window.contract.sendMoney({
    account: recipientField.current.value,
    amount: window.utils.format.parseNearAmount(nearField.current.value),
  });

  alert("Money Sent!");
}

Here is the contract in AssemblyScript:-

export function sendMoney(account:string, amount:u128,):void{
 ContractPromiseBatch.create(account).transfer(amount)
 logging.log("Money sended successfully to"+ account)
}

Even if I am getting this error, it's right the transaction history and I can see them. I will be glad if someone helps me.

Body:
It seems like format is not available in window.utils.format. From the looks of it, you can import utils from "near-api-js" in the top of your file, and use it instead of accessing window:

const { utils } = require("near-api-js");

...
...

  // Send NEAR

  await window.contract.sendMoney({
    account: recipientField.current.value,
    amount: utils.format.parseNearAmount(nearField.current.value), // removed window, use utils from library instead
  });

There's also an example from the near-api-js docs on how you can do it.