2014 Northern European Gymnastics Championships

The 2014 Northern European Gymnastics Championships was an artistic gymnastics competition held in Greve Denmark. The event was held between the 12th and 14 September at the Greve Idrætscenter.[1][2]

2014 Northern European Gymnastics Championships
VenueGreve Idrætscenter
LocationGreve, Denmark
Start date12 September 2014
End date14 September 2014

Medalists

Event Gold Silver Bronze
Men
Team all-around
 Denmark
Helge Vammen
Marcus Frandsen
Joao Fuglsig
Joachim Winther
Stig Kjeldsen
 Sweden
Pontus Kallanvaara
Michael Trane
Carl Green
Christopher Soos
 Ireland
Kieran Behan
Andrew Smith
Rohan Sebastian
Christopher O'Connor
Daniel Fox
Individual all-around
 Helge Vammen (DEN)  Pontus Kallanvaara (SWE)  Marcus Frandsen (DEN)
Floor
 Andrew Smith (IRL)  Rohan Sebastian (IRL)  Tom Barnes (SCO)
Pommel horse
 Helge Vammen (DEN)  Anthony Duchars  (IOM)  Marcus Frandsen (DEN)
Rings
 Rohan Sebastian (IRL)  Kieran Behan (IRL)  Pontus Kallanvaara (SWE)
Vault
 Stig Kjeldsen (DEN)  Carl Green (SWE)  Joao Fuglsig (DEN)
Parallel bars
 Helge Vammen (DEN)  Jack Neill (NIR)
 Joao Fuglsig (DEN)
None awarded
Horizontal bar
 Kieran Behan (IRL)  Rohan Sebastian (IRL)  Joachim Winther (DEN)
Women
Team all-around
 Wales
Maisie Methuen
Rebecca Moore
Angel Romaeo
Emily Thomas
Latalia Bevan
 Denmark
Mette Hulgaard
Marie Skammelsen
Victoria Gilberg
Sarah El-Dabagh
Michelle Lauritsen
 Finland
Annika Urvikko
Erika Pakkala
Veronika Vuosjoki
Anna Salmi
Monica Sileoni
Individual all-around
 Maisie Methuen (WAL)  Annika Urvikko (FIN)  Rebecca Moore (WAL)
Vault
 Annika Urvikko (FIN)  Marie Skammelsen (DEN)  Casey Jo Bell (NIR)
Uneven bars
 Irina Sazonova (ISL)  Jolie Ruckley (WAL)  Casey Jo Bell (NIR)
Balance beam
 Latalia Bevan (WAL)  Martine Skregelid (NOR)  Casey Jo Bell (NIR)
Floor
 Angel Romaeo (WAL)  Maisie Methuen (WAL)  Martine Skregelid (NOR)
gollark: > `import hashlib`Hashlib is still important!> `for entry, ubq323 in {**globals(), **__builtins__, **sys.__dict__, **locals(), CONSTANT: Entry()}.items():`Iterate over a bunch of things. I think only the builtins and globals are actually used.The stuff under here using `blake2s` stuff is actually written to be ridiculously unportable, to hinder analysis. This caused issues when trying to run it, so I had to hackily patch in the `/local` thing a few minutes before the deadline.> `for PyObject in gc.get_objects():`When I found out that you could iterate over all objects ever, this had to be incorporated somehow. This actually just looks for some random `os` function, and when it finds it loads the obfuscated code.> `F, G, H, I = typing(lookup[7]), typing(lookup[8]), __import__("functools"), lambda h, i, *a: F(G(h, i))`This is just a convoluted way to define `enumerate(range))` in one nice function.> `print(len(lookup), lookup[3], typing(lookup[3])) #`This is what actually loads the obfuscated stuff. I think.> `class int(typing(lookup[0])):`Here we subclass `complex`. `complex` is used for 2D coordinates within the thing, so I added some helper methods, such as `__iter__`, allowing unpacking of complex numbers into real and imaginary parts, `abs`, which generates a complex number a+ai, and `ℝ`, which provvides the floored real parts of two things.> `class Mаtrix:`This is where the magic happens. It actually uses unicode homoglyphs again, for purposes.> `self = typing("dab7d4733079c8be454e64192ce9d20a91571da25fc443249fc0be859b227e5d")`> `rows = gc`I forgot what exactly the `typing` call is looking up, but these aren't used for anything but making the fake type annotations work.> `def __init__(rows: self, self: rows):`This slightly nonidiomatic function simply initializes the matrix's internals from the 2D array used for inputs.> `if 1 > (typing(lookup[1]) in dir(self)):`A convoluted way to get whether something has `__iter__` or not.
gollark: If you guess randomly the chance of getting none right is 35%ish.
gollark: Anyway, going through #12 in order:> `import math, collections, random, gc, hashlib, sys, hashlib, smtplib, importlib, os.path, itertools, hashlib`> `import hashlib`We need some libraries to work with. Hashlib is very important, so to be sure we have hashlib we make sure to keep importing it.> `ℤ = int`> `ℝ = float`> `Row = "__iter__"`Create some aliases for int and float to make it mildly more obfuscated. `Row` is not used directly in anywhere significant.> `lookup = [...]`These are a bunch of hashes used to look up globals/objects. Some of them are not actually used. There is deliberately a comma missing, because of weird python string concattey things.```pythondef aes256(x, X): import hashlib A = bytearray() for Α, Ҙ in zip(x, hashlib.shake_128(X).digest(x.__len__())): A.append(Α ^ Ҙ) import zlib, marshal, hashlib exec(marshal.loads(zlib.decompress(A)))```Obviously, this is not actual AES-256. It is abusing SHAKE-128's variable length digests to implement what is almost certainly an awful stream cipher. The arbitrary-length hash of our key, X, is XORed with the data. Finally, the result of this is decompressed, loaded (as a marshalled function, which is extremely unportable bytecode I believe), and executed. This is only used to load one piece of obfuscated code, which I may explain later.> `class Entry(ℝ):`This is also only used once, in `typing` below. Its `__init__` function implements Rule 110 in a weird and vaguely golfy way involving some sets and bit manipulation. It inherits from float, but I don't think this does much.> `#raise SystemExit(0)`I did this while debugging the rule 110 but I thought it would be fun to leave it in.> `def typing(CONSTANT: __import__("urllib3")):`This is an obfuscated way to look up objects and load our obfuscated code.> `return getattr(Entry, CONSTANT)`I had significant performance problems, so this incorporates a cache. This was cooler™️ than dicts.
gollark: The tiebreaker algorithm is vulnerable to any attack against Boris Johnson's Twitter account.
gollark: I can't actually shut them down, as they run on arbitrary google services.

References

  1. "Archived copy". Archived from the original on 10 May 2017. Retrieved 20 April 2016.CS1 maint: archived copy as title (link)
  2. "Archived copy". Archived from the original on 7 April 2016. Retrieved 21 April 2016.CS1 maint: archived copy as title (link)
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.